小编写在前面的话“天下武功,唯快不破”,但是如果不清楚原理,快也是徒劳。在这物欲横行,数据爆炸的年代,BigData时代到了,如果熟悉了整个hadoop的搭建过程,我们是否也能从中攫取一桶金?!前期准备两台linux虚拟机(本文使用redhat5,IP分别为 192.168.1.210、192.168.1.211)JDK环境(本文使用jdk1.6,网上很多配置方法,本文省略)Hadoop安装包(本文使用Hadoop1.0.4)搭建目标210作为主机和节点机,211作为节点机。搭建步骤1修改hosts文件在/etc/hosts中增加:192.168.1.210 hadoop1
192.168.1.211 hadoop22 实现ssh无密码登陆2.1 主机(master)无密码本机登录ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa直接回车,完成后会在 ~/.ssh/ 生成两个文件: id_dsa 和 id_dsa.pub 。这两个是成对出现,类似钥匙和锁。再把 id_dsa.pub 追加到授权 key 里面 ( 当前并没有 authorized_key s文件 ) :cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys实验:ssh localhost hostname还是要输入密码,一般这种情况都是因为目录或文件的权限问题,看看系统日志,确实是权限问题,.ssh下的authorized_keys权限为600,其父目录和祖父目录应为7552.2 无密码登陆节点机(slave)slave上执行:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa生成.ssh目录。 将master上的authorized_keys复制到slave上:scp authorized_keys hadoop2:~/.ssh/实验:在master上执行ssh hadoop2实现无密码登陆。3 配置Hadoop3.1拷贝hadoop将hadoop-1.0.4.tar.gz ,拷贝到usr/local 文件夹下,然后解压。解压命令:tar –zxvf hadoop-1.0.4.tar.gz3.2查看 cat /etc/hosts192.168.1.210 hadoop1
192.168.1.211 hadoop23.3 配置 conf/masters 和 conf/slavesconf/masters:192.168.1.210conf/slaves:192.168.1.211
192.168.1.2113.4 配置 conf/hadoop-env.sh加入export JAVA_HOME=/home/elvis/softk1.7.0_173.5 配置 conf/core-site.xml加入
fs.default.name
hdfs://192.168.1.210:9000
3.6 配置 conffs-site.xml加入
dfs.http.address
192.168.1.210:50070
dfs.name.dir
/usr/local/hadoop/namenode
dfs.data.dir
/usr/local/hadoop/data
dfs.replication
2
3.7 配置conf/mapred-site.xml加入
mapred.job.tracker
192.168.1.50:8012
3.8 建立相关的目录/usr/local/hadoop/ //hadoop数据和namenode目录【注意】只创建到hadoop目录即可,不要手动创建data和namenode目录。其他节点机也同样建立该目录。3.9 拷贝hadoop文件到其他节点机将hadoop文件远程copy到其他节点(这样前面的配置就都映射到了其他节点上),命令:scp -r hadoop-1.0.4 192.168.1.211:/usr/local/3.10 格式化Active master(192.168.201.11)命令:bin/hadoop namenode -format3.11 启动集群 ./start-all.sh现在集群启动起来了,看一下,命令:bin/hadoop dfsadmin -report2个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.
(FSNamesystem.java:362)at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:276)at org.apache.hadoop.hdfs.server.namenode.NameNode.(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-wxorg.apache.hadoop.security.AccessControlException: Permission denied: user=DrWho, access=READ_EXECUTE, inode=”system”:root:supergroup:rwx-wx-wxat 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里加入下面的
dfs.permissions
false
HDFS常用命令创建文件夹./hadoop fs –mkdir /usr/local/hadoop/godlike上传文件./hadoop fs –put/copyFromLocal 1.txt /usr/local/hadoop/godlike查看文件夹里有哪些文件./hadoop fs –ls /usr/local/hadoop/godlike查看文件内容./hadoop fs –cat/text/tail /usr/local/hadoop/godlike/1.txt删除文件./hadoop fs –rm /usr/local/hadoop/godlike删除文件夹./hadoop fs –rmr /usr/local/hadoop/godlike本人来源于:91ri.org