`
lt200819
  • 浏览: 188314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop集群搭建各种问题

 
阅读更多
1.hadoop入门篇,包括软件下载及配置,并保证单机和伪分布模式可以运行通过,请看hadoop官网



2.集群搭建

笔者在hadoop集群搭建中,走了很多弯路,希望大家莫犯同样的错误

(a)ssh免密码登陆

刚开始ssh localhost 都需要密码,后来在masters机器上,将.ssh目录权限设为500,authroized_keys设为600才好

ubuntu目录权限修改


[xhtml] view plaincopyprint?

   1. ssh-keygen 產生出 id_rsa, id_rsa.pub, 已經都放到正確位置(.ssh), 但是連線時卻出現下述訊息: 
   2.  
   3. Agent admitted failure to sign using the key 
   4.  
   5. 解法 
   6. 於自己的機器上, 執行 ssh-add, 會出現下述訊息. 
   7.  
   8. Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa) 
   9.  
  10. 再次連線就正常囉~ 

ssh-keygen 產生出 id_rsa, id_rsa.pub, 已經都放到正確位置(.ssh), 但是連線時卻出現下述訊息: Agent admitted failure to sign using the key 解法於自己的機器上, 執行 ssh-add, 會出現下述訊息. Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa) 再次連線就正常囉~

如果在ssh连线中报这个错: Agent admitted failure to sign using the key,上面是解决方案



笔者在前面搭建glusterfs环境中,因为将各虚拟机的登陆用户名设的不一样,导致在配hadoop的ssh过程中,出现了很大的问题,纠结了很长时间。虚拟机配置如下:

       IP                  用户名        作用

192.168.30.20     test           masters

192.168.30.6       test1         slaves

192.168.30.7       test2         slaves

因为test是桌面版ubuntu,所以用来做masters,可以方便在浏览器中查看运行状态,另两台都是server版ubuntu



当在test机上执行

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

此时需要将authorized_keys拷到slaves机上去,这样才能实现免密码登陆

刚开始,我是在test1(已装过ssh)上用sudo scp 192.168.30.20:~/.ssh/authorized_keys ~/.ssh来拷贝,当然这时候会提示test机器上的root密码,这时得先到test机器上去sudo passwd root设置好密码后,才能执行拷贝,但在test机上,运行ssh 192.168.30.6,不能免密码登陆,就算去test1上去修改相应目录权限也无济于事,然后又在test机.ssh目录下执行sudo scp authorized_keys 192.168.30.7:~/.ssh,发现authorized_keys已经拷贝过去,但仍然不能免密码登陆,后来才发现是用户名不一样的问题,因为在test上默认是test登陆,在ssh slaves机时,它也是以这个用户名去访问,而此时slaves上的authorized_keys文件分别是在test1/.ssh和test2/.ssh下面的,所以根本没有对test用户起作用,找到原因后,下面是解决方案:



(1).先在test1和test2上分别新建一个用户test,免得重装系统,呵呵,sudo adduser test,并设好密码

(2).在将test机上的authorized_keys拷到slaves机上,sudo scp authorized_keys test@192.168.30.6:~/.ssh,这样就实现免密码登陆了

(3).但在slaves机上去用sudo命令会出现agent admitted failure to sign using key提示错误,前面的sudo /etc/init.d/glusterd start都没法运行了,此时可以test用户加到root组中,在将test用户改成超级用户时,因为/etc/sudoers是只读文件,先要 chmod 600 /etc/sudoers,然后将test加到root组去,然后再把该文件权限改回来:chmod 440 /etc/sudoers,详情请看:http://wenku.baidu.com/view/c28249323968011ca30091b6.html





参考资料:ssh免密码登陆



(b).集群配置

下面就可以修改配置文件了

conf/core-site.xml(相当于namenode):

[xhtml] view plaincopyprint?

   1. <configuration> 
   2.      <property> 
   3.          <name>fs.default.name</name> 
   4.          <value>hdfs://192.168.30.20:9000</value> 
   5.      </property> 
   6. </configuration> 

<configuration> <property> <name>fs.default.name</name> <value>hdfs://192.168.30.20:9000</value> </property> </configuration>

conf/hdfs-site.xml:

[xhtml] view plaincopyprint?

   1. <configuration> 
   2. <name>dfs.name.dir</name> 
   3. <value>/usr/local/hadoop/hdfs/name</value> 
   4. </property> 
   5. <property> 
   6. <name>dfs.data.dir</name> 
   7. <value>/usr/local/hadoop/hdfs/data</value> 
   8. </property> 
   9. <property> 
  10. <name>dfs.replication</name> 
  11. <value>1</value> 
  12. </property> 
  13. </configuration> 

<configuration> <name>dfs.name.dir</name> <value>/usr/local/hadoop/hdfs/name</value> </property> <property> <name>dfs.data.dir</name> <value>/usr/local/hadoop/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>

conf/mapred-site.xml:

[xhtml] view plaincopyprint?

   1. <configuration> 
   2.      <property> 
   3.          <name>mapred.job.tracker</name> 
   4.          <value>192.168.30.20:9001</value> 
   5.      </property> 
   6. </configuration> 

<configuration> <property> <name>mapred.job.tracker</name> <value>192.168.30.20:9001</value> </property> </configuration>

salves机上通过scp拷masters机上的hadoop主目录:

sudo scp -r test@192.168.30.20:/usr/local/hadoop /usr/local



当然还需要将conf/hadoop-env.sh中的java_home环境设置好,ubuntu桌面版用的.bin文件装的java,而 ubuntu server是用sudo apt-get install sun-java6-jdk来装的, 这个jdk目录在/usr/lib/jvm下,桌面版用.bin文件安装在/home/test/java目录中,这个在hadoop启动时就会出现问题,提示“could only be replicated to 0 nodes,instedas of 1” ,这表示masters和slaves环境不一致,可以检查/etc/hosts文件是不是一样,也有可能是防火墙没关闭所导致

ubuntu java安装1    ubuntu java安装2



cd /usr/local/hadoop目录下,运行bin/hadoop namenode -format ,如果没报错,则运行bin/start-all.sh ,然后在masters机上用jps命令查看NameNode,JobTracker,SecondaryNameNode这三个进程是不是都有,到 slaves机上用jps查看是不是有datanode和taskTracker进程,如果都有,在看浏览器端口是不是正常,如果有问题,可以去查看日志文件排错



本人在搭建hadoop集群时折腾了好几天,过程中先后遇到了以下问题,记录下来和大家分享,以免后面再碰到

(1).当在格式化namenode时出现cannot create directory /usr/local/hadoop/hdfs/name/current的时候,请将hadoop的目录权限设为当前用户可写sudo chmod -R a+w /usr/local/hadoop,授予hadoop目录的写权限



(2).当碰到192.168.30.6:chown:changing ownership of 'usr/local/hadoop ../logs':operation not permitted时,可用sudo chown -R test:test /usr/local/hadoop来解决,即将hadoop主目录授权给当前test用户



(3).如果slaves机上通过jps只有TaskTracker进程,没有datanode进程,请查看日志,是不是有“could only be replicated to 0 nodes,instedas of 1”有这样的提示错误,如果有,可能就是没有关闭防火墙所致,服务器和客户机都关闭(sudo ufw disable)后,所有进程启动正常,浏览器查看状态也正常了(ubuntu防火墙关闭)

(4).要在服务器机上把masters和slavs机的IP地址加到/etc/hosts,当然这个不影响start-all.sh启动,只是浏览器jobtacker上找不到节slaves节点

(5).ssh免密码登陆时,注意文件authorized_keys和.ssh目录权限,如果从masters机上scp authorized_keys到slaves机上出现拒绝问题,那就在salves机上也ssh-keygen,这样目录和文件就不会有权限问题了,就可以实现ssh免密码登陆了,或直接将.ssh目录拷过去,在slaves机上新建.ssh目录权限好像和masters机的目录权限不一样


运行正常后,可以用wordcount例子来做一下测试:

bin/hadoop dfs –put /home/test-in input   //将本地文件系统上的 /home/test-in 目录拷到 HDFS 的根目录上,目录名改为 input
bin/hadoop jar hadoop-examples-0.20.203.0.jar wordcount input output
#查看执行结果:
# 将文件从 HDFS 拷到本地文件系统中再查看:
$ bin/hadoop dfs -get output output
$ cat output/*
# 也可以直接查看
$ bin/hadoop dfs -cat output/*

如果在reduce过程中出现"Shuffle Error:Exceeded MAX_FAILED_UNIQUE_FETCHES;bailing-out"错误,原因有可能是/etc/hosts中没有将IP映射加进去,还有可能是关于打开文件数限制的问题,需要改vi /etc/security/limits.conf,详情请看:Hadoop常见问题及解决办法



如果hadoop启动时,slave机报连接拒绝错误,即连不上master9000端口,则namenode运行不起来时,可以先确保单机是不是可以正常运行伪分布式模式,可能是因为没有做ssh localhost,也可以查看是不是/etc/hosts文件IP映射有问题,一定注意该机的IP地址是不是唯一映射一个服务器名,不然可能也会出错

1.http://wiki.apache.org/hadoop/ConnectionRefused

2.http://ubuntuforums.org/showthread.php?t=1057604

3.http://www.hadoopor.com/thread-1056-1-1.html



如果是一个master机和一个slave机,做wordcount测试,是不会报上述错误的,不知道为什么两台slave机后,就报上述错误,解决方案如下(将masters机和其中一台slaves机中的/etc/hosts中masters机的IP映射地址改成服务器的名字,而不是IP地址):

1.http://hi.baidu.com/daodaowuhen/blog/item/b299b486f6c8aea86c811996.html

2.http://blog.sina.com.cn/s/blog_6e7e94bc0100pcjw.html



如果需要在Eclipse上运行MapReduce程序,需要将hadoop目录下的eclipse插件(hadoop/contrib /eclipse-plugin)拷到eclipse安装目录下的plugins下。此时可以把hadoop的测试例子wordcount从src /examples中拷到eclipse工程中,在open run dialog的arguments中设置好输入和输出参数,然后run as->java application就可以了



如果要run as->run on hadoop,即要在集群上运行MapReduce程序,则需要设置hadoop location,设置好master的namenode和jobtracker的IP及端口号,能正确连到DFS Locations就表明可以分布式运行MapReduce程序了,本人在此过程中,先后遇到以下问题:

1.Connecting to DFS test has encountered a problem

这个原因是因为直接采用hadoop0.20.203.0和相应包下的eclipse插件,此时MapReduce viewer是出现了,但根本连不上DFS,查了很多资料,很多说是因为hadoop下的eclipse插件和eclipse版本不匹配



参考资料1:http://lucene.472066.n3.nabble.com/about-eclipse-plugin-td3047557.html

参考资料2:自己动手编译对应hadoop版本的eclipse plugin 



按照上面两条解决方案,我选择了第一种,虽然前一种hadoop是0.20.2的版本,但已经有编译好的可以用的eclipse插件,还有 o.20.203这个版本是今年5月份出来的,还比较新,问题暴露的还少,而第二种解决方案需要自己配置编译,好像还要用ant命令,这个工具还没用过,所以免得麻烦



2.error:call to failed on local exception:java.io.EOFException

原因如下:eclipse-plugin和Hadoop版本对不上(因为刚开始不想换hadoop版本,就直接把那个插件(hadoop- plugin-0.20.3-snapshot.jar)拷到0.20.203版本里跑了一下,结果报上面的错,后来将hadoop版本换成 hadoop0.20.2就好了)

参考资料:http://lucene.472066.n3.nabble.com/Call-to-namenode-fails-with-java-io-EOFException-td2933149.html



3.Plug-in org.apache.hadoop.eclipse was unable to load class
org.apache.hadoop.eclipse.launch.HadoopApplicationLaunchShortcut.

可以尝试将终端切到eclipse目录下用./eclipse clean来将以前载过的hadoop插件清除掉,我遇到这个错误后,这样操作后就好了。

参考资料:http://www.cloudobjects.de/2010/11/running-hadoop-jobs-using-eclipse.html



上述三种错误,是我在这个过程中遇到的错误,如果遇到类似错误,可以试着用上述方法来排除一下,因为hadoop在搭建的过程中遇到的问题实在千奇百怪,稍微一步有差池,说不准后面运行时就报错,就算报相同错误提示的, 也可能是其它原因导致的,上述只提供其中一种解决方案



参考资料:

1.ubuntu server上java安装

2.http://www.infoq.com/cn/articles/hadoop-config-tip

3.http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop3/

4.http://www.iteye.com/topic/891735

5.http://www.iteye.com/topic/284849

6.http://muxiaolin.iteye.com/blog/1075575
分享到:
评论

相关推荐

    hadoop集群搭建(超级详细)

    在大数据领域,Hadoop是一个广泛使用的开源框架,用于存储和处理海量数据。本文将详细讲解如何搭建一个...这个超详细的教程覆盖了从零开始到集群搭建完成的全过程,按照步骤执行,可以轻松掌握Hadoop集群搭建技术。

    Hadoop集群搭建详细简明教程

    总之,“Hadoop集群搭建详细简明教程”将引导你完成从零到一的Hadoop集群建设,通过实践操作,你可以深入理解Hadoop的工作原理,为处理大数据问题打下坚实的基础。记得不断学习和探索,因为Hadoop生态系统在不断发展...

    Hadoop集群搭建(全)

    Hadoop集群搭建详解 Hadoop是一个开源的分布式计算平台,由 Apache 软件基金会开发,核心组件包括HDFS(Hadoop Distributed Filesystem)和MapReduce。HDFS是一个分布式文件系统,提供了对文件系统的命名空间和...

    3.基于hadoop集群搭建hbase

    ### 基于Hadoop集群搭建HBase集群详解 #### 一、引言 随着大数据技术的迅猛发展,海量数据的高效存储与处理成为企业关注的重点。Hadoop作为一款能够处理大量数据的基础框架,被广泛应用于各类场景之中。然而,在...

    Hadoop集群搭建笔记

    非常详细的linux上的hadoop集群搭建文档,可供参考,希望大家能够从中获益

    hadoop集群搭建文档

    hadoop集群搭建文档,欢迎您下载使用欢迎您下载使用欢迎您下载使用欢迎您下载使用欢迎您下载使用

    Hadoop集群搭建教程(ubuntu) (1).docx

    详细的Hadoop集群搭建过程,有6部分,前提是能连接网络,前三部都是很简单免密要仔细看,推荐JAVA版本1.8,Hadoop版本2.2.7 这两个版本都是稳定的

    hadoop集群搭建文档资料

    以上内容是Hadoop集群搭建的基础步骤和关键知识点,具体的实施过程中可能需要根据实际环境进行调整。提供的文档资料应详细记录了每一步的操作,帮助读者理解和实践Hadoop集群的搭建。通过这份文档,你可以学习到...

    完全分布式hadoop集群搭建(含SSH免密码登录)(详细版)

    非常详细的hadoop集群搭建教程,包含SSH免密码登录,基本上按照教程上一步一步操作就能搭建成功,非常适合大数据初学者使用

    bboss-docs-hadoop集群搭建

    bboss hadoop集群搭建 hadoop集群搭建 hadoop集群搭建 hadoop集群搭建 hadoop集群搭建

    hadoop集群搭建步骤

    该文档提供了linux环境中搭建hadoop集群(大数据)的步骤,个人认为比较详细,供大家学习

    Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程

    Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程 按照文档中的操作步骤,一步步操作就可以完全实现hadoop2.2.0版本的完全分布式集群搭建过程

    linux下的hadoop集群搭建与相关配置

    详细的hadoop集群搭建步骤

    hadoop集群搭建详细步骤

    "Hadoop 集群搭建详细步骤" 本文将详细介绍 Hadoop 集群搭建的步骤,从伪分布式到克隆并将其成功转化为集群搭建。我们将从 Hadoop 伪分布式搭建过程开始,然后将一台机器克隆 2 台机器,最后将这三台伪分布式改装成...

    mac环境下hadoop集群搭建

    搭建一个Hadoop集群是一个复杂的过程,但为了更好的理解,我们将这个过程拆解成几个主要步骤,并且由于本文档是在Mac环境下进行Hadoop集群搭建的指南,我们需要专注于特定于Mac和VMware Fusion的步骤。 1. 创建...

    Hadoop集群搭建

    Hadoop集群搭建详细的描述了hadoop集群的搭建过程,值得大家去学习。

Global site tag (gtag.js) - Google Analytics