上周一直在调试集群,首先来说一下集群的配置。

7个节点,高可用HA集群。

node1        namenode 

node2        namenode

node3        resourcemanager

node4        resourcemanager

node5        基本服务

node6        基本服务

node7        基本服务

基本服务的意思就是包括datanode、nodemangager等基本的配置,由于是HA集群,所以必须要有zookeeper,所有节点内存均为16GB,cpu内核为1。

常见问题:

1、yarn集群在跑着跑着节点就转为Unhealthy Node,查证之后发现是datanode存储不够了,所以给虚拟机添加磁盘来扩容,扩容我放在最下面。但是给datanode扩容之后发现还是会存在同样的问题,在各种试错之后总算解决了问题就是

hadoop跑完命令后释放内存 hadoop空间不足_hadoop跑完命令后释放内存

这个临时目录满了,一旦发现到这里就完了,因为想要改动临时目录,必须要将整个集群重新格式化,所有的文件都会消失,所以在搭建集群时,一定要把磁盘先扩容。

所以yarn集群中的节点转为Unhealthy Node 有两个原因:

  1. datanode磁盘满了
  2. tmp.dir存放的磁盘满了

tips:不要再配置文件中改阈值,不管是90%,还是100%,都是无济于事的,在大数据面前,这一点点的磁盘根本不够用,我用的是50G的文件,这里我用的是Mapreduce框架。

2、在运行Mapreduce任务或者Spark任务时,yarn集群会报出无法找到job_idxxxxxxxxx的任务,那么问题就出在你没有开启jobhistory服务。

mr-jobhistory-daemon.sh start historyserver 手动启动jobhistory

一般你的文件太小,块的个数不多的话,根本不会报出这样的错误,而且hadoop命令start-dfs.sh中默认不会将这个服务开启,其实我挺纳闷的,为什么不能一起开起来,对于新手来说这真的不是很友好。

3、在执行任务时,千万不要control+C强制关闭任务,我在跑job时,强制关闭了,导致我的某些节点还在运行,我也不清楚为什么,cpu仍然是满转的,很麻烦,需要重启集群,最麻烦的就是强制关闭之后会发生jobhistory无法启动,所以请千万不要强制关闭!!!强制关闭有以下两种。

  1. control+C
  2. kill -9 进程号

我们都知道运行job时,会有很多个进程,在主界面的节点上面会有Application,在其他节点上面会有yarnchild进程,我不知道是不是我没有关闭完,我是kill -9这种方式关闭的,导致集群卡死了,但是没有宕机,就这种情况最麻烦。

另外kill -9 进程号一般要搭配查看进程号的命令。

netstat -ntlp

4、内存设置,必须要合理设置,一开始我追求速度,将每台16GB的节点yarn集群分配的内存为14GB,在运行过程中,节点老是发生宕机,当我将内存设为10GB时,我发现速度竟然比14GB的更快,其实在内存使用过多时,节点会变得很卡,速度反而不一定比10GB的快,最麻烦的就是内存使用率太高的时候就会使得很容易挂掉节点。另外就是Map任务的最小内存和Reduce任务的最小内存,我们都知道Map任务的个数在我们不人为控制的时候,Map任务会根据最小内存和Yarn调度的内存进行开启,当Map任务被分配完的时候,比如说10GB已经有10GB用于Map任务,且Map任务已经分配完毕,那么当一个Map的资源被释放时,还剩下8GB,而你的Reduce任务分配的最小内存为>2GB,那么该节点很容易挂掉。

配置yarn内存主要在yarn.site.xml,map和reduce内存在Maper.site.xml中。

hadoop跑完命令后释放内存 hadoop空间不足_big data_02

5、主要节点最好不要参与计算任务,如果要参与,请分配尽量少的内存,在工作节点上加大内存,一旦Resourcemanager挂掉后,整个集群都会崩溃,即使挂了高可用还是一样,如果条件允许的话,请尽量避免。最重要的一点就是,当内存分配过多时,8088的web界面就打不开了。

6、关于zookeeper,不知道是不是虚拟机不太稳定的原因,一旦工作节点挂掉之后,zookeeper也会挂掉,namenode上面的zkfc也会自己挂掉,作业还在执行。如果可以,就不要装什么zookeeper了,就我目前来看,并没有什么特别好的,如果只是学习的话,就不要装了。然后就是HA高可用集群,也别装了,每次排查问题麻烦是一方面,都参与计算的话也很容易挂掉,不如就一台主节点,且分配较少的资源进行计算或者说不分配。

7、最后想说的是,一定要频繁的快照保存当前状态,这样还可以有容错率。

下面来分享一下对虚拟机的扩容问题

  1. 在VMWARE界面给虚拟机先进行添加硬盘,不要担心设置多大,因为这个只有实际使用时,才会消耗掉你电脑的磁盘,所以尽量设置大一点也不要紧,500GB就可以。一路确认即可,不需要选择什么。
fdisk -l
fdisk /dev/sdb 以下是硬盘挂载前的准备工作
 键入m,可看到帮助信息 
        command (m for help):m          
     增加新分区 
        command (m for help):n 
     选择基本分区,输入:p 
     建一个分区 
        Partition number(1-4):1 
     回车 
        First cylinder (1-15908,default 1):Enter 
     写入并退出 
        command (m for help):w

2、

sudo mkfs.ext4 /dev/sdb1 格式化磁盘

3、挂载磁盘分区

sudo mkdir /work 

        sudo mount -t ext4 /dev/sdb1 /work

        4、开机自动挂载

修改文件 
            sudo vim /etc/fstab 
     在最后一行加入: 
            /dev/sdb1 /work ext4 errors=remount-ro 0 1

 之后可以在datanode挂载磁盘的后面进行添加,但是不能对tmp.dir进行修改。

hadoop跑完命令后释放内存 hadoop空间不足_zookeeper_03

        重启集群就可以看见datanode的磁盘扩大了。