下周准备去某地做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的日志记录很详细。
二、多使用谷歌而不是百度,如果谷歌可以用的话。
三、多使用工具,开源工具或自己编写。
四、熟悉操作系统自带的工具
|
完成系列(二)