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
|
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
|
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可获得礼品一份。
- 本文来自:Linux教程网
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。