当前位置: 首页 > news >正文

Hadoop性能调优建议

一、服务器配置

1. BIOS配置:    关闭smmu/关闭cpu预取/performance策略

2.  硬盘优化    raid0 打卡cache  /jbod     scheduler/sector_size/read_ahead_kb

3.  网卡优化    rx_buff/ring_buffer/lro/中断绑核/驱动升级

4.  内存插法:要用均衡插法,内存配对插。

5.  占用通道:先把每个通道都插满,再去插对应通道。(内存通道分布请查看机箱背板示意图)

6.  Rank数:内存条硬件参数,1R和2R的区别,得用2R的

7.  频率:内存条主频,要选择主频高的。

 8. Scheduler策略:ssd硬盘得用noop策略;机械硬盘建议deadline策略

 9. 驱动升级:用最新版本的网卡驱动程序 

二、操作系统调优

1、关闭selinux:

为了减少selinux的性能损耗,关闭selinux。vim /etc/sysconfig/selinux命令,打开selinux文件。将"SELINUX=enforcing" 改为 "SELINUX=disabled"。保存文件,重启服务器。

2、配置扩展文件描述符:

需要配置最大打开文件数为102400,否则在测试过程中可能会导致软件最大打开文件数被限制在1024,影响服务器性能。在“/etc/security/limits.conf”文件中写入以下配置。保存文件并重启。

 

*表示所有用户;hard表示严格的设定,必定不能超过这个设定的数值;soft表示警告的设定,可以超过这个设定值,但是若超过则有警告信息。

3、关闭不用的系统服务

Cpus等

4、配置网卡中断:(绑定的核专门用于处理网卡中断)

关闭irqbalance,重启服务器生效

systemctl stop irqbalance.service

systemctl disable irqbalance.service

步骤1:查询网卡中断默认在哪个numa上

cat /sys/class/net/$eth1 /device/numa_node

步骤2:查询中断号

cat /proc/interrupts | grep $eth1 | awk -F ':' '{print $1}'

步骤3:根据中断号,将每个中断各绑定在一个核上。

 echo $cpunum > /proc/irq/$irq/smp_affinity_list

步骤4:查看是否绑定成功

cat /proc/irq/$irq/smp_affinity_list

 5、关闭透明大页

查看配置:

cat /sys/kernel/mm/transparent_hugepage/enable

若显示不为nener则修改配置:

echo never > /sys/kernel/mm/transparent_hugepage/enable

三、Hadoop参数调优

1、Yarn组件在3.1.0版本合入的新特性支持,支持Yarn组件在启动Container时使能numa 感知功能,原理是读取系统物理节点上每个Numa节点的CPU核、内存容量,使用 Numactl命令指定启动container的CPU范围和mem bind范围,减少跨片访问.

Yarn-default.xml  里的

yarn.nodemanager.numa-awareness.enabled             默认值为false改成ture

yarn.nodemanager.numa-awareness.read-topology  默认值为false改成ture

2、单台服务器可启动容器数量设置:

Mapred-site.xml

根据内存计算:NUM_container(mem)=容器内存/container内存

Mapreduc.map.memory.mb

Mapreduce.reduce.memory.mb

3、根据CPU计算:

NUM_container(vcore)=容器vcore/container vcore

mapreduce.map.cpu.vcores

Mapreduce.reduce.cpu.vcores

默认的DefaultResourceCalculator只考虑内存资源,并不采用vcore相关设置。   采用DominantResourceCalculator可以精确控制设置vcore资

在Capacity-scheduler.xml

yarn.scheduler.capacity.resource-calculator  默认值为DefaultResourceCalculator  改为  DominantResourceCalculator

4、Yarn 资源设置:资源的多少会决定任务执行的性能,而不决定任务运行的成败

Yarn-default.xml   

yarn.nodemanager.resource.memory-mb   默认值为-1   改为  容器内存,一般设置物理内存75%左右

yarn.scheduler.minimum-allocation-mb    默认值为1024MB   改为  最小容器内存;最大容器数量(单节点)=容器内存/最小容器内

mapred-default.xml

mapreduce.map.java.opts     JVM最大内存,一般设置为container内存的0.75 ~ 0.8

