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个