设为首页 收藏本站
查看: 695|回复: 0

[经验分享] 记录一次生产环境hadoop集群优化以及pid文件缺失处理

[复制链接]

尚未签到

发表于 2018-10-28 12:37:14 | 显示全部楼层 |阅读模式
  一、优化准备
  优化需要根据实际情况综合分析
  1、关闭系统swap分区(如果未关闭的话)
  在Hadoop中,如果使用系统默认设置,会导致swap分区被频繁使用,集群会不断发出警告。
  对于每个作业处理的数据量和每个Task中用到的各种缓冲,用户都是完全可控的。
  echo "vm.swappiness = 0" >> /etc/sysctl.conf
  说明:尽量不使用交换分区,注意不是禁用
  2、资源和配置信息
  2台namenode,5台datanode资源和配置信息
  服务分布表如下所示:
DSC0000.jpg

  软件版本:
  hadoop(hdfs+yarn) 2.7.3
  hbase 1.2.4
  查看CPU信息的命令:
  查看CPU型号
  # cat /proc/cpuinfo | grep name | cut -d: -f2 | uniq
  查看物理CPU个数

  # cat /proc/cpuinfo |grep "physical>  查看没有物理CPU中的core的个数,也就是核数
  # cat /proc/cpuinfo | grep "cpu cores" | uniq
  查看逻辑CPU的个数
  # cat /proc/cpuinfo | grep "processor" | wc -l
  CPU总核数= 物理CPU个数 * 每颗物理CPU的核数
  总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数
  资源情况:
  内存 16G
  CPU8(8个物理CPU,单核,单线程)
  3、dfs.datanode.max.xcievers (dfs.datanode.max.transfer.threads)
  这两个是一个参数,只不过前边一个是hadoop1.0之前的参数,表示datanode上负责进行文件操作的线程数。如果需要处理的文件过多,而这个参数设置得过低就会有一部分文件处理不过来,就会报下面这个异常:
  ERROR org.apache.hadoop.dfs.DataNode: DatanodeRegistration(192.168.10.103:50010,storageID=DS-1570581820-10.10.10.53-50010-1224117842339,infoPort=50075, ipcPort=50020):DataXceiver: java.io.IOException: xceiverCount 258 exceeds the limit of concurrent xcievers 256
  linux系统中所有的文件操作都被绑定到一个socket上,进一步具体可以把他看做是一个线程。而这个参数就是指定这种线程的个数。在datanode里面有一个专门的线程组来维护这些线程,同时有一个守护线程来监视这个线程组的体量,它负责监测线程数量是否到达上线,超过就抛出异常。因为如果这样的线程过多,系统内存就会暴掉。
  对于参数dfs.datanode.max.transfer.threads还依照现有配置 8192
  
  dfs.datanode.max.transfer.threads
  8192
  
  默认值:4096
  4、dfs.namenode.handler.count
  NameNode用来处理来自DataNode的RPC请求的线程数量
  NameNode有一个工作线程池用来处理客户端的远程过程调用及集群守护进程的调用。处理程序数量越多意味着要更大的池来处理来自不同DataNode的并发心跳以及客户端并发的元数据操作。对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。设置该值的一般原则是将其设置为集群大小的自然对数乘以20,即20logN,N为集群大小。如果该值设的太小,明显的状况就是DataNode在连接NameNode的时候总是超时或者连接被拒绝,但NameNode的远程过程调用队列很大时,远程过程调用延时就会加大。
  集群大小是7,7的自然对数约等于2,所以这里的配置就是 20*log7 = 40
  
  dfs.namenode.handler.count
  40
  
  默认值:10
  5、dfs.datanode.handler.count
  DataNode用来连接NameNode的RPC请求的线程数量
  设置为20
  
  dfs.datanode.handler.count
  20
  
  默认值:10
  二、PID相关准备
  hadoop 及 hbase的pid文件默认是放在/tmp下面的,这个你可以从启动关闭脚本中看出,不过这个目录会定时清理。这就产生一个问题,当再次关闭服务的时候,服务pid文件丢失就会产生jps不显示服务,但是web的管理页面可以正常访问的情况。我的解决办法就是手动生成缺水的pid文件,然后修改配置文件,重启服务。
  1、NameNode 、DataNode 以及SecondaryNameNode 的pid配置
  hadoop-env.sh
  export HADOOP_PID_DIR=/data/hadoop_data/pids
  export HADOOP_SECURE_DN_PID_DIR=${HADOOP_PID_DIR}
  JobHistory的pid配置
  mapred-env.sh
  export HADOOP_MAPRED_PID_DIR=/data/hadoop_data/pids
  NodeManager和ResourceManager的pid配置
  yarn-env.sh
  export YARN_PID_DIR=/data/hadoop_data/pids
  HMaster和HRegionServer 的pid配置
  hbase-env.sh
  export HBASE_PID_DIR=/data/hadoop_data/pids
  PID文件的命令规则大家可以从脚本中找到
  我这里并不是所有的pid文件路径都没有配置,需要配置的是MapReduce和yarn
  2、集群中各节点服务启动情况以及PID文件存在情况
  192.168.10.101:
  $ jps
  194921 HMaster
  194352 DFSZKFailoverController
  539317 JobHistoryServer
  193972 NameNode
  存在的pid文件:
  目录/data/hadoop_data/pids
  hadoop-hduser-namenode.pid
  hadoop-hduser-zkfc.pid
  hbase-hduser-master.pid
  192.168.10.102:
  $ jps
  371963 DFSZKFailoverController
  371811 NameNode
  372121 HMaster
  存在的pid文件:
  目录/data/hadoop_data/pids
  hadoop-hduser-namenode.pid
  hadoop-hduser-zkfc.pid
  hbase-hduser-master.pid
  192.168.10.103:
  $ jps
  500043 JournalNode
  500164 NodeManager
  522618 HRegionServer
  499932 DataNode
  存在的pid文件:
  目录/data/hadoop_data/pids
  hadoop-hduser-datanode.pid
  hadoop-hduser-journalnode.pid
  hbase-hduser-regionserver.pid
  192.168.10.104:
  $ jps
  234784 NodeManager
  234636 JournalNode
  235070 HRegionServer
  234525 DataNode
  存在的pid文件:
  目录/data/hadoop_data/pids
  hadoop-hduser-datanode.pid
  hadoop-hduser-journalnode.pid
  hbase-hduser-regionserver.pid
  192.168.10.105:
  $ jps
  310371 HRegionServer
  48404 NodeManager
  48285 JournalNode
  48174 DataNode
  存在的pid文件:
  目录/data/hadoop_data/pids
  hadoop-hduser-datanode.pid
  hadoop-hduser-journalnode.pid
  hbase-hduser-regionserver.pid
  192.168.10.106:
  $ jps
  100855 HRegionServer
  435319 DataNode
  435456 NodeManager
  存在的pid文件:
  目录/data/hadoop_data/pids
  hadoop-hduser-datanode.pid
  hbase-hduser-regionserver.pid
  192.168.10.107:
  $ jps
  410010 NodeManager
  484955 HRegionServer
  409847 DataNode
  存在的pid文件:
  目录/data/hadoop_data/pids
  hadoop-hduser-datanode.pid
  hbase-hduser-regionserver.pid
  三、下面是具体的操作步骤
  以下所有操作都是在hadoop集群服务管理用户hduser下操作的
  1、生成PID文件
  根据实际情况创建相应的PID文件
  jps命令可以查看起着哪些服务,然后查看pid文件目录/data/hadoop_data/pids,如果服务启动但是没有相应的pid文件,则需要创建该服务的pid文件。
  echo PID > /tmp/mapred-hduser-historyserver.pid
  /tmp/yarn-hduser-resourcemanager.pid
  /tmp/yarn-hduser-nodemanager.pid
  2、停止服务
  这里需要说的是hadoop+hbase+zookeeper集群服务启动关闭顺序
  启动顺序
  zookeepeer->hadoop->hbase
  停止顺序
  hbase->hadoop->zookeepeer
  登录到192.168.10.101(主hbase服务器,主namenode服务器)
  停止hbase集群
  $ cd /data/hbase/bin
  $ ./stop-hbase.sh
  停止hadoop集群
  $ cd /data/hadoop/sbin
  $ ./stop-all.sh
  停止MapReduce历史记录服务
  $ cd /data/hbase/bin
  $ ./mr-jobhistory-daemon.sh stop historyserver
  3、修改配置文件
  备份要修改的配置文件
  修改配置文件
  vim /data/hadoop/etc/hadoop/mapred-env.sh
  添加:
  export HADOOP_MAPRED_PID_DIR=/data/hadoop_data/pids
  vim /data/hadoop/etc/hadoop/yarn-env.sh
  添加:
  export YARN_PID_DIR=/data/hadoop_data/pids
  vim /data1/hadoop/etc/hadoop/hdfs-site.xml
  修改如下:
  
  dfs.datanode.max.transfer.threads
  8192
  
  添加如下:
  
  dfs.namenode.handler.count
  40
  
  
  dfs.datanode.handler.count
  20
  
  vim /data/hbase/conf/hbase-env.sh
  添加如下:
  export HADOOP_HOME=/data/hadoop
  vim /data/hbase/conf/hbase-site.xml
  修改如下:
  
  hbase.rootdir
  hdfs://masters/hbase
  
  在相应的配置文件目录把配置文件拷贝到其他节点
  $ for ip in 102 103 104 105 106 107;do scp /data/hadoop/etc/hadoop/mapred-env.sh 192.168.10.$ip:/data/hadoop/etc/hadoop/;done
  $ for ip in 102 102 104 105 106 107;do scp /data/hadoop/etc/hadoop/yarn-env.sh 192.168.10.$ip:/data/hadoop/etc/hadoop/;done
  $ for ip in 102 102 104 105 106 107;do scp /data/hadoop/etc/hadoop/hdfs-site.xml 192.168.10.$ip:/data/hadoop/etc/hadoop/;done
  $ for ip in 102 102 104 105 106 107;do scp /data/hbase/conf/hbase-env.sh 192.168.10.$ip:/data/hbase/conf/;done
  $ for ip in 102 102 104 105 106 107;do scp /data/hbase/conf/hbase-site.xml 192.168.10.$ip:/data/hbase/conf/;done
  移除 HBase 里面的不必要 log4j 的 jar 包
  cd /data/hbase/lib
  mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bak
  4、启动服务
  启动hadoop集群
  $ cd /data/hadoop/sbin
  $ ./start-all.sh
  启动hbase集群
  $ cd /data/hbase/bin
  $ ./start-hbase.sh
  启动MapReduce历史记录服务
  $ cd /data/hbase/bin
  $ ./mr-jobhistory-daemon.sh start historyserver
  5、验证
  查看pid文件
  192.168.10.101
  $ cd /data/hadoop_data/pids
  $ ll
  total 24
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-namenode.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-zkfc.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-master.pid
  -rw-r--r-- 1 hduser hadoop 33 Jun  6 22:49 hbase-hduser-master.znode
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 mapred-hduser-historyserver.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-resourcemanager.pid
  192.168.10.102
  $ ll
  total 12
  -rw-r--r-- 1 hduser hadoop 7 Jun  6 22:48 hadoop-hduser-namenode.pid
  -rw-r--r-- 1 hduser hadoop 7 Jun  6 22:48 hadoop-hduser-zkfc.pid
  -rw-r--r-- 1 hduser hadoop 7 Jun  6 22:49 hbase-hduser-master.pid
  192.168.10.103
  $ ll
  total 20
  -rw-r--r-- 1 hduser hadoop  6 Jun  6 22:48 hadoop-hduser-datanode.pid
  -rw-r--r-- 1 hduser hadoop  6 Jun  6 22:48 hadoop-hduser-journalnode.pid
  -rw-r--r-- 1 hduser hadoop  6 Jun  6 22:49 hbase-hduser-regionserver.pid
  -rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode
  -rw-r--r-- 1 hduser hadoop  6 Jun  6 22:48 yarn-hduser-nodemanager.pid
  192.168.10.104
  $ ll
  total 20
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-datanode.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-journalnode.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-regionserver.pid
  -rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-nodemanager.pid
  192.168.10.105
  $ ll
  total 20
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-datanode.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-journalnode.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-regionserver.pid
  -rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-nodemanager.pid
  192.168.10.106
  $ ll
  total 16
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-datanode.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-regionserver.pid
  -rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-nodemanager.pid
  192.168.10.107
  $ ll
  total 16
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 hadoop-hduser-datanode.pid
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:49 hbase-hduser-regionserver.pid
  -rw-r--r-- 1 hduser hadoop 43 Jun  6 22:49 hbase-hduser-regionserver.znode
  -rw-r--r-- 1 hduser hadoop  7 Jun  6 22:48 yarn-hduser-nodemanager.pid
  查看调用是否正常
  注意事项:
  事项一:如果生产环境有监控服务的脚本或者服务则需要先停止对于服务的监控,以防止服务停止时触发监控,进而自动重启服务。
  事项二:一定记得把配置文件同步到每个节点(各节点配置文件一致的话)
  参考:
  官网文档:
  http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/ClusterSetup.html
  官网配置参考:
  http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
  参考文章:
  https://blog.csdn.net/qq_26091271/article/details/50411383
  https://www.cnblogs.com/hanganglin/p/4563716.html
  https://blog.csdn.net/odailidong/article/details/79656188


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627502-1-1.html 上篇帖子: Hadoop二次开发项目案例方案汇总 下篇帖子: hadoop及hbase集群启停的几种方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表