接触Hadoop有两年的时间了,期间遇到很多的问题,既有经典的NameNode和JobTracker内存溢出故障,也有HDFS存储小文件问题,既有任务调度问题,也有MapReduce性能问题.遇到的这些问题有些是Hadoop自身的缺陷(短板),有些则是使用的不当。
在解决问题的过程中,有时需要翻源码,有时会向同事、网友请教,遇到复杂问题则会通过mail list向全球各地Hadoop使用者,包括Hadoop Committer(Hadoop开发者)求助。在获得很多人帮助后,自己将遇到问题和心得整理成文,希望本文可以对那些焦头烂额的Hadoop新手们有所帮助,少走笔者的弯路。
PS. 本文基于 Cloudera CDH 3u4(同Apache Hadoop 1.0)编写。相关推荐配置为官方推荐值或者笔者经验数值,它不是绝对的,可能会因为不同的应用场景和硬件环境有所出入。
1. 选择Cloudera CDH部署你的Cluster
动机
大多数管理员都是从Apache Hadoop开始学习。笔者最开始也使用Apache版本Hadoop进行开发和部署工作,但接触到Cloudera CDH后,我发现它可以使管理员的工作更简单,不仅可以获得最新的特性和Bug修复,有时也会带来令人惊喜的性能改善。
CDH为什么更好?笔者罗列了以下几点:
- CDH基于稳定版Apache Hadoop,并应用了最新Bug修复或者Feature的Patch。Cloudera常年坚持季度发行Update版本,年度发行Release版本,更新速度比Apache官方快,而且在实际使用过程中CDH表现无比稳定,并没有引入新的问题。
- Cloudera官方网站上安装、升级文档详细,省去Google时间。
- CDH支持Yum/Apt包,Tar包,RPM包,Cloudera Manager四种方式安装,总有一款适合您。官方网站推荐Yum/Apt方式安装,笔者体会其好处如下:
- 联网安装、升级,非常方便。当然你也可以下载rpm包到本地,使用Local Yum方式安装。
- 自动下载依赖软件包,比如要安装Hive,则会级联下载、安装Hadoop。
- Hadoop生态系统包自动匹配,不需要你寻找与当前Hadoop匹配的Hbase,Flume,Hive等软件,Yum/Apt会根据当前安装Hadoop版本自动寻找匹配版本的软件包,并保证兼容性。
- 自动创建相关目录并软链到合适的地方(如conf和logs等目录);自动创建hdfs, mapred用户,hdfs用户是HDFS的最高权限用户,mapred用户则负责mapreduce执行过程中相关目录的权限。
推荐指数:★★★
推荐理由:获取最新特性和最新Bug修复;安装维护方便,节省运维时间。
2. Hadoop集群配置与管理
安装和维护Hadoop集群涉及大量的管理工作,包括软件安装,设备管理(crontab、iptables等)、配置分发等。
对于小型集群软件分发和节点管理可以使用PDSH这款软件,它可以通过免密钥的SSH将文件分发到目标服务器,以及为一组目标设备发送命令并获得反馈。如果是大型集群或者硬件配置差别很大的集群,推荐使用puppet这样的工具帮助你维护配置文件,或者通过Cloudera Manager以GUI的方式的管理集群(注意:Clodera Manager不是开源软件,免费版最多支持50个节点)。
推荐指数:★★★
推荐理由:提高运维效率
3. 开启SecondaryNameNode
SecondaryNameNode(下称SNN)的主要功能是工作是帮助NameNode(下称NN)合并编辑日志,然后将合并后的镜像文件copy回NN,以减少NN重启时合并编辑日志所需的时间。SNN不是NN的热备,但是通过以下步骤可以实现将SNN切换为NN的目的。首先,SNN节点上导入从NN Copy过来的镜像文件,然后修改SNN机器名和IP与NN一致,最后重启集群。
特别注意的是SNN的内存配置要与NN一致,因为合并编辑日志的工作需要将metadata加载到内存完成。另外,不仅仅是SNN,任何保存NN镜像的节点都可以通过上面步骤变为NN,只是SNN更适合罢了。
推荐指数:★★★
推荐理由:减少NN重启导致集群服务中断时间;NN节点故障后,SNN充当NN角色
4. 使用Ganglia和Nagios监控你的集群
当运行一个大型mapreduce 作业时,我们通常非常关心该作业对TaskTracker(下称TT)CPU、内存、磁盘,以及整个网络的带宽情况,这时候就需要Ganglia这个工具为我们生成相关图表来诊断、分析问题。
Ganglia可以监控集群状态,但当你的服务器down机或者某个TT挂掉,它却无法通知到你,这时我们可以使用Nagios这款告警软件,它可以配置邮件告警和短息告警。通过编写plugins,可以实现自己的监控功能。我们的集群目前做了如下监控:
- NameNode、JobTracker内存
- DataNode和TaskTracker运行状态
- NFS服务状态
- 磁盘使用情况
- 服务器负载状态
推荐指数:★★★
推荐理由:Ganglia可以帮你记录集群状态,方便诊断问题;Nagios可以再遇到问题时第一时间通知你。
5. 设置好内存至关重要
Hadoop集群安装完毕后,第一件事就是修改bin/hadoop-evn.sh文件设置内存。主流节点内存配置为32GB,典型场景内存设置如下:
- NN: 15-25 GB
- JT:2-4GB
- DN:1-4 GB
- TT:1-2 GB,Child VM 1-2 GB
集群的使用场景不同相关设置也有不同,如果集群有大量小文件,则要求NN内存至少要20GB,DN内存至少2GB。
推荐指数:★★★★★
推荐理由:几个组件中NN对内存最为敏感,它有单点问题,直接影响到集群的可用性;JT同样是单点,如果JT内存溢出则所有MapReduce Job都无法正常执行。
6. 管理员玩转MapReduce
Hadoop原生MapReduce需要Java语言编写,但是不会Java也没问题,通过Hadoop streaming框架管理员可以使用Python,Shell,Perl等语言进行MapReduce开发,但更简单的办法是安装和使用Hive或者Pig。
推荐指数:★★★
推荐理由:减少运维时间,快速响应各种ad-hot需求和故障诊断。
7. NameNode HA
前面已经说过,NN是整个集群可能出现的单点故障。
Hadoop通过在hdfs.site.xml文件的dfs.name.dir属性指定保持的metadata路径,如果希望保持到多个路径,可以使用逗号分割配置多个路径。
- <property>
- <name>dfs.name.dir</name>
- <value>/data/cache1/dfs/nn,/data/cache2/dfs/nn</value>
- </property>
Hadoop官方推荐配置为metadata配置多个path,其中包含一个NFS的路径。但根据笔者一次集群严重故障经验,即使这样,还是导致了所有镜像文件损坏,包括SNN上的镜像文件,所以定期备份一个可用的副本还是很有必要的。
推荐指数:★★★★★
推荐理由:Cloudera3uX和Apache1.0的NN单点问题是大家最头痛问题之一,多些准备,少许痛苦。
8. 使用firewall阻止坏人进入
Hadoop的安全控制非常简单,只包含简单的权限,即只根据客户端用户名,决定使用权限。它的设计原则是:“避免好人做错事,但不阻止坏人做坏事”。
如果你知道某台NN的IP和端口,则可以很轻松获取HDFS目录结构,并通过修改本机机器用户名伪装成HDFS文件所属owner,对该文件进行删除操作。
通过配置kerberos,可以实现身份验证。但很多管理员使用更简单有效的办法——通过防火墙对访问IP进行控制。
推荐指数:★★★★★
推荐理由:安全无小事,防范于未然。
9. 开启垃圾箱(trash)功能
动机
我曾经犯下一个错误,在我加班非常累,大脑稍有混乱的时候,不小心删除执行了一个命令“hadoop fs -rmr /xxx/xxx”,没有删除提示,几TB的数据,一下子就没有了。简直让我崩溃,后悔莫及。这时你多希望有个时间机器可以让HDFS恢复到删除前的状态。
trash功能就是这个时间机器, 它默认是关闭的,开启后,被你删除的数据将会mv到操作用户目录的".Trash"文件夹,可以配置超过多长时间,系统自动删除过期数据。这样一来,当操作失误的时候,可以把数据mv回来。开启垃圾箱步骤如下:
vi core-site.xml ,添加下面配置,value单位为分钟。
- <property>
- <name>fs.trash.interval</name>
- <value>1440</value>
- </property>
笔者 在CDpu4下不用重启Namenode就可以生效。开启垃圾箱后,如果希望文件直接被删除,可以在使用删除命令时添加“–skipTrash” 参数,如下:
- hadoop fs –rm –skipTrash /xxxx
推荐指数:★★★★★
推荐理由:想要时间机器吗?
10. 去社区寻找帮助
Hadoop是一个非常优秀的开源项目,但它仍存有很多尚未解决的问题,诸如,NN,JT单点问题,JT挂死问题,Block在小文件下汇报效率低下等问题。此时可以通过如下渠道找到可以帮助你的人,笔者几次集群严重故障都是通过Cloudera公司的google user group直接获得几位 committer的帮助。通常前一天提问,第二天就会有反馈。下面是两个能够帮助的你的社区,当然你也可以帮助其他人:
Apache hadoop的mail list :
http://hadoop.apache.org/mailing_lists.html
Cloudera CDH google group:
https://groups.google.com/a/cloudera.org/forum/#!forum/cdh-user
推荐指数:★★★★★
推荐理由:没有人比软件作者更熟悉Hadoop本身,去社区求助,帮你解决很多自己无法跨越的问题。
相关推荐
Hadoop的升级和回滚 Hadoop升级和回滚是Hadoop集群管理员需要掌握的重要知识点。升级Hadoop可以引入新的功能和改进性能,但是同时也...同时,管理员需要遵循一定的最佳实践,使用合适的工具来升级和回滚Hadoop集群。
4. **Hadoop权威指南(第2版)**:这是一本详尽的Hadoop参考书籍,深入解析了Hadoop的架构、工作原理以及最佳实践。书中涵盖了Hadoop的分布式文件系统、MapReduce编程模型、HBase、Hive、Pig等数据处理工具,以及...
通过阅读《Hadoop权威指南中文版(第二版)》、《Hadoop in Action》和《Pro Hadoop》,读者可以全面理解Hadoop的概念、架构、编程模型以及在实际应用中的最佳实践,从而成为熟练的Hadoop开发者和管理员。
这部分内容对于Hadoop管理员来说至关重要,有助于确保集群的稳定运行和性能优化。 最后,“The Part Of Tens”章节提供了一些额外的资源和进阶主题,帮助读者更深入地理解Hadoop技术,例如在本地环境和云端部署...
对于那些在Windows上搭建Hadoop环境的开发者和管理员来说,这是一个非常有用的资源。为了确保最佳性能和避免兼容性问题,建议用户在使用此工具包前,先了解Hadoop在Windows上的配置要求和最佳实践,同时保持对Hadoop...
总的来说,这本书是Hadoop管理员和数据工程师的必备参考,无论你是初学者还是有经验的专家,都能从中受益。通过学习《Hadoop Operations》,你将能够更有效地管理和维护自己的Hadoop环境,从而更好地挖掘和利用...
入侵检测观众系统管理员核数师保安人员渗透测试仪安全专家免责声明这些工作台未经互联网安全中心批准平台霍顿工厂Cloudera 香草阿帕奇地图特征它涵盖了与以下方面有关的Hadoop集群的强化和安全性最佳实践:...
在Hadoop环境中,这通常通过Sentry实现,Sentry提供了细粒度的访问控制,允许管理员定义用户或组对数据库、表和列的权限。确保只有授权的用户才能访问敏感数据。 **数据保护**是安全设置中的关键部分。**线缆加密...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它的核心设计思想是...无论是数据分析师、数据科学家还是系统管理员,都需要了解Hadoop的核心原理和最佳实践,以便有效地利用这一强大的工具处理大规模数据。
7. **MapReduce开发最佳实践**:掌握在开发和调试MapReduce程序时的经验和技巧。 8. **MapReduce的数据输入输出**:理解如何在MapReduce应用程序中实现数据的输入和输出,这是MapReduce应用开发的关键环节。 9. **...
Hadoop作为大数据处理的重要工具,其在分布式计算领域的地位不容忽视,而理解Hadoop Common和HDFS的工作原理对于开发者和系统管理员来说至关重要。 首先,我们来看Hadoop Common。这部分涵盖了Hadoop项目中的一些...
通过阅读这份“Hadoop官方文档中文版”,开发者和管理员可以深入了解Hadoop的工作原理、配置方法、最佳实践以及如何解决常见问题,从而更好地利用Hadoop处理大数据挑战。这份文档对于学习和掌握Hadoop技术至关重要,...
Hadoop 2.7.1 是一个重要的版本,在大数据处理领域具有广泛的影响力。这个版本包含了Hadoop的核心组件,包括HDFS...无论是数据科学家还是系统管理员,都需要深入理解其工作原理和最佳实践,以充分利用这个强大的平台。
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,主要用于处理和存储海量数据。在Windows环境中配置和运行Hadoop,特别是...务必遵循最佳实践,确保所有依赖和配置都完整无误,以便获得稳定可靠的Hadoop服务。
通过阅读《Pro Apache Hadoop》,读者不仅可以掌握Hadoop的基本概念和技术,还能深入了解大数据处理的最佳实践,从而在实际工作中解决复杂的数据挑战。这本书适合于有志于大数据处理的开发者、系统管理员、数据科学...
对于开发者来说,书中的实例代码和最佳实践指导如何编写MapReduce程序,并优化性能。而对于管理员,书中详尽的故障排除章节有助于解决日常运维中遇到的问题。 中文版的翻译使得国内读者能够更轻松地理解这个复杂的...
总的来说,Veritas NetBackup 8.3.0.1 for Hadoop管理指南是一份全面的指南,旨在帮助管理员有效地管理和保护他们的Hadoop数据,确保业务连续性和数据完整性。通过深入理解这份指南,用户可以更好地利用NetBackup的...
这包括了对Hadoop集群备份过程中可能遇到的问题,及其解决方案的介绍,也包括了最佳实践的分享。书中涉及到的作者都有相当丰富的经验,特别是Gaurav Barot,他是一名经验丰富的软件架构师,也是PMP认证的项目经理,...