Hadoop生产调优手册(3)

HDFS —集群迁移
Apache Apache 集群间数据拷贝
1 scp 实现两个远程主机之间的文件复制
scp -r hello.txt root@hadoop103:/user/atguigu/hello.txt
// push
scp -r root@hadoop103:/user/atguigu/hello.txt hello.txt
// pull
scp -r root@hadoop103:/user/atguigu/hello.txt root@hadoop104:/user/atguigu // 是通过本
地主机中转实现两个远程主机的文件复制;如果在两个远程主机之间 ssh 没有配置的情况下
可以使用该方式。
2 )采用 distcp 命令实现两个 Hadoop 集群之间的递归数据复制
[atguigu@hadoop102 hadoop-3.1.3]$ bin/hadoop distcp
hdfs://hadoop102:8020/user/atguigu/hello.txt
hdfs://hadoop105:8020/user/atguigu/hello.txt
7.2 Apache CDH 集群间数据拷贝
MapReduce 生产经验
MapReduce 跑的慢的原因
MapReduce 程序效率的瓶颈在于两点:
1 )计算机性能
CPU 、内存、磁盘、网络
2 I/O 操作优化
1 )数据倾斜
(2) Map 运行时间太长,导致 Reduce 等待过久
(3)小文件过多
2 MapReduce 常用调优参数
map端优化

 reduce端优化

 MapReduce 数据倾斜问题

1 )数据倾斜现象
数据频率倾斜 —— 某一个区域的数据量要远远大于其他区域。
数据大小倾斜 —— 部分记录的大小远远大于平均值。
2 )减少数据倾斜的方法
1 )首先检查是否空值过多造成的数据倾斜
生产环境,可以直接过滤掉空值;如果想保留空值,就自定义分区,将空值加随机数打
散。最后再二次聚合。
2 )能在 map 阶段提前处理,最好先在 Map 阶段处理。如: Combiner MapJoin
3 )设置多个 reduce 个数

Hadoop-Yarn 生产经验
常用的调优参数
1 )调优参数列表
1 Resourcemanager 相关
1 Resourcemanager 相关
yarn.resourcemanager.scheduler.client.thread-count ResourceManager 处理调度
器请求的线程数量
yarn.resourcemanager.scheduler.class
配置调度器
(2) Nodemanager 相关
yarn.nodemanager.resource.memory-mb
NodeManager 使用内存数
yarn.nodemanager.resource.system-reserved-memory-mb NodeManager 为系统保留
多少内存,和上一个参数二者取一即可
yarn.nodemanager.resource.cpu-vcores
NodeManager 使用 CPU 核数
yarn.nodemanager.resource.count-logical-processors-as-cores
是否将虚拟核
数当作 CPU 核数
yarn.nodemanager.resource.pcores-vcores-multiplier 虚拟核数和物理核数乘数,例
如: 4 8 线程,该参数就应设为 2
yarn.nodemanager.resource.detect-hardware-capabilities 是否让 yarn 自己检测硬
件进行配置
yarn.nodemanager.pmem-check-enabled
是否开启物理内存检查限制 container
yarn.nodemanager.vmem-check-enabled
是否开启虚拟内存检查限制 container
yarn.nodemanager.vmem-pmem-ratio 虚拟内存物理内存比例
(3) Container 容器相关
yarn.scheduler.minimum-allocation-mb 容器最小内存
yarn.scheduler.maximum-allocation-mb 容器最大内存
yarn.scheduler.minimum-allocation-vcores
容器最小核数
yarn.scheduler.maximum-allocation-vcores
容器最大核数
Hadoop 综合调优
Hadoop 小文件优化方法
Hadoop 小文件弊端
HDFS 上每个文件都要在 NameNode 上创建对应的元数据,这个元数据的大小约为
150byte ,这样当小文件比较多的时候,就会产生很多的元数据文件, 一方面会大量占用
NameNode 的内存空间 另一方面就是元数据文件过多,使得寻址索引速度变慢。
小文件过多,在进行 MR 计算时,会生成过多切片,需要启动过多的 MapTask 。每个
MapTask 处理的数据量小, 导致 MapTask 的处理时间比启动时间还小,白白消耗资源。
1 )在数据采集的时候,就将小文件或小批数据合成大文件再上传 HDFS (数据源头)
2 Hadoop Archive (存储方向)
是一个高效的将小文件放入 HDFS 块中的文件存档工具,能够将多个小文件打包成一
HAR 文件,从而达到减少 NameNode 的内存使用
3 CombineTextInputFormat (计算方向)
CombineTextInputFormat 用于将多个小文件在切片过程中生成一个单独的切片或者少
量的切片
4 )开启 uber 模式,实现 JVM 重用(计算方向)
默认情况下,每个 Task 任务都需要启动一个 JVM 来运行,如果 Task 任务计算的数据
量很小,我们可以让同一个 Job 的多个 Task 运行在一个 JVM 中,不必为每个 Task 都开启
一个 JVM

 

