我已经与Hadoop联系了两年,在此期间遇到了很多问题,包括经典的NameNode和JobTracker内存溢出故障,HDFS存储小文件问题,任务调度问题以及MapReduce性能问题。遇到这些问题。有些是Hadoop自身的缺点(短板),有些则使用不当。在解决问题的过程中,有时需要仔细阅读源代码,有时需要向同事和网民寻求建议,遇到复杂问题时,他们将向全球的Hadoop用户(包括Hadoop Committer(Hadoop开发人员))寻求帮助。通过邮件列表提供帮助。在得到很多人的帮助之后,我将把遇到的问题和经验整理成一篇文章。我希望本文对那些不知所措并避免作者绕道的Hadoop新手有所帮助。PS。本文基于Cloudera CDH 3u4(与Apache Hadoop 1.0相同)。相关的建议配置是官方建议值或作者的经验值。它不是绝对的,并且可能因不同的应用方案和硬件环境而有所不同。选择Cloudera CDH部署您的集群动机大多数管理员从Apache Hadoop开始。作者还在开始时就使用Apache版本的Hadoop进行开发和部署,但是在与Cloudera CDH联系后,我发现它可以使管理员的工作更加轻松。我不仅可以获得最新的功能和错误修复,而且有时还可以使人们惊讶地提高性能。为什么CDH更好?作者列出了以下几点:CDH基于Apache Hadoop的稳定版本,并应用了最新的错误修复或功能补丁。 Cloudera坚持每季度发布一次更新版本,每年发布一次发布版本。更新速度比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时负责相关目录的权限。
推荐指数:★★★推荐原因:获得最新功能和最新错误修复;易于安装和维护,节省了运维时间。
Hadoop集群配置和管理安装和维护Hadoop集群涉及许多管理工作,包括软件安装,设备管理(crontab,iptables等),配置分发等。对于小型集群软件分发和节点管理,可以使用PDSH软件,该软件可以通过无**SSH将文件分发到目标服务器,并发送命令并获取一组目标设备的反馈。如果是大型集群或硬件配置完全不同的集群,建议使用诸如puppet之类的工具来帮助您维护配置文件,或者以GUI方式通过Cloudera Manager管理集群(注意:Clodera Manager不是开源软件,免费版本最多支持50个节点)。推荐指数:★★★推荐理由:提高运维效率打开SecondaryNameNodeSecondaryNameNode(以下称为SNN)的主要功能是帮助NameNode(以下称为NN)合并编辑日志,然后将合并的图像文件复制回NN,以减少NN重新启动时合并编辑日志所需的时间。 SNN不是NN的热备份,但是可以通过以下步骤实现从SNN切换到NN的目的。首先,在SNN节点上导入从NN复制的映像文件,然后将SNN机器名称和IP修改为与NN一致,最后重新启动集群。应特别注意SNN的内存配置,以使其与NN保持一致,因为合并和编辑日志的工作需要将元数据加载到内存中才能完成。此外,通过上述步骤,不仅SNN,而且保存NN图像的任何节点都可以成为NN,但是SNN更适合。推荐指数:★★★推荐原因:减少因NN重启引起的集群服务中断时间; NN节点故障后,SNN充当NN使用Ganglia和Nagios监视您的集群在运行大型mapreduce作业时,我们通常非常关注整个网络的任务跟踪器(以下称为TT),CPU,内存,磁盘和带宽。这时,我们需要Ganglia生成相关图表以供我们诊断和分析问题。Ganglia可以监视群集状态,但是当服务器关闭或TT关闭时,它无法通知您。目前,我们可以使用警报软件Nagios,该软件可以配置电子邮件警报和短消息警报。通过编写插件,您可以实现自己的监视功能。目前,我们的集群受到如下监控:NameNode,JobTracker内存DataNode和TaskTracker的运行状态NFS服务状态磁盘使用情况服务器负载状态推荐指数:★★★推荐原因:Ganglia可以帮助您记录集群状态,以方便诊断问题;遇到问题时,Nagios会立即通知您。
设置内存很重要安装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作业。管理员玩MapReduceHadoop本机MapReduce需要使用Java编写,但是如果您不懂Java,也可以。通过Hadoop流框架,管理员可以使用Python,Shell,Perl和其他语言进行MapReduce开发,但是更简单的方法是安装和使用Hive或Pig。推荐指数:★★★推荐原因:减少操作和维护时间,快速响应各种紧急要求和故障诊断。NameNode HA如前所述,NN是可能在整个集群中发生的单点故障。Hadoop在hdfs.site.xml文件的dfs.name.dir属性中指定存储的元数据路径。如果要维护多个路径,可以使用逗号分隔和配置多个路径。 <property>
<name>dfs.name.dir</name>
<value>/data/cache1/dfs/nn,/data/cache2/dfs/nn</value>
</property>
Hadoop正式建议为元数据配置多个路径,包括NFS路径。但是,根据作者经历的严重集群故障的经验,即使如此,它仍然会导致所有镜像文件(包括SNN上的镜像文件)损坏,因此有必要定期备份可用的副本。推荐指数:★★★★★推荐原因:Cloudera3uX和Apache1.0的NN单点问题是每个人最大的头痛之一,需要更多的准备,有些痛苦
使用防火墙防止坏人进入Hadoop的安全控制非常简单,仅包含简单权限,即仅使用客户端用户名来确定使用权限。它的设计原则是:“避免好人做错事,但不阻止坏人做坏事。”如果您知道某个NN的IP和端口,则可以轻松获得HDFS目录结构,并修改本地计算机的用户名以假装为HDFS文件的所有者以删除该文件。通过配置kerberos,可以实现身份验证。但是许多管理员使用一种更简单,更有效的方法来控制通过防火墙对IP的访问。推荐指数:★★★★★推荐原因:安全性不是小事,在发生之前要加以预防。打开垃圾桶功能动机我曾经犯了一个错误。当我因加班而感到非常疲倦并且大脑有些混乱时,我不小心删除并执行了一个命令“ hadoop fs -rmr / xxx / xxx”。没有删除提示。几TB的数据,突然之间没有了。它让我失望了,我很后悔。目前,您希望有一台可以将HDFS还原到其预先删除状态的时间机器。垃圾桶功能是此时间机器。默认情况下处于关闭状态。打开后,您删除的数据将被mv到运行用户目录的“ .Trash”文件夹中。您可以配置系统将自动删除过期数据的时间。这样,当发生操作错误时,可以mv返回数据。打开垃圾桶的步骤如下:vi core-site.xml,添加以下配置,取值单位为分钟。
<property> <name>fs.trash.interval</name> <value>1440</value> </property>
笔者 在CDpu4下不用重启Namenode就可以生效。开启垃圾箱后,如果希望文件直接被删除,可以在使用删除命令时添加“–skipTrash” 参数,如下:
hadoop fs –rm –skipTrash /xxxx
去社区寻找帮助
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本身,去社区求助,帮你解决很多自己无法跨越的问题。