Linux下搭建hadoop集群环境

小编写在前面的话

“天下武功,唯快不破”,但是如果不清楚原理,快也是徒劳。在这物欲横行,数据爆炸的年代,BigData时代到了,如果熟悉了整个hadoop的搭建过程,我们是否也能从中攫取一桶金?!

前期准备

l  两台linux虚拟机(本文使用redhat5,IP分别为 192.168.1.210、192.168.1.211)

l  JDK环境(本文使用jdk1.6,网上很多配置方法,本文省略)

l  Hadoop安装包(本文使用Hadoop1.0.4)

搭建目标

210作为主机和节点机,211作为节点机。

搭建步骤

1修改hosts文件

在/etc/hosts中增加:

 
 
1
2
192.168.1.210 hadoop1
192.168.1.211 hadoop2

2 实现ssh无密码登陆

2.1 主机(master)无密码本机登陆

 
 
1
ssh-keygen -t dsa -P ‘‘ -f ~/.ssh/id_dsa

直接回车,完成后会在 ~/.ssh/ 生成两个文件: id_dsa 和 id_dsa.pub 。这两个是成对出现,类似钥匙和锁。

再把 id_dsa.pub 追加到授权 key 里面 ( 当前并没有 authorized_key s文件 ) :

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

实验:

 
 
1
ssh localhost hostname

还是要输入密码,一般这种情况都是因为目录或文件的权限问题,看看系统日志,确实是权限问题,

.ssh下的authorized_keys权限为600,其父目录和祖父目录应为755

 

2.2 无密码登陆节点机(slave)

slave上执行:

 
 
1
ssh-keygen -t dsa -P ‘‘ -f ~/.ssh/id_dsa

生成.ssh目录。

 

将master上的authorized_keys复制到slave上:

 
 
1
scp authorized_keys hadoop2:~/.ssh/

实验:在master上执行

 
 
1
ssh hadoop2

实现无密码登陆。

3 配置Hadoop

3.1拷贝hadoop

将hadoop-1.0.4.tar.gz ,拷贝到usr/local 文件夹下,然后解压。

解压命令:

 
 
1
tar –zxvf hadoop-1.0.4.tar.gz

3.2查看 cat /etc/hosts

 
 
1
2
192.168.1.210 hadoop1
192.168.1.211 hadoop2

3.3 配置 conf/masters 和 conf/slaves

conf/masters:

 
 
1
192.168.1.210

conf/slaves:

 
 
1
2
192.168.1.211
192.168.1.211

3.4 配置 conf/hadoop-env.sh

加入

 
 
1
export JAVA_HOME=/home/elvis/soft/jdk1.7.0_17

3.5 配置 conf/core-site.xml

加入

 
 
1
2
3
4
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.210:9000</value>
</property>

3.6 配置 conf/hdfs-site.xml

加入

 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>
<name>dfs.http.address</name>
<value>192.168.1.210:50070</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>

3.7 配置conf/mapred-site.xml

加入

 
 
1
2
3
4
<property>
<name>mapred.job.tracker</name>
<value>192.168.1.50:8012</value>
</property>

 

3.8 建立相关的目录

/usr/local/hadoop/                     //hadoop数据和namenode目录

【注意】只创建到hadoop目录即可,不要手动创建data和namenode目录。

其他节点机也同样建立该目录。

3.9 拷贝hadoop文件到其他节点机

将hadoop文件远程copy到其他节点(这样前面的配置就都映射到了其他节点上),

命令:

 
 
1
scp -r hadoop-1.0.4 192.168.1.211:/usr/local/

3.10 格式化Active master(192.168.201.11)

命令:

 
 
1
bin/hadoop namenode -format

3.11 启动集群 ./start-all.sh

现在集群启动起来了,看一下,命令:

 
 
1
bin/hadoop dfsadmin -report

2个datanode,打开web看一下

浏览器输入:192.168.1.210:50070

 

打完收工,集群安装完成!  

 

常见问题

1 Bad connection to FS. command aborted

 

需要查看日志,我的日志中显示:

2013-06-09 15:56:39,790 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.io.IOException: NameNode is not formatted.

at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:330)

at org.apache.hadoop.hdfs.server.namenode.FSDirectory.loadFSImage(FSDirectory.java:100)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.initialize(FSNamesystem.java:388)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.<init>(FSNamesystem.java:362)

at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:276)

at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:496)

at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1279)

at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1288)

 

NameNode没被格式化!!!

 

解决办法:

原因是我手动建了 /usr/local/hadoop/data 和 /usr/local/hadoop/namenode,把这两个目录删除重新格式化namenode即可。

 

2 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /usr/local/hadoop/data, expected: rwxr-xr-x, while actual: rwxrwxrwx

解决办法:

/usr/local/hadoop/目录权限过高,改成chmod 755即可。

 

3 eclipse插件问题

异常1:2011-08-03 17:52:26,244 INFO org.apache.hadoop.ipc.Server: IPC Server handler 6 on 9800, call getListing(/home/fish/tmp20/mapred/system) from 192.168.2.101:2936: error: org.apache.hadoop.security.AccessControlException: Permission denied: user=DrWho, access=READ_EXECUTE, inode=”system”:root:supergroup:rwx-wx-wx

org.apache.hadoop.security.AccessControlException: Permission denied: user=DrWho, access=READ_EXECUTE, inode=”system”:root:supergroup:rwx-wx-wx

at org.apache.hadoop.hdfs.server.namenode.PermissionChecker.check(PermissionChecker.java:176)

at org.apache.hadoop.hdfs.server.namenode.PermissionChecker.checkPermission(PermissionChecker.java:111)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:4514)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPathAccess(FSNamesystem.java:4474)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getListing(FSNamesystem.java:1989)

at org.apache.hadoop.hdfs.server.namenode.NameNode.getListing(NameNode.java:556)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:396)

at org.apache.hadoop.ipc.Server$Handler.run(Server.java:953)

 

解决方法:在hdfs-site.xml里加入下面的

 
 
1
2
3
4
&lt;property&gt;
&lt;name&gt;dfs.permissions&lt;/name&gt;
&lt;value&gt;false&lt;/value&gt;
&lt;/property&gt;

 

 

HDFS常用命令

创建文件夹

 
 
1
./hadoop fs –mkdir /usr/local/hadoop/godlike

上传文件

 
 
1
./hadoop fs –put/copyFromLocal 1.txt /usr/local/hadoop/godlike

查看文件夹里有哪些文件

 
 
1
./hadoop fs –ls /usr/local/hadoop/godlike

查看文件内容

 
 
1
./hadoop fs –cat/text/tail /usr/local/hadoop/godlike/1.txt

删除文件

 
 
1
./hadoop fs –rm /usr/local/hadoop/godlike

删除文件夹

 
 
1
./hadoop fs –rmr /usr/local/hadoop/godlike

相关文章推荐《WIN08+tomcat实现负载均衡

日币奖励:

本文为原创文章、首发,根据本站积分规则给予日币奖励共6枚。

AD:本站开放投稿及积分(日币),日币可兑换实物奖励,每月top3可获得礼品一份。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。