1、部署环境
Master: blade6
slaves: blade10 blade13
三个节点都是rhel6.2服务器
2、前期准备
(1)java 下载jdk,配置JAVA_HOME、PATH等,这里不做详述。
(2)sshd 无密码登陆
执行
$ ssh-keygen -t rsa
直接回车,完成后会在~/.ssh/生成两个文件:id_dsa 和id_dsa.pub。这两个成对出现,是私钥和公钥。再把id_dsa.pub 追加到授权key 里面(起初没有authorized_keys),即执行
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
完成后实现无密码登录本机。
然后将id_dsa、id_dsa.pub复制到所有涉及的节点上(blade6、blade10、blade13),并各自执行
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
可以实现各个节点ssh无密码登录。
相关内容可参见:
http://hi.baidu.com/sinbad/item/ef5bd0f9cd5acf6c3d14856b
http://stevenz.blog.hexun.com/15798089_d.html
(3)配置主机名
在/etc/hosts中,输入IP与主机名的对应关系,不做详述。
3、下载解压hadoop与单机测试
(1)下载解压
进入hadoop官网下载页面http://hadoop.apache.org/releases.html#Download
本人下载了hadoop-1.0.4版本,然后tar zxvf xxx解压。
(2)设置配置文件,
进入hadoop安装目录,修改文件conf/hadoop-env.sh
加入export JAVA_HOME=/etc/alternatives/java_sdk_1.6.0
(3)测试单机是否安装正确
在hadoop安装目录下执行
bin/hadoop jar hadoop-examples-1.0.4.jar wordcount conf/ /tmp/out
测试本机hadoop运行正常。
4、配置文件
备注:由于实验集群上有多个hadoop实例(每个节点上都有),因此我部署的hadoop不能使用默认端口,需要专门配置端口。另外,注意主机名不要有“-”、“_”、“.”之类的符号,测试时发现有这些时不正常。
(1)conf/core-site.xml
主要是配置NameNode,fs.default.name是NameNode的URI,形式应该是hdfs://主机名: 端口。
<configuration> <property> <name>fs.default.name</name> <!-- NameNode--> <value>hdfs://blade6:19000</value> <!-- Default Port: 9000. --> </property> </configuration>
(2)Conf/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.datanode.address</name> <value>0.0.0.0:60010</value> <!-- Default Port: 50010. --> </property> <property> <name>dfs.datanode.http.address</name> <value>0.0.0.0:60075</value> <!-- Default Port: 50075. --> </property> <property> <name>dfs.datanode.ipc.address</name> <value>0.0.0.0:60020</value> <!-- Default Port: 50020. --> </property> <property> <name>dfs.secondary.http.address</name> <value>0.0.0.0:60090</value> <!-- Default Port: 50090. --> </property> </configuration>
(3)conf/mapred-site.xml )
配置map-reduce相关进程,其中mapred.job.tracker是JobTracker的主机(或者IP): PORT。
<configuration> <property> <name>mapred.job.tracker</name> <value>blade6:19001</value> <!-- Default Port: 9001. --> </property> <property> <name>mapred.job.tracker.http.address</name> <value>0.0.0.0:60030</value> <!-- Default Port: 50030. --> </property> <property> <name>mapred.task.tracker.http.address</name> <value>0.0.0.0:60060</value> <!-- Default Port: 50060. --> </property> </configuration>
(4)conf/masters和conf/slaves
分别是
blade6
blade10 blade13
(5)将配置文件复制到其他节点
(要考虑各个节点的具体情况,保证各节点的配置信息是正确的)
5、启动Hadoop
(1)格式化hdfs
在节点maste上 hadoop目录下
bin/hadoop namenode -format
(2)启动所有节点
在节点master hadoop目录下
启动方式1:(同时启动HDFS和Map/Reduce)
$bin/start-all.sh
启动方式2:
$bin/start-dfs.sh $bin/start-mapred.sh
(3)关闭Hadoop
在master上 hadoop目录下
bin/stop-all.sh
6、在Hadoop运行程序(以wordcount为例)
部署好编程环境,总要跑个程序例子。从这个角度看,Hadoop中Wordcount有些像编程语言中的Helloworld。
在启动Hadoop(运行bin/start-all.sh)后,依次执行
bin/hadoop dfs -mkdir input // 在hdfs上创建目录input bin/hadoop dfs -put conf input // 将目录conf放入目录input中 bin/hadoop jar hadoop-examples-0.20.205.0.jar wordcount input/* output //运行mapreduce程序,以input目录为输入,以output目录为输出 bin/hadoop dfs -cat output/part-r-00000 // 查看执行结果
附录
HDFS常见操作
hadoop dfs -ls 列出HDFS下的文件 hadoop dfs -ls in 列出HDFS下某个文档中的文件 hadoop dfs -mkdir dir 在HDFS中创建目录 hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功 hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录 hadoop dfs -rmr out 删除指定文件从HDFS上 hadoop dfs -cat in/* 查看HDFS上in目录的内容 hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下 hadoop dfsadmin -safemode leave 退出安全模式 hadoop dfsadmin -safemode enter 进入安全模式
7、部分问题
(1) 机器重启后 Hadoop namenode 无法启动
http://blog.csdn.net/limiteewaltwo/article/details/8565523
(2)Hadoop Datanode无法启动
报错
2014-03-19 11:25:42,396 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-xxx/dfs/data: namenode namespaceID = 1081845705; datanode namespaceID = 886839309
http://blog.csdn.net/xw13106209/article/details/6852510
本文出自 “说话的白菜” 博客,谢绝转载!