一、hdfs调优:

在hdfs-site.xml文件中修改配置文件:

1.dfs.namenode.handler.count:调整namenode处理客户端的线程数

value = 20*logN,N为集群大小

二、yarn调优

在yarn-site.xml文件中修改配置文件:

1.yarn.nodemanager.resource:表示该节点上YARN可使用的物理内存总量,默认是8192 (MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。

2.yarn.scheduler.maximum-allocation-mb:单个任务可申请的最多物理内存量,默认是8192 (MB)。

三、MapReduce 调优:

1.mapreduce.map.memory.mb:一个MapTask可使用的资源上限((单位:MB),默认为1024。如果MaplasK实际使用的资源量超过该值,则会被强制杀死。

2.mapreduce.reduce.memory.mb:一个ReduceTask可使用的资源上限(单位:MB),默认为1024。如果ReduceTask实际使用的资源量超过该值,则会被强制杀死。

3.mapreduce.map.cpu.vcores:每个MapTask可使用的最多cpu core数目,默认值:1

4.mapreduce.reduce.cpu.vcores:每个ReduceTask可使用的最多cpu core数目,默认值: 1

5.mapreduce.reduce.shuffle.parallelcopies:每个Reduce去Map中取数据的并行数。默认值是5

6.mapreduce.reduce.shuffle.merge.percent:Buffer中的数据达到多少比例开始写入磁盘。默认值0.66

7.mapreduce.reduce.shuffle.input.buffer.percent:Buffer大小占Reduce可用内存的比例。默认值0.7

8.mapreduce.reduce.input.buffer.percent:指定多少比例的内存用来存放Buffer中的数据,默认值是0.0

思路二:

我猜测那些集群的参数调优不是修改参数,而是将配置文件升级为高可用:

1.core-site.xml

<property>

<name>fs.defaultFS</name>

<value>hdfs://master</value>

</property>

<property>

<name>io.file.buffer.size</name>

<value>65536</value>

<description>读写缓存大小设定,该属性值单位为KB,65536KB即为默认的64M</description>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>file:/home/hadoopdir/tmp/</value>

<description>临时文件路径,默认为/tmp,在虚拟机中必须指定这一项为其他目录,否则随着虚拟机的重启,/tmp目录会自动消失</description>

</property>

<property>

<name>ha.zookeeper.quorum</name>

<value>masterNode1:2181,slaveNode1:2181,slaveNode2:2181</value>

<!--各个zookeeper节点的客户端连接地址,注意端口的需要与zoo.cfg-一致-->

</property>

2.hdfs-site.xml

<property>

<name>dfs.namenode.name.dir</name>

<value>file:///home/hadoopdir/dfs/name</value>

<description>hdfs元数据存存储目录</description>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/home/hadoopdir/dfs/data,/home/hadoopdir/dfs/data2</value>

<description>DataNode在本地文件系统中存放块的路径,如果是多个路径,请用逗号隔开,会自动选用多个目录进行数据存储</description>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>

<description>备份数量,伪分布式则将其配置成1</description>

</property>

<property>

<name>dfs.blocksize</name>

<value>33554432</value>

<description>设置大文件系统HDFS块,默认值为64M</description>

</property>

<property>

<name>dfs.namenode.handler.count</name>

<value>100</value>

<description>NameNode服务器线程数,用于处理来自DataNodes的RPC</description>

</property>

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

<description>是否开通HDFS的Web接口,默认端口是50070</description>

</property>

<property>

<name>dfs.nameservices</name>

<value>master</value>

<!--nameServices名字,必须和core-site中的统一 -->

</property>

<property>

<name>dfs.ha.namenodes.master</name>

<value>nn1,nn2</value>

<!-- master1下的NameNode,namenode有哪些,当前版本仅允许两个NameNode,nn1和nn2的名字随便起,但不能重复-->

</property>

<property>

<name>dfs.namenode.rpc-address.master.nn1</name>

<value>masterNode1:9000</value>

<!-- nn1的RPC通信地址 -->

</property>

<property>

<name>dfs.namenode.rpc-address.master.nn2</name>

<value>slaveNode1:9000</value>

<!-- nn2的RPC通信地址 -->

</property>

<property>

<name>dfs.namenode.http-address.master.nn1</name>

<value>masterNode1:50070</value>

<!-- nn1的http通信地址 -->

</property>

<property>

<name>dfs.namenode.http-address.master.nn2</name>

<value>slaveNode1:50070</value>

<!-- nn2的http通信地址 -->

</property>

<property>

<name>dfs.namenode.servicerpc-address.master.nn1</name>

<value>masterNode1:53310</value>

</property>

<property>

<name>dfs.namenode.servicerpc-address.master.nn2</name>

<value>slaveNode1:53310</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://masterNode1:8485;slaveNode1:8485;slaveNode2:8485/master</value>

<!--设置一组 journalNode 的 URI 地址,Active NN 将 edit log 写入这些JournalNode,而 Standby NameNode 读取这些 edit log,并作用在内存中的目录树中。如果journalNode有多个节点则使用分号分割。该属性值应符合以下格式qjournal://host1:port1;host2:port2;host3:port3/journalId -->

</property>

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/hadoop/Jnode</value>

<!-- 指定JournalNode在本地磁盘存放数据的位置 -->

</property>

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

<!-- 开启NameNode失败自动切换 -->

</property>

<property>

<name>dfs.client.failover.proxy.provider.master</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

<!-- 配置失败自动切换实现方式 -->

</property>

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

<value>shell(true)</value>

<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->

</property>

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/root/.ssh/id_rsa</value>

<!-- 使用sshfence隔离机制时需要ssh免登陆,所以双主机之间必须使用ssh免密登录 -->

</property>

<property>

<name>dfs.ha.fencing.ssh.connect-timeout</name>

<value>3000</value>

<!-- 配置sshfence隔离机制超时时间 -->

</property>

3.mapred-site.xml

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

<description>执行框架设置为Hadoop的YARN</description>

</property>

<property>

<name>mapreduce.map.memory.mb</name>

<value>1024</value>

<description>对maps的资源限制,单位mb</description>

</property>

<property>

<name>mapreduce.map.java.opts</name>

<value>-Xmx819M</value>

<description>maps中对jvm child设置堆大小</description>

</property>

<property>

<name>mapreduce.reduce.memory.mb</name>

<value>2048</value>

<description>设置 reduces的资源限制,单位mb</description>

</property>

<property>

<name>mapreduce.reduce.java.opts</name>

<value>-Xmx1638M</value>

<description>reduces对 jvm child设置的堆大小</description>

</property>

<property>

<name>mapreduce.task.io.sort.mb</name>

<value>256</value>

<description>更高的内存限制,而对数据进行排序的效率,单位mb</description>

</property>

<property>

<name>mapreduce.task.io.sort.factor</name>

<value>50</value>

<description>在文件排序中更多的流合并为一次</description>

</property>

<property>

<name>mapreduce.reduce.shuffle.parallelcopies</name>

<value>50</value>

<description>通过reduces从很多的map中读取较多的平行副本</description>

</property>

4.yarn-site.xml

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

<!-- 开启RM高可用 -->

</property>

<property>

<!--启动自动故障转移,默认为false-->

<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<property>

<!--启用一个内嵌的故障转移,与ZKRMStateStore一起使用。-->

<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>yrc</value>

<!-- 指定RM的cluster id -->

</property>

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

<!-- 指定rm的名字 rm1代表masterNode1,rm2代表slaveNode1,这个地方无需修改,默认就好。-->

</property>

<property>

<name>yarn.resourcemanager.hostname.rm1</name>

<value>masterNode1</value>

<!-- 分别指定RM的地址 -->

</property>

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>slaveNode1</value>

<!-- 分别指定RM的地址 -->

</property>

<property>

<name>yarn.resourcemanager.recovery.enabled</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.store.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>masterNode1:2181,slaveNode1:2181,slaveNode2:2181</value>

<!-- 指定zk集群地址 -->

</property>

<property>

<name>yarn.log-aggregation-enable</name>

<value>true</value>

<!-- 指定yarn可以从不同jobtracker抓取数据 -->

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

<description>NodeManager上运行的附属服务。需配置成mapreduce_shuffle才可运行MapReduce程序</description>

</property>

<property>

<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

<value>org.apache.hadoop.mapred.ShuffleHandler</value>

<description>启用的资源调度器主类</description>

</property>

<property>

<name>yarn.nodemanager.resource.memory-mb</name>

<value>4096</value>

</property>

<property>

<name>yarn.scheduler.minimum-allocation-mb</name>

<value>1024</value>

</property>

<property>

<name>yarn.scheduler.maximum-allocation-mb</name>

<value>4096</value>

</property>

<property>

<name>yarn.nodemanager.vmem-check-enabled</name>

<value>false</value>

<description>是否强制检查虚拟内存的使用配额,如果内存不够的时候系统就会使用swap空间内存,而hadoop会强制检查使用的虚拟内存的数额,如果使用的虚拟内存的数量大于真实内存的2.1倍,会自动杀死相关字进程。</description>

</property>

<property>

<name>yarn.nodemanager.pmem-check-enabled</name>

<value>false</value>

</property>

<property>

<name>yarn.nodemanager.resource.cpu-vcores</name>

<value>1</value>

<description>表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物理CPU总数。推荐在slaveNode中将这个数值设定为1</description>

</property>

<property>

<name>yarn.scheduler.maximum-allocation-vcores</name>

<value>3</value>

<description>单个任务可申请的最多虚拟CPU个数,默认是32。</description>

</property>

嗯嗯嗯~~~~大概就是这样子了