大数据集群调优

HDFS

场景1:
在DataNode开始工作(通电)的时候,会上报本地的数据块给NameNode的客户端进行注册,这时候客户端个数比较关键,如果太少,DataNode在连接NameNode的时候会出现总是超时或者连接被拒绝;如果设置太大,则内存开销会增大,造成不必要的浪费,最终可能导致内存溢出。
参数:dfs.namenode.handler.count
NameNode 有一个工作线程池,用来处理不同 DataNode 的并发心跳以及客户端并发的元数据操作,线程池的大小就是根据该参数指定的,默认值 10,该值的一般设置原则是将其设置为 集群大小的自然对数乘以20,即 20logN,N为集群大小。
#配置文件hdfs-site.xml
<property>
<name>dfs.namenode.handler.count</name>
<value>10</value>
</property>
具体计算可以使用python,以下示例以 8个节点为例
[root@fan102 ~]# python -c 'import math ; print int(math.log(8) * 20)'
41

YARN

场景1:总共 7 台机器,每天几亿条数据,数据源->Flume->Kafka->HDFS->Hive

面临问题:数据统计主要用 HiveSQL,没有数据倾斜,小文件已经做了合并处理,开启的 JVM 重用,而且 IO 没有阻塞,内存了不到 50%。但是还是跑的非常慢,而且数据 量洪峰过来时,整个集群都会宕掉。基于这种情况有没有优化方案。

分析:内存利用率不够。这个一般是 Yarn 的 2 个配置造成的,单个任务可以申请的最大内存 大小,和 Hadoop 单个节点可用内存大小。在yarn-site.xml 文件中调节这两个参数能提高系统内存的利用率。

参数1:yarn.nodemanager.resource.memory-mb

表示该节点上 YARN 可使用的物理内存总量,默认是 8192(MB),一般128G服务器配置为100G,64G服务器配置50G,我们的服务器是188G的,所以这个值我设置的是120G。注意,如果你的节点 内存资源不够 8GB,则需要调减小这个值,而 YARN 不会智能的探测节点的物理内存总量。
参数2:yarn.scheduler.maximum-allocation-mb
表示单个任务可申请的最多物理内存量,默认是 8192(MB),该值需要根据任务的数据量的大小来确定,128MB对应1GB内存

猜你喜欢

转载自blog.csdn.net/shenyuye/article/details/108827842