分布式hadoop-1.0.3搭建以及各种变态问题解决

        让我奇怪的是对于一个新手就算按照官网的步骤做也会不停报错,导致最终搭建失败。这里记录了 很多我在搭建过程中遇到的问题,我想应该是很全了。如果你也是第一次搭建分布式hadoop,并且无法像官网说的一样顺利成功,那么希望我的这篇文章会对你有所帮助。

  1. 在各服务器新建用户ruc

useradd  ruc

passwd  ******

  1. 修改各ip服务器名称

编辑/etc/hosts(在root下编辑,或ruc用户用命令sudo  vi   /etc/hosts

添加IP name,如202.112.114.33   lab1

如果输入sudo命令报错:xx  is  not  in  the  sudoers  file

返回root用户下给用户添加sudo权限

#whereis       /etc/sudoers找到文件位置,一般在/etc/sudoers

#chmod  u+w   /etc/sudoers添加写权限

#vi    /etc/sudoers

root ALL=(ALL) ALL下添加

ruc ALL=(ALL) ALL保存

#chmod   u-w    /etc/sudoers取消写权限

当前命名列表

202.112.114.33

slave1

  
  
  
  

202.112.114.38

master

  
  
  


  1. 设置ssh无密码登录

在作为master的服务器master上生成一对密钥

$ssh-keygen  –t   rsa

会生成id_rsaid_rsa.pub

把公钥复制到其他slave服务器

$ssh-copy-id     –i      ~/.ssh/id_rsa.pub      ruc@slave1

之后可直接登录slave1

$ssh      ruc@slave1

  1. 安装jdk1.6

我的服务器是红帽,jdk1.4.2要先卸载才能更新,如果你的一切正常可跳过次步

不卸载自带的1.4,设置jdk1.6的安装无法生效。为了避免这种情况,首先还是卸载掉其自带的1.4版本的jdk

#rpm -qa | grep jdk

#rpm -qa | grep gcj

libgcj-4.1.2-42.el5

java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

上面先确认jdk的具体版本号,然后

#yum   -y    remove    java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

Settingup Remove Process

ResolvingDependencies………..(开始卸载)

Complete!(卸载完成)

下面开始安装,安装包是/usr/lib/jvm/jdk/jdk-6u33-linux-x64.bin

首先,要给jdk-6u33-linux-x64.bin分配权限,具体的这里要给它可执行的权限,输入:

chmod +x  jdk-6u33-linux-x64.bin,这里参数x即使执行权限。

[root@localhostjdk]# chmod  +x  jdk-6u33-linux-x64.bin

然后运行:./jdk-6u33-linux-x64.bin,

[root@localhostsoft]# ./jdk-6u33-linux-x64.bin

执行之后会有确认安装之类的,输入y,或者A,(可以根据具体出现的提示来输入)

然后回车。开始解压。一直到

Java(TM)SE Development Kit 6 successfully installed.

.........

PressEnter to continue.....

Done.

看看解压后的文件先

[root@localhostjdk]# ls

jdk1.6.0_33 jdk-6u33-linux-x64.bin

设置环境变量,将设置写入/etc/profile文件中,先执行下面命令:

[root@localhostjdk]# vi  /etc/profile

打开profile文件后输入i进入insert模式,在文件中添加如下内容。

#The following is the JAVA_HOME of this environment

exportJAVA_HOME=/usr/lib/jvm/jdk/jdk1.6.0_33

exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/rt.jar

exportPATH=$PATH:$JAVA_HOME/bin

然后esc,输入:x,保存退出。然后需要设置让更改生效:

[root@localhostlocal]# source   /etc/profile

查看现在的jdk版本:

[root@localhostlocal]# java   -version

javaversion “1.6.0_33″

安装成功


  1. master上配置hadoop

打开conf文件夹修改配置文件,需要修改的文件依然是:hadoop-env.shcore-site.xmlhdfs-site.xmlmapred-site.xml

hadoop-env.sh

exportJAVA_HOME=/usr/lib/jvm/jdk/jdk1.6.0_33

conf/core-site.xml

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://master:9000</value>

</property>

<property>
      <name>hadoop.tmp.dir</name>
      <value>/home/ruc/hadoop/tmp/hadoop-${user.name}</value>
      <description>A base for other temporary directories.</description>
    </property>

</configuration>

在集群中HDFSNameNode是运行在master机器上的。

conf/hdfs-site.xml

<configuration>

<property>

<name>dfs.name.dir</name>

<value>/home/ruc/hadoop/filesystem/name</value>

</property>

<property>

<name>dfs.data.dir</name>

<value>/home/ruc/hadoop/filesystem/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

</configuration>

conf/mapred-site.xml

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>master:9001</value>

</property>

<property>

<name>mapred.map.tasks</name>

<value>2</value>

<description>

definemapred.map tasks to be number of slave hosts

</description>

</property>

<property>

<name>mapred.reduce.tasks</name>

<value>2</value>

<description>

definemapred.reduce tasks to be number of slave hosts

</description>

</property>

<property>

<name>mapred.system.dir</name>

<value>/home/ruc/hadoop/filesystem/mapreduce/system</value>

</property>

<property>

<name>mapred.local.dir</name>

<value>/home/ruc/hadoop/filesystem/mapreduce/local</value>

</property>

</configuration>

这里配置的是JobTracker的地址及端口,在集群中JobTracker位于master主机上。

conf/masters

master-fs

conf/slaves

slave1

slave2

……

slave6


  1. 拷贝hadoop-1.0.3到各服务器

$scp   –r    hadoop-1.0.3    slave1:~

… 

再配置一下各服务器的环境变量


export HADOOP_HOME=/home/ruc/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/*.jar:$HADOOP_HOME/lib/*.jar:$HADOOP_HOME/*.jar:$CLASSPATH


  1. 在master上运行hadoop

$cd     hadoop

$bin/hadoop     namenode     -format

$bin/start-all.sh

然后打开网页master:50070和master:50030重点看节点数是不是你配置的节点数,如果不是就要看日志里有什么错了

如果页面说hadoop处于安全模式safemode可输入命令bin/hadoop dfsadmin -safemode leave离开安全模式,但最好还是看下日志出了什么错

1:hadoop报错address already in use
         netstat -tunlp
         查找被占用的端口号对应的PID

  kill   PID实在不行就pkill  java

2:hadoop datanode报错Server at node31/202.112.114.37:9000 not available yet, Zzzzz...
       修改/etc/hosts 将127.0.0.1 命名为localhost,可能存在最先匹配,所以最好写在前面
》》》》》3:分布式的Hadoop环境,报错:jobtracker.info could only be replicated to 0 nodes, instead of 1。

  这个可以说是hadoop经典问题了,网上搜了N种方法,大部分说需要重新format tmp文件夹,我的做法是把tmp,logs,filesystem三个文件夹删掉重新格式化,原因我也没搞懂。也有的说是设置的预留空间太大,tmp文件夹所在位置没有这么大的空间,修改配置后运行正常。这个我没试。其实这个错误的意思应该是说没有可用的datanode。也可能是防火墙问题,我试过关闭防火墙虽然可以,但是我不建议这样做,命令我就不写了,而且后来还会报这个错。还有一次前几个办法都不行,最后分开启动dfs和mapred就好了,很奇怪吧。

$bin/start-dfs.sh   

$bin/start-mapred.sh





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值