首页 > 代码库 > spark的一些经验

spark的一些经验

1,如果写sql语句能实现的操作,最好就不要用dataframe了;spark会自己做优化,性能和稳定性都会比较高

2,中间过程存成parquet文件而不是HIVE表

3,能用reduceByKey就不要用groupByKey

4,在数据量很大或者存在倾斜的时候,可以考虑先repartition后在forEachPartition操作

5,将dataframe注册成临时表的代价很小

6,在spark内做一些output操作时,最好在forEachPartition内操作;比如每个partition内批量写Hbase或者elastic search

7,Hbase还是很脆弱的,批量写入时,尽量控制写入的速度

8,序列化可以使用json或者kyro;前者比较好理解,后者性能更好

9,批量读取HBase时,使用newAPIHadoopRdd比较高效

10,不要用流的思维写批处理程序

11,不要乱用cache,除非后续会多次重复使用

12,Hbase内rowkey最好不要设计成列不固定的形式

13,Hbase内rowkey设计成json的形式还是蛮好使的

14,一些中间的数据结构可以选择存在redis内,而不是存在Hbase内反复读写

15,多使用sparkUI进行分析,可能改几个配置,性能就上去了,Bug就解决了

16,写代码时,留一些基于用户的打印信息,方便后续测试;

17,测试的一些套路:用local模式在driver上看输出、在sparkUi上看executor的log或者自己做单机测试

 

spark的一些经验