1、表和sql的优化
-》大表拆分成小表、分区表、外部表、临时表都是属于优化的一块
-》分区表:检索更快速
-》外部表:数据安全性
-》临时表&拆分子表:简化复杂的SQL以及需求
2、SQL可以从join和fliter两方面深入
3、MR优化
-》map和reduce的个数
-》一个分片就是一个块,一个块对应一个maptask
-》Hadoop源码中有一个计算公式
min(max_split_size,max(min_split_size,block_size))
-》min_split_size默认值0(最小分片大小)
-》max取的时候取的是block_size,block_size默认是128
-》max_split_size默认值256(最大分片大小)
-》这个公式决定了map的个数
-》肯定不能直接去修改HDFS的block_size
-》一般在实际的生产环境中HDFS一旦format格式化之后,block_size大小不会去修改的
-》通过修改max_split_size和min_split_size来影响map的个数
-》并行执行
-》针对有些互相没有依赖关系的独立的job,可以选择并发的执行job
hive.exec.parallel
-》是否开启 并行执行的功能
hive.exec.parallel.thread.number
-》设置并行执行的线程个数
-》一般在工作中会选择去开启该功能
-》根据实际的集群的状况和服务器的性能合理的设置线程数目
-》JVM重用
-》mapreduce.job.jvm.numtasks通过合理的测试,设置一个合理的数目
-》推测执行
-》当某个任务出现迟迟不结束的情况,那么会考虑开启推测执行,开启一个一模一样的任务去完成
-》两个任务谁先完成,就会关闭另一个
-》分为map端的推测和reduce端的推测
-》不好的地方:过多的消耗资源
mapreduce.map.speculative
mapreduce.reduce.speculative
-》额外消耗节点资源
-》可能会出现重复写入的情况,产生异常
4、hive本地模式
-》业务场景:处理小数据集的时候,速度会更快一些
-》hive.exec.mode.local.auto
-》本地模式的限制:数据的输入大小不能超过128MB
-》本地模式的限制:map数不能超过4个
-》本地模式的限制:reduce的个数不能超过1个