1 )未开启 uber 模式,在 /input 路径上上传多个小文件并执行 wordcount 程序
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar
wordcount /input /output2
(2)观察控制台
2021-02-14 16:13:50,607 INFO mapreduce.Job: Job job_1613281510851_0002
running in uber mode : false
(3)观察

 

(4)开启 uber 模式,在 mapred-site.xml 中添加如下配置

 

(5)分发配置
[atguigu@hadoop102 hadoop]$ xsync mapred-site.xml
(6)再次执行 wordcount 程序
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar
wordcount /input /output2
(7)观察控制台
2021-02-14 16:28:36,198 INFO mapreduce.Job: Job
job_1613281510851_0003 running in uber mode : true
(8)观察

 

测试 MapReduce 计算性能
使用 Sort 程序评测 MapReduce
1 )使用 RandomWriter 来产生随机数,每个节点运行 10 Map 任务,每个 Map
生大约 1G 大小的二进制随机数
[atguigu@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-
3.1.3.jar randomwriter random-data
(2)执行 Sort 程序
[atguigu@hadoop102 mapreduce]$ hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-
3.1.3.jar sort random-data sorted-data
(3)验证数据是否真正排好序了
[atguigu@hadoop102 mapreduce]$
hadoop jar /opt/module/hadoop-
3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client
jobclient-3.1.3-tests.jar testmapredsort -sortInput random-data
-sortOutput sorted-data
企业开发场景案例
需求
1 )需求:从 1G 数据中,统计每个单词出现次数。服务器 3 台,每台配置 4G 内存,
4 CPU 4 线程。
(2)需求分析:
1G / 128m = 8 MapTask 1 ReduceTask 1 mrAppMaster
平均每个节点运行 10 / 3 台 ≈ 3 个任务(4 3 3)
HDFS 参数调优
1 )修改: hadoop-env.sh

 

(2)修改 hdfs-site.xml
<!-- NameNode 有一个工作线程池,默认值是 10 -->
<property>
<name>dfs.namenode.handler.count</name>
<value> 21 </value>
</property>
(3)修改 core-site.xml
<!-- 配置垃圾回收时间为 60 分钟 -->
<property>
<name>fs.trash.interval</name>
<value>60</value>
</property>
(4)分发配置
[atguigu@hadoop102 hadoop]$ xsync hadoop-env.sh hdfs-site.xml
core-site.xml
MapReduce 参数调优
1 )修改 mapred-site.xml

 

 

(2)分发配置
[atguigu@hadoop102 hadoop]$ xsync mapred-site.xml
Yarn 参数调优
1 )修改 yarn-site.xml 配置参数如下:

 

 

 

(2)分发配置
[atguigu@hadoop102 hadoop]$ xsync yarn-site.xml
执行程序
1 )重启集群
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/stop-yarn.sh
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
(2)执行 WordCount 程序
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar
wordcount /input /output
(3)观察 Yarn 任务执行页面
http://hadoop103:8088/cluster/apps
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据开发工程师-宋权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值