Hadoop完全分布式模式的安装和配置

最近一段时间学习了hadoop,对hadoop有了一定的了解。正好实验室有足够的机器,可以进行hadoop的完全分布式模式的安装和配置。今天尝试了下,虽然其中遇到些问题,但最后还是安装成功了,安装完也随手把安装过程记录下来以备将来不时之需。

我下载的hadoop的版本是1.1.2版本,机器上的jdk版本是1.6.0_38。

1.准备3台机器,一台作为主结点,另外两台作为从结点:

结点类型主机名IP地址
主结点master202.114.24.84
从结点slave1202.114.24.91
从结点slave2202.114.24.89

注:修改机器的主机名方法如下:

>vi /etc/sysconfig/network

修改其中的HOSTNAME就可以了

2.配置/etc/hosts文件,在hosts文件末尾添加以下内容

202.114.24.84 master
202.114.24.91 slave1
202.114.24.89 slave2

3.为三台机器都建立相同的hadoop运行帐号,用户名都是grid,密码是root。

4.为三台机器配置ssh免密码接入。在每台机器上都以grid用户登录linux系统,并进入grid用户主目录进行如下操作:

>cd ~(grid用户的主目录)

>ssh-keygen -t rsa
(系统会交互式的问你若干个问题,可以不管它们,一直按enter键直到结束)

结束后,..ssh目录下会生成两个文件,一个是id_rsa,一个是id_rsa.pub,进行以下操作:

>cp .ssh/id_rsa.pub .ssh/authorized_keys

三台机器都完成上述操作之后,需要把各自的authorized_keys的内容拷贝到对方的authorized_keys文件中,可以进行如下操作:

slave1:>scp /home/grid/.ssh/authorized_keys grid@master:/home/grid

在主结点的机器上,把slave1的authorized_keys文件的内容拷贝到master的authorized_keys文件中

slave2:>scp /home/grid/.ssh/authorized_keys grid@master:/home/grid

在主结点的机器上,把slave2的authorized_keys文件的内容拷贝到master的authorized_keys文件中

接着把master的authorized_keys文件拷贝到slave1和slave2上,覆盖原先在.ssh目录下的authorized_keys文件,也就是说三台机器中的authorized_keys文件中的内容是相同的。

最后用如下命令测试三台机器是否可以免密码接入:

>ssh slave1

>ssh slave2

如果没有提示说要输入密码,证明配置成功。

5.在主结点上进行hadoop的有关配置。

1)配置/hadoop-1.1.2/conf/hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.6.0_38

2)配置/hadoop-1.1.2/conf/core-site.xml

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

3)配置/hadoop-1.1.2/conf/hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

4)配置/hadoop-1.1.2/conf/mapred-site.xml

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

5)配置/hadoop-1.1.2/conf/masters

master

6)配置/hadoop1.1.2/conf/slaves

slave1

slave2

6.向各结点分发hadoop,执行如下命令:

>scp -r /home/grid/hadoop-1.1.2 grid@slave1:/home/grid

>scp -r /home/grid/hadoop-1.1.2 grid@slave2:/home/grid

注:三台机器上的jdk安装路径都是/usr/java/jdk1.6.0_38

7.格式化namenode,在master上运行如下命令:

>bin/hadoop namenode -format

8.启动hadoop,运行如下命令:

>bin/start-all.sh
starting namenode, logging to /home/grid/hadoop/libexec/../logs/hadoop-grid-namenode-master.out
slave2: starting datanode, logging to /home/grid/hadoop/libexec/../logs/hadoop-grid-datanode-slave2.out
slave1: starting datanode, logging to /home/grid/hadoop/libexec/../logs/hadoop-grid-datanode-slave1.out
master: starting secondarynamenode, logging to /home/grid/hadoop/libexec/../logs/hadoop-grid-secondarynamenode-master.out
starting jobtracker, logging to /home/grid/hadoop/libexec/../logs/hadoop-grid-jobtracker-master.out
slave2: starting tasktracker, logging to /home/grid/hadoop/libexec/../logs/hadoop-grid-tasktracker-slave2.out
slave1: starting tasktracker, logging to /home/grid/hadoop/libexec/../logs/hadoop-grid-tasktracker-slave1.out

9.验证hadoop,运行如下命令:

1)jps验证

[grid@master hadoop]$ /usr/java/jdk1.6.0_38/bin/jps
6320 NameNode
6510 SecondaryNameNode
6714 Jps
6609 JobTracker

[grid@master hadoop]$ ssh slave1
Last login: Sat Dec  7 09:12:18 2013 from master
[grid@slave1 ~]$ /usr/java/jdk1.6.0_38/bin/jps
5589 Jps
5243 TaskTracker
5124 DataNode


