下周准备去某地做Hadoop相关的技术培训,主要负责讲解Hadoop的安装部署和运维部分,赶制了一份PPT,将平时工作中遇到的问题也提取了一下,希望能对Hadoop运维相关人员有所帮助,算是个补上的运维记录吧,错误数据均来自以前日常工作中的Hadoop日志。

也有一点点跟Hadoop相关的非保密数据,拿出来晒晒。

目前公司的数据规模如下,相比大公司不算是很大的数据量,但是也不是很小。

 接收日志超过1.2TB/日,还在不断增加中。80%采用nginx ncsa格式并进行清洗,20%采用Scribe接收,并在逐步迁移至Scribe上。像PV和用户数,回头率这种属于保密数据,就不好公布了。

3500+任务/日,95%采用定时任务执行,5%是业务相关人员采用phpHiveAdmin进行临时查询。

集群任务数据吞吐10TB+/日,意思就是每天跑3500+任务所进行读取和写入的数据量,如果是每月初跑月数据或者季数据,吞吐数据量翻倍。

分析过一些很有趣的东西,比如在线看《甄嬛传》的58%是女性,42%是男性。20-39岁人数最多,总共占到了63.73%,大概这个年龄段最喜欢研究斗心眼吧,而且这片子很牛的一点是,不长尾,一直有人看,说明还是拍的很好。相比之下,《北京青年》就长尾了,3个月在盒子里面点播了1.3亿次,男性占比60%,20-29岁年龄段占比41.39%。山东河南不愧是人口大省,各种片子基本都在前三名。《海贼王》的数据最有特点,我一开始不明白为什么每周都会有一个数据暴增点,后来有人告诉我,因为我不看动画片,海贼王每周会更新一集。你以为你爱看动画片吗?其实你没有广东人爱看,海贼王的点播广东占了11.99%,相比第二名山东的7.89%整整多了4.1%。搞数据其实是很好玩的事,看你怎么搞了。

言归正传,分享Hadoop相关。以下内容节选自PPT,没头没尾,看个大概。

集群配置--注意事项

 

1. 将完整的/etc/hosts文件放置在每台服务器上,hadoop的域名和IP转换要用到hosts文件

 

2. 请确保hadoop所绑定使用的端口没有被防火墙所拦截。

 

3. 请确保集群中各服务器间网络连接正常

 

4. 在几个相关的配置文件中写入了正确主机名或IP信息

 

 

 安装和配置的FAQ

 

是不是一定需要SSH免密码登录?

不是的,集群状况下Hadoop并不是必须做ssh密钥,除非需要单点启动

 

是不是一定要做LDAP?

不是的,LDAP是在做大集群管理时可以方便的管理服务器集群,并非给Hadoop专用的。

 

Hadoop对硬件的要求?

当然是越高越好。

我们 NN 96Gmem,2TBx4,8coreCPU

DN 32Gmem,2TBx4,8~16coreCPU

 

 运维故障分析与解决(一)

 

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/hadoop/tmp/dfs/data: namenode namespaceID = 39895076; datanode namespaceID = 1030326122

 

原因: namenode 被重新格式化,datanode数据版本与namenode不一致

解决: 1.删除datanode所有文件

2.修改datanode dfs/data/current/VERSION与namenode相同

 

 运维故障分析与解决(二)

 

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: DatanodeRegistration(192.168.2.19:50010, storageID=DS-1082898260-202.106.199.39-50010-1348575582644, infoPort=50075, ipcPort=50020):DataXceiveServer: Exiting due to:java.lang.OutOfMemoryError: Java heap space

(注:上面这个ERROR并不一定全会发生,有时会出现无ERROR出现datanode就关闭的情况)

ERROR org.apache.hadoop.mapred.TaskTracker: Caught exception: java.io.IOException: Call to hadoopmaster/192.168.1.43:9001 failed on local exception: java.io.IOException: Connection reset by peer

 

原因: 常规数据交换量过大,导致通信故障datanode无法连接namenode

任务数据交换量过大,导致tasktracker与jobtracker通信故障

解决: 1.增大带宽

2.配置机架感知脚本topology.script.file.name

3.关闭均衡器

 

 运维故障分析与解决(四)

 

ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: org.apache.hadoop.util.DiskChecker$DiskError

Exception: Invalid value for volsFailed : 3 , Volumes tolerated : 0

 

原因: 磁盘损坏

解决: 关机换硬盘,2台以内服务器损坏无需关心数据丢失,hadoop存储策略以服务器为单位,不以硬盘为单位

 

 运维故障分析与解决(五)

 

2012-09-25 20:19:42,634 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: dnRegistration = DatanodeRegistration(bt-199-039.bta.net.cn:50010, storageID=, infoPort=50075, ipcPort=50020)

 

原因: 主机名转换错误,datanode无法启动

解决: 设置hostname和/etc/sysconfig/network,然后重启datanode

 

 运维故障分析与解决(六)

 

Hive查询FileNotFound Exception

 

原因: 文件不存在错误

故障一:文件的确不存在

故障二:权限问题导致数据没有正确insert写入到hive读取路径

解决: dfs.permissions = false或设置hive读取路径正确的可写权限。

 

 运维故障分析与解决(七)

 

INFO org.apache.hadoop.hdfs.server.datanode.DataNode: writeBlock blk_-8336485569098955809_2093928 received exception java.io.IOException: Permission denied

 

原因: 之前用错误账户启动hadoop,dfs存储所使用的本地文件夹被变更用户和组,导致文件夹不可写。datanode无法启动。

解决: 切换高权限用户,将dfs存储的本地文件夹chown -R成hadoop本身用户和组,重启datanode

 

没有(三),因为(三)太简单了,所以没有写。

 运维和故障分析总结

 

一、遇到问题看日志,log4j的日志记录很详细。

 

二、多使用谷歌而不是百度,如果谷歌可以用的话。

 

三、多使用工具,开源工具或自己编写。

 

四、熟悉操作系统自带的工具

 

完成系列(二)