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

[经验分享] Hadoop集群的配置及常见问题总结

[复制链接]
发表于 2016-12-9 08:15:13 | 显示全部楼层 |阅读模式
Hadoop集群配置
  建立一个三台服务器的hadoop集群,三台服务器ip和对应的主机名分别为:
  192.168.0.100:shirleyren100,
  192.168.0.101:shirleyren101,
  192.168.0.102:shirleyren102,
  其中192.168.0.100为namenode,另外两台为datanode。在三台服务器上创建hadoop账号
  1,在namenode上创建hadoop账号的无密码公钥方式登录

ssh-keygen \-t dsa \-P '' \-f \~/.ssh/id_dsa
  将namenode的上生成的id_dsa.pub和id_dsa文件复制到datanode上,并将id_dsa.pub 文件追加到datanode 的authorized_keys 内,以保证各台服务器之间的正常通信
  2,在各台服务上安装sun jdk

    
为防止不必要的错误,请尽量保证各服务器上的JDK版本和安装路径的一致,并将JAVA安装路径放到环境变量中 /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.22
export JRE_HOME=/usr/lib/jvm/java-6-sun-1.6.0.22/jre
  3,安装hadoop
  在namenode上安装hadoop, 将下载的压缩包解压到安装目录下即可,附件中是我配置中修改的conf/下的文件
  把hadoop 的安装路径添加到环境变量/etc/profile 中

export HADOOP_HOME=/home/hadoop/hadoop/hadoop-0.20.203.0
export HADOOP_CONF_DIR=/home/hadoop/hadoop/hadoop-0.20.203.0/conf
  4,在conf/hadoop-env.sh中配置JAVA路径

  在此文件中要把java的安装路径配置进去,即在该文件中加上以下代码

export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.22
  5,配置conf/core-site.xml, conf/hdfs-site.xml 及conf/mapred-site.xml三个文件
  以下代码为最简单的配置方式,其他的属性可以根据自己的情况自行配置
  core-site.xml:


<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://shirleyren100:9000</value>
</property>
</configuration>
  hdfs-site.xml
  replication 默认为3,建议将replicatio设置为小于或等于datanode的数量

<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
  mapred-site.xml:

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>shirleyren100:9001</value>
</property>
</configuration>
  5,配置datanode
  将以上配置好的hadoop包直接复制到datanode上即可
  6,配置namenode的conf/masters 和conf/slaves 文件


masters:
shirleyren100
slaves:
shirleyren101
shirleyren102
  此时所有的配置就完成了,下面启动以下试试看
  首次启动的时候需要首先格式化文件系统,进入到/home/hadoop/hadoop/hadoop-0.20.203.0路径下执行以下命令

bin/hadoop namenode -format

  之后在namenode上执行

bin/start-all.sh

  此时可以使用jps命令在namenode和datanode上查看已启动的进程,
  在namenode上看到的是

23550 JobTracker
16368 Jps
23215 NameNode
23462 SecondaryNameNode
  在datanode上看到的是

3972 DataNode
21990 Jps
4063 TaskTracker

   同样可以在web下查看,在浏览器输入以下地址http://192.168.0.100:50070/
  也可以执行几个hadoop的命令,验证hadoop是否正确启动

1,bin/hadoop dfs -mkdir input    /*创建名为input的目录*/
2,bin/hadoop dfs -put test.txt input/          /*将文件test.txt上传到input目录下*/
3,bin/hadoop dfs -ls  input/        /*查看input目录下的文件*/
 

需要注意的几点

  1,在第4步的配置文件中,一定使用主机域名而不是ip地址;
  2,建议各台服务器的JDK和Hadoop的安装路径一直,这样就可以避免由于路径的问题,在不同服务器上频繁修改配置文件;
  3,replication的值建议修改为小于或等于datanode数量;
  4,建议hadoop.tmp.dir的路径不要设置在/tmp下,这是因为linux系统重启后会将tmp目录删除,此时运行hadoop会报 java.io.IOException: File jobtracker.info could only be replicated to 0 nodes, instead of 1的异常,需要重新format;
  5,每次重新格式化后一定要删除hadoop tmp目录下的所有文件




常见问题总结
  1,启动时报错 java.net.UnknownHostException

结果:不能正常启动

原因:通过localhost.localdomain根本无法映射到一个IP地址

解决办法:查看/etc/hosts,将主机名添加到hosts文件
  2,启动时报错 java.io.IOException: File jobtracker.info could only be replicated to 0 nodes, instead of 1
  此时,首先检查防火墙是否关闭,是否对各节点的通信产生了影响,
  第二,可以检查namenode和datanode中namespaceID的值是否相同,在不同的情况下会造成该问题,修改为相同的值后,重启该节点;
  第三,将SAFEMODE设置为OFF状态;

hadoop dfsadmin -safemode leave
  此外,还需检查/etc/hosts文件中主机名的映射是否正确,不要使用127.0.1.1或localhost。
  将SAFEMODE设置为OFF状态可以有两种方法
  执行上面的语句可以将safemode强制置为off状态,或者在hdfs_site.xml配置文件中增加下面代码,将safemode的设为较小的值,此种方法避免了在执行hadoop过程中经常性遇到错误Name node is in safe mode而导致的需强制将safemode置为off。

<property>
<name>dfs.safemode.threshold.pct</name>
<value>0.95f</value>
</property>
  3,ip和域名解析的问题
  
也会造成File jobtracker.info could only be replicated to 0 nodes, instead of 1的问题

此时要检查/etc/hosts文件中主机名的映射是否正确,不要使用127.0.1.1或localhost。
  4,报错:Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
  执行任务时,任务卡死在reduce上,不执行

原因:任务最后会在最后将所有的reduce task复制到一台机器上,做最后总的reduce,此时需要ip和主机域名的配置正确

解决方法:将各节点的ip和主机域名配置正确,不能使用127.0.1.1或localhost,使用内网ip可加快处理速度
  5,Hive执行时报错 java.lang.OutOfMemoryError: GC overhead limit exceeded
  
原因:这个是JDK6新添的错误类型。是发生在GC占用大量时间为释放很小空间的时候发生的,是一种保护机制。

解决办法:,关闭该功能,可以添加JVM的启动参数来限制使用内存:在mapred-site.xml 里新增项:mapred.child.java.opts 内容:-XX:-UseGCOverheadLimit

如何杀掉当前正在执行的hadoop任务
  1,使用hadoop帐号登录namenode
  2,cd hadoop/hadoop-0.20.203.0
  3,执行下面命令
  


bin/hadoop job -list
    会列出当前所有的正在执行hadoop任务  


JobId   State   StartTime       UserName        Priority        SchedulingInfo
job_201112201934_0512   1       1325729383495   hadoop  NORMAL  NA
  4,找到需要被删除的任务id,执行下面命令
  


bin/hadoop job -kill job_201112201934_0512
 

运维网声明 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-311629-1-1.html 上篇帖子: 大象的崛起!Hadoop七年发展风雨录 下篇帖子: 第二节:win 7下编译eclispe hadoop plugin
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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