优化的方案:
1.mapreduce: 切片优化:调整map的数量 (1)当集群的资源(cpu,内存)比较充足,可以适当将切片大小调大,这时会增加map数量,加快读取处理速度。 (2)当集群的资源(cpu,内存)比较紧缺,可以适当将切片大小调大,这时减少map数量,可以一定程度提高效率。 (3)数据本地化,任务本地化处理(就是大小是128M):可以适当增加副本数(前提是磁盘空间充足) 2.调整reduce的数量 reduce的数量默认由分区决定,也可以直接手动设置reduce个数。 3.yarn yarn默认的调度策略是:计算能力调度 默认的资源任务队列:default (1)设置yarn多队列运行:可以在提交执行任务的时候,指定任务所在的队列,队列之间的资源相对独立。 capacity-scheduler.xml这个文件是用于修改yarn资源情况。(这个文件的在:/usr/local/soft/hadoop-2.6.0/etc/hadoop/)
<!----修改----->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,hivetest,sparktest</value>
<description>
The queues at the this level (root is the root queue).
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>40</value>
<description>Default queue target capacity.</description>
</property>
<property>
<!---增加--->
<name>yarn.scheduler.capacity.root.hivetest.capacity</name>
<value>30</value>
<description>Default queue target capacity.</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.sparktest.capacity</name>
<value>30</value>
<description>Default queue target capacity.</description>
</property>
(2)如果是MapReduce任务,还需要修改mapred-site.xml
<property>
<name>mapred.queue.names</name>
<value>default,hivetest,sparktest</value>
</property>
(3)将修改后的配置文件发送到其他的字节点,替换 scp -r /usr/local/soft/hadoop-2.6.0/etc/hadoop node1:/usr/local/soft/hadoop-2.6.0/etc/hadoop scp -r /usr/local/soft/hadoop-2.6.0/etc/hadoop node2:/usr/local/soft/hadoop-2.6.0/etc/hadoop (4)修改后,重新分发到各节点,重启。 yarn rmadmin -refreshQueues(刷新队列) (5)在MapReduce程序中可以指定执行队列。 Configuration conf = new Configuration(); conf.set("mapreduce.job.queuenam","sparktest"); 4.HDFS:做HA高可靠。如果磁盘空间充足,可以增加副本数。还有一些小文件合并。 hdfs的文件存储:比如可以压缩文件等。 5.MapReduce程序层面的优化: (1)combine:在一些等幂的问题上使用(例如:求和),可以减少shuffle过程。提高计算效率。 set.CombinerClass(Class<? extends Reducer> cls) (2)mapjoin:一个大表关联一个小表的时候。一般是512M以下。将小表广播复制到各个计算节点的内存中,用于匹配大表。