- 环境准备:
- 配置hosts文件
172.16.80.16 hadoop2
172.16.80.17 hadoop3
- 建立hadoop运行帐号
- 配置ssh免密码连入
ssh无密码互通
1.确认ssh可以运行
1.1. 修改sshd_config文件:vi /etc/ssh/sshd_config
1.2. 将#PasswordAuthentication no的注释去掉,并且将NO修改为YES
1.3. 将#PermitRootLogin yes的注释去掉
1.4. 重新启动SSH服务,命令为:/etc/init.d/sshd restart
1.5. 验证SSH服务状态,命令为:/etc/init.d/sshd status
2.更改互信节点的/etc/hosts文件
2.1.打开hosts文件:vi /etc/hosts ,在其中一个节点上,如server1上将其他的server2,server3等节点的ip和hostname写上,如
server1ip server1
server2ip server2
server3ip server3
server4ip server4
2.2 所有需互信节点均添加ip地址主机名对应关系。
3.设置server1
3.1 生成ssh密钥对:ssh-keygen -t rsa 一路回车即可.
3.2 查看是否有.ssh文件夹:ls -a
3.3 进入.ssh目录:cd .ssh
3.4 生成authorized_keys文件:cp id_rsa.pub authorized_keys
3.5 建立本身的信任连接:ssh server1 输入yes 无需密码
4.设置server2
7.1 生成ssh密钥对:ssh-keygen -t dsa (dsa与server1的rsa设置不要相同)
7.2 进入.ssh目录:cd .ssh
7.3 生成authorized_keys文件:cp id_dsa.pub authorized_keys
7.4 建立本身的信任连接:ssh server2 输入yes 无需密码
5.设置server3的方法与server1,server2相同
6.关键步骤
6.1 将server2,server3的authorized_keys内容追加至server1的authorized_keys文件中。
6.1.1 server2: cat authorized_keys 复制内容
6.1.2 server1: vi authorized_keys 在最末行添加复制。
server3 同上述操作相同
6.2 将以追加的文件authorized_keys覆盖server2,server3上的authorized_keys文件。
6.2.1 登陆server2:scp server1ip:/root/.ssh/authorized_keys /root/.ssh/authorized_keys
6.2.2 登陆server3:scp server1ip:/root/.ssh/authorized_keys /root/.ssh/authorized_keys
7.确认机器的信任连接已建立
7.1 对每台机器执行:ssh server1;ssh server2;ssh server3 在提示处输入yes回车。
- 下载并解压hadoop安装
- 配置namenode,修改site文件
<configuration><property><name>fs.default.name</name><value>hdfs://hadoop1:9000</value><final>true</final></property><property><name>hadoop.tmp.dir</name><value>/home/grid/hadoop/tmp</value><description>a base for other temporary directoryies</description></property>
修改 mapred-site.xml<configuration><property><name>dfs.name.dir</name><value>/home/grid/hdfs/name</value><final>true</final></property><property><name>dfs.data.dir</name><value>/home/grid/hdfs/data</value><final>true</final></property><property><name>dfs.replication</name><value>2</value><final>true</final></property></configuration>
<configuration><property><name>mapred.job.tracker</name><value>hadoop1:9001</value><final>true</final></property></configuration>
- 配置hadoop-env.sh
- 配置masters和slaves文件
- 向各节点复制hadoop
- 在每台服务器上修改profile文件,增加如下几行
export HADOOP_INSTALL=/home/grid/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
- 格式化namenode
- 启动hadoop
- 用jps检验各后台进程是否成功启动
- 测试
Hadoop Hadoop Good
^C[grid@hadoop1 hadoop]$ hadoop dfs -cat input
Hadoop Hadoop Good
[grid@hadoop1 hadoop]$ hadoop jar /home/grid/hadoop/hadoop-0.20.2-examples.jar wordcount input output
- 遇到的问题
Good 1
Hadoop 2
在运行hadoop dfs -put - input的时候遇 到如下问题:
Hadoop:could only be replicated to 0 nodes, instead of 1
在Hadoop的环境搭建过程中,常常会遇到类似这样的错误信息提示:“could only be replicated to 0 nodes, instead of 1 ”,产生这样的错误原因有多种,这里列举出以下四种常用的解决方法以供参考:
- 确保master(namenode) 、slaves(datanode)的防火墙已经关闭
- 确保DFS空间的使用情况
- Hadoop默认的hadoop.tmp.dir的路径为/tmp/hadoop-${user.name},而有的linux系统的/tmp目录文件系统的类型往往是Hadoop不支持的。( 本人在Ubuntu 10.10下测试伪分布式时就遇到了这种情况 )
- 先后启动namenode、datanode(本人没有碰到过这样的情况 )
$hadoop-daemon.sh start namenode
$hadoop-daemon.sh start datanode