大数据框架优化

优化

hadoop优化
    1)Map阶段
    (1)增大环形缓冲区大小。由100m扩大到200m
    (2)增大环形缓冲区溢写的比例。由80%扩大到90%
    (3)减少对溢写文件的merge次数。(10个文件,一次20个merge)
    (4)不影响实际业务的前提下,采用Combiner提前合并,减少 I/O。
    2)Reduce阶段
    (1)合理设置Map和Reduce数:
    (2)设置Map、Reduce共存
    (3)规避使用Reduce
    (4)增加每个Reduce去Map中拿数据的并行数
    (5)集群性能可以的前提下,增大Reduce端存储数据内存的大小。 
    3)压缩:
    (1)map前支持切片的Bzip2、LZO。
    (2)map输出snappy、LZO;
    (3)reduce输出gzip。
    4)整体
    (1)NodeManager默认内存8G,配置为100G
    (2)单任务默认内存8G
    (3)MapTask内存,ReduceTask内存,默认1G,正常不需要调整。
    如果数据量大于128m,可以增加到4-5g
    (5)MapTask堆内存大小,ReduceTask堆内存大小
    (7)增加MapTask、ReduceTask的CPU核数
    (8)增加每个Container的CPU核数和内存大小
    (9)在hdfs-site.xml文件中配置多目录(多磁盘)
    (10)DataNode的并发心跳 有公式。

    Hive优化
        1)MapJoin
        2)行列过滤
            少用SELECT *。
            先过滤再关联 
        3)列式存储
        4)采用分区,分桶
        5)合理设置Map数
        6)合理设置Reduce数
        8)小文件解决方案
        9)开启map端combiner
        set hive.map.aggr=true;
        10)压缩
        11)采用tez引擎或者spark引擎


spark优化
    代码优化
        1、对多次使用的RDD进行缓存
        2、避免重复创建RDD,尽量复用
        3、尽量避免使用shuffle类算子
        4、尽量使用高性能算子
            reduceByKey:map端预聚合
            mapPartitions
            foreachPartitions
        5、广播大变量
        6、使用Kryo优化序列化的性能
        7、优化数据结构
        8、使用高性能的库fastutil 
    
    参数优化
        1、--num-executors
            指定executor的数量,一般50~100
        2、--executor-memory
            指定每个executor的内存,一般给4~8G
        3、--executor-cores
            指定每个executor的核数,一般为2~4c,
        4、spark.storage.memoryFraction 0.6
            用于缓存的内存比例
        5、spark.shuffle.memoryFraction 0.2
            用于shuffle的内存比例
        9、spark.sql.shuffle.partitions
            SparkSQL中shuffle后的并行度,默认200
        10、spark.network.timeout
            默认超时时间 120s
            
            

你可能感兴趣的:(hadoop,大数据)