hadoop经验调优

说明: 这个参数调优借鉴之尚硅谷课程

1. 配置hdfs存储多目录

生产环境的磁盘情况
在这里插入图片描述
问题: 需要增加的磁盘? 如何进行存储

说明:

HDFS的DataNode节点保存数据的路径由dfs.datanode.data.dir参数决定,其默认值为file://${hadoop.tmp.dir}/dfs/data,若服务器有多个磁盘,必须对该参数进行修改。如服务器磁盘如上图所示,则该参数应修改为如下的值。

hdfs-site.xml

<property>
    <name>dfs.datanode.data.dir</name>
	<value>file:///dfs/data1,
	file:///**hd2**/dfs/data2,  <!--注意这个目录的位置data1就是本地, hd2,hd3,hd4都是挂载的磁盘-->
	file:///**hd3**/dfs/data3,
	file:///**hd4**/dfs/data4</value>
</property>

注意:因为每台服务器节点的磁盘情况不同,所以这个配置配完之后,不需要分发


2. 集群数据均衡

问题: 有时候因为新添加的节点,或者是因为副本分配问题出现了数据不均衡问题
1)节点间数据均衡
开启数据均衡命令:

start-balancer.sh -threshold 10
对于参数10,代表的是集群中各个节点的磁盘空间利用率相差不 超过10%,可根据实际情况进行调整。

(2)停止数据均衡命令:

stop-balancer.sh

注意:由于启动数据均衡命令比较耗费资源, 最好找一台比较空闲的机器进行执行, 防止namenode 宕机

3. 集群配置LZO压缩

  1. hadoop本身并不支持lzo压缩,故需要使用twitter提供的hadoop-lzo开源组件。hadoop-lzo需依赖hadoop和lzo进行编译.这个编译是有点麻烦的,大家可以自己到网上去找一下和hadoop对应版本编译好的lZO
  2. 将编译好的jar包放到 hadoop/share/hadoop/common/下
  3. 在core-site.xml添加以下支持
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec
</value>
</property>

<property>
    <name>io.compression.codec.lzo.class</name>
    <value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
  1. 上面就已经添加好LZO的支持了,LZO虽然支持切片,但是如果想要进行使用切片,还得创建索引文件

例:
hadoop jar LZOjar包com.hadoop.compression.lzo.DistributedLzoIndexer 目标lzo文件路径

4.参数调优

4.1 hdfs-site.xml:

NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。
对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。

<property>
    <name>dfs.namenode.handler.count</name>
    <value>10</value>
</property>

计算方式:
dfs.namenode.handler.count=20 X log e 服务器个数,比如集群规模(DataNode台数)为8台时,此参数设置为20 X log e 8 = 41。

4.2 yarn-site.xml

(1)情景描述:总共7台机器,每天几亿条数据,数据源->Flume->Kafka->HDFS->Hive
面临问题:数据统计主要用HiveSQL,没有数据倾斜,小文件已经做了合并处理,开启的JVM重用,而且IO没有阻塞,内存用了不到50%。但是还是跑的非常慢,而且数据量洪峰过来时,整个集群都会宕掉。基于这种情况有没有优化方案。

(2)解决办法
内存利用率不够。这个一般是Yarn的2个配置造成的单个任务可以申请的最大内存大小Hadoop单个节点可用内存大小。调节这两个参数能提高系统内存的利用率。

(a)yarn.nodemanager.resource.memory-mb:
表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。
(b)yarn.scheduler.maximum-allocation-mb:
单个任务可申请的最多物理内存量,默认是8192(MB)。

hdfs读写性能测试:

写性能测试:

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB

读性能测试:

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB

将读写性能测试产生的数据进行删除:

hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.2-tests.jar TestDFSIO -clean

参数解析:

-write : 写
-read: 读
-nrFiles : 文件的个数
-filesize: 每个文件的大小

Guess you like

Origin blog.csdn.net/First_____/article/details/121375650