[grid@master hadoop]$ ssh slave1
Last login: Sat Dec  7 09:12:18 2013 from master
[grid@slave1 ~]$ /usr/java/jdk1.6.0_38/bin/jps
5589 Jps
5243 TaskTracker
5124 DataNode

2)hadoop dfsadmin -report验证

[grid@master hadoop]$ bin/hadoop dfsadmin -report
Configured Capacity: 96546455552 (89.92 GB)
Present Capacity: 56643620894 (52.75 GB)
DFS Remaining: 56643563520 (52.75 GB)
DFS Used: 57374 (56.03 KB)
DFS Used%: 0%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

-------------------------------------------------
Datanodes available: 2 (2 total, 0 dead)

Name: 202.114.24.89:50010
Decommission Status : Normal
Configured Capacity: 48273227776 (44.96 GB)
DFS Used: 28687 (28.01 KB)
Non DFS Used: 26456616945 (24.64 GB)
DFS Remaining: 21816582144(20.32 GB)
DFS Used%: 0%
DFS Remaining%: 45.19%
Last contact: Sat Dec 07 09:13:34 CST 2013


Name: 202.114.24.91:50010
Decommission Status : Normal
Configured Capacity: 48273227776 (44.96 GB)
DFS Used: 28687 (28.01 KB)
Non DFS Used: 13446217713 (12.52 GB)
DFS Remaining: 34826981376(32.44 GB)
DFS Used%: 0%
DFS Remaining%: 72.15%
Last contact: Sat Dec 07 09:13:34 CST 2013

3)网页验证
访问http://202.114.24.84:50030

访问http://202.114.24.84:50070

10.运行测试

[grid@master hadoop]$ mkdir test/
[grid@master hadoop]$ cd test/
[grid@master test]$ vim file1.txt

file1.txt:hello hadoop hello world

[grid@master test]$ vim file2.txt

file2.txt:goodbye hadoop

[grid@master hadoop]$ bin/hadoop dfsadmin -safemode leave
Safe mode is OFF
[grid@master hadoop]$ bin/hadoop dfs -put ~/hadoop/test/* input
put: `input': specified destination directory doest not exist
[grid@master hadoop]$ bin/hadoop fs -mkdir input
[grid@master hadoop]$ bin/hadoop dfs -put ~/hadoop/test/* input
[grid@master hadoop]$ bin/hadoop jar hadoop-examples-1.1.2.jar wordcount input output

注:其中output只能由程序创建,HDFS文件系统中不能事先存在.

11.停止hadoop

[grid@master hadoop]$ bin/stop-all.sh
stopping jobtracker
slave1: stopping tasktracker
slave2: stopping tasktracker
no namenode to stop
slave1: stopping datanode
slave2: stopping datanode
master: stopping secondarynamenode

至此,hadoop完全分布式模式安装成功。

从中遇到的问题:

1.在进行ssh免密码接入时老提示需要输入密码

原因:三台机器不是使用相同的用户名来进行ssh-keygen -t rsa 操作的

解决办法:为三台机器建立相同的用户名和密码(用户名:grid,密码:root),以grid用户进行所有的操作

2.报错org.apache.hadoop.conf.Configuration: bad conf file: element not property

原因:在三个xml配置文件中,把property写成了properity

解决办法:properity修改成property

3.在master上执行stop-all.sh命令时,出现no namenode to stop

原因:在/etc/hosts文件中,多了一句127.0.0.1 master,即主机名master被解析的ip地址为127.0.0.1,而不是202.114.24.84

解决办法:把这句127.0.0.1 master删掉即可

4.在slave1上运行jps命令时,发现没有datanode进程

原因:在master节点上执行了太多次hadoop namenode -format命令,导致datanode不能启动

解决办法:把三台机器上的hadoop_tmp下的所有文件删除,之后再在master节点上执行hadoop namenode -format命令,再执行start-all.sh来启动hadoop,问题解决

5.修改三台机器的hdfs-site.xml文件,在其中加入:

<property>
<name>dfs.data.dir</name>
<value>/home/grid/hadoop/data</value>
</property>
<property>
并在三台机器上建立/home/grid/hadoop/data文件,重新启动hadoop后发现datanode并没有启动

解决办法:查看slave1上/logs中的日志,看到提示说data目录的实际权限是rwxrwxr-x,而期望的时rwxr-xr-x,修改data目录的全权限为755即可

附:

1)重启坏掉的DataNode或JobTracker。当Hadoop集群的某单个节点出现问题时,一般不必重启整个系统,只须重启这个节点,它会自动连入整个集群。

在坏死的节点上输入如下命令即可:

bin/hadoop-daemon.sh start dataNode

bin/hadoop-daemon.sh start jobtracker

2) 动态加入DataNode或TaskTracker。这个命令允许用户动态将某个节点加入集群中。

bin/hadoop-daemon.sh --config ./conf start dataNode

bin/hadoop-daemon.sh --config ./conf start tasktracker


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值