mapreduce.reduce.java.opts    JVM最大内存,一般设置为container内存的0.75 ~ 0.8

5、HDFS的Handler数量由dfs.namenode.handler.count、dfs.namenode.service.handler.count和dfs.datanode.handler.count控制。4节点规模不需要配置的太大。

dfs.namenode.handler.count   Namenode 的RPC服务的用于监听处理来自客户端请求的线程数

Dfs.namenode.service.handler.count   Namenode的RPC服务端用于监听来自datanode和所有非客户端节点请求的线程数

Dfs.datanode.handler.count    Datanode同时可以处理来自客户端的请求线程数,当集群规模比较大或者同时跑的任务比较多,可以增加此值

6、减小副本数降低可靠性的方式提升写入的性能。减轻磁盘IO压力和网络压力。

增大客户端任务写入数据时数据包大小。dfs.client-write-packet-size设置过小,导致发送数据包的效率较低,写HDFS数据较慢,适当扩大该参数可以提升写HDFS时的效率(设置会65536的整数倍,推荐131072)

Dfs.replication    默认3副本,但可以修改客户端的副本数设置

Dfs.client-write-packet-size   客户端任务写入数据时数据包大小

6、Map buffer大小:

mapreduce.task.io.sort.mb  一般设置为容器内存的25%,加大可以减少map中间结果spill到硬盘次数。

mapreduce.map.sort.spill.percent  默认0.8 , io sort buffer 达到80%时开始spill到硬盘。

mapreduce.reduce.shuffle.parallelcopies  默认 5或者10 , 可加大

7、reduce merge 内存中merge

每个reduce task把map 结果copy过去时都要对从各个map 端来的数据做merge(合并)动作, reduce端的内存没有那么大的时候, 只能把拉过来的数据先保存到本地磁盘中然后才做merge, 如果reduce端
的内存可以设置的很大, 完全就可以做memtomem的merge动作,
mapreduce.reduce.merge.memtomem.enabled=true

当map输出文件达到mapreduce.reduce.merge.memtomem.threshold时,触发合并

8、Heartbeat

yarn.nodemanager.heartbeat.interval-ms 1000   (ms)  设置成100

yarn.resourcemanager.nodemanagers.heartbeat-interval-ms


9、读写文件的buffer设置

io.file.buffer.size

这个属性只要是读写文件就都得使用. 默认4K (4K~64K,太大了可能会变差)

 

 

http://www.lryc.cn/news/238691.html

相关文章:

  • 算法的奥秘:常见的六种算法(算法导论笔记2)
  • Python算法——树的路径和算法
  • 数据结构之链表练习与习题详细解析
  • QT中使用unity
  • QTableView/QTableWidget设置单元格字体颜色及背景色
  • 电脑上可以写便签的软件哪些界面比较可爱且好用?
  • 2021秋招-总目录
  • HTML5生成二维码
  • 大数据-之LibrA数据库系统告警处理(ALM-25005 Nscd服务异常)
  • NLP:使用 SciKit Learn 的文本矢量化方法
  • 这些仪表板常用的数据分析模型,你都见过吗?
  • 【Proteus仿真】【Arduino单片机】多功能数字时钟设计
  • c语言回文数
  • 【学习记录】从0开始的Linux学习之旅——编译linux内核
  • uni-app - 日期 · 时间选择器
  • 使用USB转JTAG芯片CH347在Vivado下调试
  • 硬技能之上的软技巧(三)
  • mysql 查询
  • 2311rust过程宏的示例
  • 数据分析:数据预处理流程及方法
  • uniapp 防抖节流封装和使用
  • springcloud alibaba学习视频
  • 【MySQL】一些内置函数(时间函数、字符串函数、数学函数等,学会了有妙用)
  • QtC++与QColumnView详解
  • 微信小程序配置企业微信的在线客服
  • 深入理解Java AQS:从原理到源码分析
  • 【数据结构(四)】栈(1)
  • 实验(四):指令部件实验
  • 【Android11】在内置的Tvsettings的界面中显示以太网Mac地址
  • 在Oracle 11g 数据库上设置透明数据加密(TDE)