#yyds干货盘点#Hadoop企业级生产调优手册(一)

网友投稿 255 2022-11-22

#yyds干货盘点#Hadoop企业级生产调优手册(一)

一、HDFS核心参数

1.1 NameNode内存生产配置

1. NameNode 内存计算 每个文件块大概占用 150byte,一台服务器 128G 内存为例,能存储多少文件块呢? 128*128*1024*1024/150Byte≈9.1亿

2. Hadoop2.x 系列, 配置 NameNode 内存 NameNode 内存默认 2000m,如果服务器内存 4G, NameNode 内存可以配置 3G。在 hadoop-env.sh 文件中配置如下。

HADOOP_NAMENODE_OPTS= Xmx 3072 m

3. Hadoop3.x 系列,配置 NameNode 内存 hadoop-env.sh 中描述 Hadoop 的内存是动态分配的

# The maximum amount of heap to use (Java -Xmx). If no unit # is provided, it will be converted to MB. Daemons will # prefer any Xmx setting in their respective _OPT variable. # There is no default; the JVM will autoscale based upon machine # memory size. # export HADOOP_HEAPSIZE_MAX= # The minimum amount of heap to use (Java -Xms). If no unit # is provided, it will be converted to MB. Daemons will # prefer any Xms setting in their respective _OPT variable. # There is no default; the JVM will autoscale based upon machine # memory size. # export HADOOP_HEAPSIZE_MIN= HADOOP_NAMENODE_OPTS= Xmx102400m

查看 NameNode 占用内存

[Tom@hadoop102 hadoop-3.1.3]$ jps 3136 JobHistoryServer 3200 Jps 2947 NodeManager 2486 NameNode 2622 DataNode [Tom@hadoop102 hadoop-3.1.3]$ jps -heap 2486 Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 478150656 (456.0MB)

查看 DataNode 占用内存

[Tom@hadoop102 hadoop-3.1.3]$ jmap -heap 2622 Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 478150656 (456.0MB)

查看发现 hadoop102 上的 NameNode 和 DataNode 占用内存都是自动分配的,且相等。不是很合理。

经验参考: HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS-Xmx1024m" export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS-Xmx1024m"

1.2 NameNode心跳并发配置

dfs.namenode.handler.count 21

企业经验:dfs.namenode.handler.count=20 × logeClustersize ,比如集群规模 (DataNode 台数)为 3 台时,此参数设置为 21。可通过简单的 python 代码计算该值,代码如下。

[Tom@hadoop102 hadoop-3.1.3]$ python Python 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import math >>> print int(20*math.log(3)) 21 >>> quit()

1.3 开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。

3. 启用回收站 修改core-site.xml配置,垃圾回收时间为 1 分钟。

fs.trash.interval 1

4. 查看回收站 回收站目录在 HDFS 集群中的路径:/user/Tom/.Trash/….

5. 注意:通过网页上直接删除的文件也不会走回收站。

6. 通过程序删除的文件不会经过回收站,需要调用 moveToTrash() 才进入回收站

Trash trash = N ew Trash(conf); trash.moveToTrash(path);

7. 只有在命令行利用 hadoop fs -rm 命令删除的文件才会走回收站。

