1. 编辑日志的存储路径dfs.namenode.edits.dir
要与镜像文件的存储路径dfs.namenode.name.dir
尽量分开,达到最低写入延迟[放在一起会影响磁盘IO]。
2. HDFS多目录存储。在hdfs-site.xml文件中提前配置好多目录存储,否则更改目录的话需要重启集群。
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///hdp2/dfs/data2,file:///hdp3/dfs/data3,file:///hdp4/dfs/data4</value>
</property>
3. 内存利用率不够
情景:Hive,没有数据倾斜,小文件已经做了合并,开启了JVM重用,IO没有阻塞,内存使用了不到50%,跑的很慢,而且数据量洪峰的时候集群会宕掉。
- 解决方案:
- 内存利用率不够,一般是Yarn的2个配置造成的:单个任务可以申请的最大内存大小和Hadoop集群单个节点可用内存大小。调节这两个参数可以提高集群内存利用率。
a. 参数:yarn.nodemanager.resource.memory-mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。
b. 参数:yarn.scheduler.maximum-allocation-mb
单个任务可申请的最多物理内存量,默认是8192(MB)。
- 内存利用率不够,一般是Yarn的2个配置造成的:单个任务可以申请的最大内存大小和Hadoop集群单个节点可用内存大小。调节这两个参数可以提高集群内存利用率。
4. Hadoop宕机
两种情况:
- 如果MR造成了系统宕机
此时需要控制Yarn同时运行的任务数量,以及每个任务申请的最大内存。
调整参数:yarn.scheduler.maximum-allocation-mb
。单个任务可申请的最多物理内存量,默认是8192MB。 - 如果写入文件过量造成NameNode宕机
调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。高峰期的时候用Kafka进行缓存,高峰期过去后数据同步会自动跟上。