[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /input 2021-06-24 18:20:36,515 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hadoop102:8020/input' to trash at: hdfs://hadoop102:8020/user/Tom/.Trash/Current/input

(8)恢复回收站数据

[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /user/Tom/.Trash/Current/input /input

二、HDFS集群压测

100Mbps 单位是 bit;10M/s 单位是 byte;1byte=8bit;100Mbps/8=12.5M/s。

测试网速:来到 hadoop102 的 /opt/software 目录, 创建一个

[Tom@hadoop102 software]$ python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 port 8000 ...

2.1 测试HDFS写性能

注意: nrFiles n 为生成 mapTask 的数量,生产环境一般可通过 hadoop103:8088 查看 CPU 核数,设置为(CPU 核数 - 1)

[Tom@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 128MB 2021-06-24 21:58:25,548 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false 2021-06-24 21:58:25,568 INFO fs.TestDFSIO: ----- TestDFSIO ----- : write 2021-06-24 21:58:25,568 INFO fs.TestDFSIO: Date & time: Thu Jun 24 21:58:25 CST 2021 2021-06-24 21:58:25,568 INFO fs.TestDFSIO: Number of files: 5 2021-06-24 21:58:25,568 INFO fs.TestDFSIO: Total MBytes processed: 640 2021-06-24 21:58:25,568 INFO fs.TestDFSIO: Throughput mb/sec: 0.88 2021-06-24 21:58:25,568 INFO fs.TestDFSIO: Average IO rate mb/sec: 0.88 2021-06-24 21:58:25,568 INFO fs.TestDFSIO: IO rate std deviation: 0.04 2021-06-24 21:58:25,568 INFO fs.TestDFSIO: Test exec time sec: 246.54 2021-06-24 21:58:25,568 INFO fs.TestDFSIO:

Number of files:生成 mapTask 数量,一般是集群中 CPU 核数 -1,我们测试虚拟机就按照实际的物理内存 -1 分配即可 Total MBytes processed:单个 map 处理的文件大小 Throughput mb/sec:单个 mapTak 的吞吐量 计算方式:处理的总文件大小 / 每一个 mapTask 写数据的时间累加 集群整体吞吐量:生成 mapTask 数量 * 单个 mapTak 的吞吐量 Average IO rate mb/sec:平均 mapTak 的吞吐量 计算方式:每个 mapTask 处理文件大小 / 每一个 mapTask 写数据的时间全部相加除以 task 数量 IO rate std deviation:方差、反映各个 mapTask 处理的差值,越小越均衡

注意:如果测试过程中,出现异常,可以在yarn-site.xml中设置虚拟内存检测为 false。然后分发配置并重启集群。

yarn.nodemanager.vmem-check-enabled false

如果客户端不在集群节点,那就三个副本都参与计算

2.2 测试HDFS读性能

测试内容:读取 HDFS 集群 5 个 128M 的文件

[Tom@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 5 -fileSize 128MB 2021-06-25 17:34:41,179 INFO fs.TestDFSIO: ----- TestDFSIO ----- : read 2021-06-25 17:34:41,181 INFO fs.TestDFSIO: Date & time: Fri Jun 25 17:34:41 CST 2021 2021-06-25 17:34:41,182 INFO fs.TestDFSIO: Number of files: 5 2021-06-25 17:34:41,182 INFO fs.TestDFSIO: Total MBytes processed: 640 2021-06-25 17:34:41,182 INFO fs.TestDFSIO: Throughput mb/sec: 4.6 2021-06-25 17:34:41,182 INFO fs.TestDFSIO: Average IO rate mb/sec: 4.74 2021-06-25 17:34:41,182 INFO fs.TestDFSIO: IO rate std deviation: 0.93 2021-06-25 17:34:41,182 INFO fs.TestDFSIO: Test exec time sec: 82.47 2021-06-25 17:34:41,182 INFO fs.TestDFSIO:

删除测试生成数据

[Tom@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean

三、HDFS多目录

3.1 NameNode多目录配置

(1)在 hdfs-site.xml文件中添加如下内容

dfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2

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

(2)停止集群,删除三台节点的 data 和 logs 中所有数据。

[Tom@hadoop102 hadoop 3.1.3 ]$ rm rf data/ logs/ [Tom@hadoop103 hadoop 3.1.3 ]$ rm rf data/ logs/ [Tom@hadoop104 hadoop 3.1.3 ]$ rm rf data/ logs/

(3)格式化集群并启动。

[Tom@hadoop102 hadoop 3.1.3 ]$ bin/hdfs namenode format [Tom@hadoop102 hadoop 3.1.3 ]$ sbin/start dfs.sh

查看结果

[Tom@hadoop102 dfs]$ ll 总用量12 drwx------. 3 Tom Tom 4096 12月11 08:03 data drwxrwxr-x. 3 Tom Tom 4096 12月11 08:03 name1 drwxrwxr-x. 3 Tom Tom 4096 12月11 08:03 name2

检查 name1 和 name2 里面的内容,发现一模一样。

3.2 DataNode多目录配置

(1)在 hdfs-site.xml文件中添加如下内容

dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2

查看结果

[Tom@hadoop102 dfs]$ ll 总用量12 drwx------. 3 Tom Tom 4096 4月4 14:22 data1 drwx------. 3 Tom Tom 4096 4月4 14:22 data2 drwxrwxr-x. 3 Tom Tom 4096 12月11 08:03 name1 drwxrwxr-x. 3 Tom Tom 4096 12月11 08:03 name2

向集群上传一个文件,再次观察两个文件夹里面的内容发现不一致 (一个有数一个没有)

[Tom@hadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /

3.3 集群数据均衡之磁盘间数据均衡

[Tom@hadoop102 hadoop-3.1.3]$ hdfs diskbalancer -plan hadoop102

(2)执行均衡计划

[Tom@hadoop102 hadoop-3.1.3]$ hdfs diskbalancer -execute hadoop102.plan.json

(3)查看当前均衡任务的执行情况

[Tom@hadoop102 hadoop-3.1.3]$ hdfs diskbalancer -query hadoop102

(4)取消均衡任务

[Tom@hadoop102 hadoop-3.1.3]$ hdfs diskbalancer -cancel hadoop102.plan.json

四、HDFS集群扩容及缩容

4.1 添加白名单

在 NameNode 节点的 /opt/module/hadoop-3.1.3/etc/hadoop 目录下分别创建 whitelist 和 blacklist 文件

(1)创建白名单

[Tom@hadoop102 hadoop]$ vim whitelist

在 whitelist 中添加下主机名称,假如集群正常工作的节点为 102 103

hadoop102 hadoop103

(2)创建黑名单,保持空的就可以

[Tom@hadoop102 hadoop]$ touch blacklist

在 hdfs-site.xml 配置文件中增加 dfs.hosts 配置参数

dfs.hosts /opt/module/hadoop-3.1.3/etc/hadoop/whitelist dfs.hosts.exclude /opt/module/hadoop-3.1.3/etc/hadoop/blacklist

分发配置文件 whitelist hdfs-site.xml

[Tom@hadoop104 hadoop]$ xsync hdfs site.xml whitelist

第一次添加白名单必须重启集群,不是第一次,只需要刷新 NameNode 节点即可

[Tom@hadoop102 hadoop 3.1.3]$ myhadoop.sh stop [Tom@hadoop102 hadoop 3.1.3]$ myhadoop.sh start

[Tom@hadoop104 hadoop-3.1.3]$ hadoop fs -put NOTICE.txt /

[Tom@hadoop102 hadoop]$ vim whitelist 修改为如下内容 hadoop102 hadoop103 hadoo p104

刷新 NameNode

[Tom@hadoop102 hadoop 3.1.3]$ hdfs dfsadmin refreshNodes Refresh nodes successful

4.2 服役新服务器

需求 随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。

环境准备 (1)在 hadoop100 主机上再克隆一台 hadoop105 主机 (2)修改 IP 地址和主机名称

[root@hadoop105 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 [root@hadoop105 ~]# vim /etc/hostname

(3)拷贝 hadoop102 的 /opt/module 目录和 /etc/profile.d/my_env.sh 到 hadoop105

[Tom@hadoop102 opt]$ scp-r module/* Tom@hadoop105:/opt/module/ [Tom@hadoop102 opt]$ sudo scp/etc/profile.d/my_env.sh root@hadoop105:/etc/profile.d/my_env.sh [Tom@hadoop105 hadoop-3.1.3]$ source /etc/profile

(4)删除 hadoop105 上 Hadoop 的历史数据, data 和 logs 数据

[Tom@hadoop105 hadoop 3.1.3]$ rm rf data/ logs/

(5)配置 hadoop102 和 hadoop103 到 hadoop105 的 ssh 无密登录

[ hadoop102 .ssh]$ ssh copy id hadoop105 [ hadoop103 .ssh]$ ssh copy id hadoop105

服役新节点具体步骤 (1)直接启动 DataNode 即可关联到集群

[Tom@hadoop105 hadoop-3.1.3]$ hdfs --daemon start datanode [Tom@hadoop105 hadoop-3.1.3]$ yarn --daemon start nodemanager

[Tom@hadoop102 hadoop]$ vim whitelist 修改为如下内容 hadoop102 hadoop103 hadoop104 hadoop105

(2)分发

[Tom@hadoop102 hadoop]$ xsync whitelist

(3)刷新 NameNode

[Tom@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -refreshNodes Refresh nodes successful

在 hadoop105 上上传文件

[Tom@hadoop105 hadoop-3.1.3]$ hadoop fs -put /opt/module/hadoop-3.1.3/LICENSE.txt /

4.3 服务器间数据均衡

[Tom@hadoop105 hadoop 3.1.3]$ sbin/start balancer.sh threshold 10

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

停止数据均衡命令

[Tom@hadoop105 hadoop-3.1.3]$ sbin/stop-balancer.sh

注意 :由于 HDFS 需要启动单独的 Rebalance Server 来执行 Rebalance 操作, 所以尽量不要在 NameNode 上执行 start-balancer.sh,而是找一台比较空闲的机器。

4.4 黑名单退役服务器

[Tom@hadoop102 hadoop vim blacklist

添加如下主机名称(要退役的节点) hadoop105

注意:如果白名单中没有配置,需要在 hdfs-site.xml 配置文件中增加 dfs.hosts 配置参数

dfs.hosts.exclude /opt/module/hadoop-3.1.3/etc/hadoop/blacklist

分发配置文件 blacklist,hdfs-site.xml

[Tom@hadoop104 hadoop]$ xsync hdfs-site.xml blacklist

第一次添加黑名单必须重启集群,不是第一次,只需要刷新 NameNode 节点即可

[Tom@hadoop102 hadoop-3.1.3]$ hdfs dfsadmin -refreshNodes Refresh nodes successful

[Tom@hadoop105 hadoop-3.1.3]$ hdfs --daemon stop datanode [Tom@hadoop105 hadoop-3.1.3]$ yarn--daemon stop nodemanager

如果数据不均衡,可以用命令实现集群的再平衡

[Tom@hadoop102 hadoop-3.1.3]$ sbin/start-balancer.sh -threshold 10

参考文档:

美团数据平台及数仓建设实践,超十万字总结 上百本优质大数据书籍,附必读清单(大数据宝藏) 五万字 | 耗时一个月整理出这份Hadoop吐血宝典

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:AVR USB接口的温度测量系统下位机设计
下一篇:以太网接口的设计嵌入式系统是关键
相关文章

 发表评论

暂时没有评论,来抢沙发吧~