本帖最后由 stone_nono 于 2014-8-7 11:26 编辑
目录
1、硬件环境介绍
2、集群环境搭建
3、ssh免密码登陆配置
4、jdk安装与配置
5、hadoop安装与配置
6、hadoop启动与验证
7、安装配置中出现常见问题及解决方法
一:硬件环境
单台PC机
虚拟机 + ubuntu12.0.4(32bit)
链接:http://pan.baidu.com/s/1kThyJOV 密码:n6m5
二:集群搭建
1、这里我们搭建一个由三台机器组成的集群:
IP 用户/密码 hostname 服务 系统版本
192.168.154.131 lo/root master nd/sn/rm ubuntu12.0.4(32bit)
192.168.154.131 lo/root slave1 dn/dm ubuntu12.0.4(32bit)
192.168.154.131 lo/root slave2 dn/dm ubuntu12.0.4(32bit)
服务
master:nd/sn/rm对应服务 NameNode、SecondaryNameNode、ResourceManager
slave1/2:dn/dm
对应服务 DataNode、NodeManager
注意:
用户及权限须一致......方便后续免密码SSH登陆。
2、修改固定IP及配置hostname
2.1 配置固定IP
命令:sudo gedit /etc/network/interfaces
添加
auto eth0
iface eth0 inet static
address 192.168.154.131
netmask 255.255.255.0
gateway 192.168.154.1
sudo /etc/init.d/networking restart
重启网络配置
2.2 hostname在/etc/hostname中修改主机名
命令:sudo gedit /etc/hostname
2.3 添加配置集群
命令:sudo gedit /etc/hosts
3、安装配置SSH免密码登陆
3.1 下载安装SSH
命令:sudo apt-get -i install ssh 自动下载安装
3.2 设置localhost无密码登陆
安装完成后会在~目录(当前用户主目录,即这里的/home/lo)下产生一个隐藏文件夹.ssh(ls -a 可以查看隐藏文件)
。如果没有这个文件,自己新建即可(mkdir .ssh)。
具体步骤如下:
1、 进入.ssh文件夹
2、 ssh-keygen -t rsa 之后一路回 车(产生秘钥)
3、 把id_rsa.pub 追加到授权的 key 里面去(cat id_rsa.pub >> authorized_keys)
4、 重启 SSH 服 务命令使其生效 restart ssh
验证SSH是否安装成功
输入 ssh localhost 。如果显示本机登录成功就表明安装成功。
【注意】:以上操作在每台机器上面都要进行。
3.3远程无密码SSH登陆
原理:实现master无密码登陆slave1、slave2,将master生成的密钥追加到slave1、slave2
密钥中.反向也如此
1、进入master .ssh目录,将id_rsa.pub公密通过scp命令拷贝到slave1中
scp ~/.ssh/id_rsa.pub lo@192.168.154.132:~/
2、进入slave1 .ssh目录,将从master拷贝过来的id_rsa.pub通过cat命令追加到slave1中
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
验证SSH远程无密码登陆
命令:ssh slave1(hostname) 是否无密码登陆(首次会提示输入密码)
【注意】:以上操作在每台机器上面都要进行。
关闭防火墙
命令:sudo ufw disable
注意:这步非常重要,如果不关闭,会出现找不到datanode的问题
4、Jdk安装
(hadoop运行环境需要1.6以上JDk,这里用1.7.0_45)建议每台机器使用相同JAVA_HOME路径
4.1、下载安装JDK,可参考命令安装SSH。
链接: http://pan.baidu.com/s/1eQCHguY 密码: 4cg1
4.2解压JDK安装包
解压路径/home/lo/jdk_1.7.0_45
4.3配置JDK环境变量
打开/etc/profile
命令:sudo gedit /etc/profile
将如下变量添加后保存退出
#set java environment
export JAVA_HOME=/home/lo/jdk1.7.0_45(JDK路径)
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
执行如下命令生效文件
命令:source ~/.profile
[注意]:由于系统会默认jdk路径,需执行如下3行更新默认jdk路径
命令:
sudo update-alternatives --install /usr/bin/java java /home/lo/jdk1.7.0_45/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /home/lo/jdk1.7.0_45/bin/javac 300
sudo update-alternatives --config java
验证Jdk是否安装成功
命令:java -version
5、hadoop2.2.0分布式安装与配置
5.1 下载和解压hadoop
链接: http://pan.baidu.com/s/1qW6rcde 密码: 2r6g
5.2 hadoop核心文件配置
这里要涉及到的配置文件有7个: ~/hadoop-2.2.0/etc/hadoop/hadoop-env.sh ~/hadoop-2.2.0/etc/hadoop/yarn-env.sh ~/hadoop-2.2.0/etc/hadoop/slaves ~/hadoop-2.2.0/etc/hadoop/core-site.xml ~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml ~/hadoop-2.2.0/etc/hadoop/mapred-site.xml ~/hadoop-2.2.0/etc/hadoop/yarn-site.xml
以上文件默认不存在的,可以复制相应的template文件获得。
如mapred-site.xml
配置文件1:hadoop-env.sh 修改JAVA_HOME值(export JAVA_HOME=/usr/jdk1.7)
配置文件2:yarn-env.sh 修改JAVA_HOME值(exportJAVA_HOME=/usr/jdk1.7)
配置文件3:slaves (这个文件里面保存所有slave节点)
配置文件4:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/lo/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.aboutyun.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.aboutyun.groups</name>
<value>*</value>
</property>
</configuration>
注意:<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/lo/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
说一下上面参数的含义,这里是hadoop的临时文件目录,file的含义是使用本地目录。
也就是使用的是Linux的目录,一定确保下面目录
/home/lo/tmp
的权限所属为你创建的用户。并且这里面我也要会变通,lo,为我创建的用户名,
如果你创建了zhangsan或则lisi,那么这个目录就会变为
配置文件5:hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/lo/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/lo/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
配置文件6:mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
配置文件7:yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
5.3 复制到其他节点
命令:sudo scp -r /home/lo/hadoop lo@slave1:~/
6、启动验证
6.1 启动hadoop
格式化namenode:
命令:hdfs namenode -format
启动hadoop
命令:sbin/start-all.sh
6.2 验证启动
master节点
JPS命令看到如下进程
NameNode
SecondaryNameNode
ResourceManager
slave1节点
JPS命令看到如下进程
DataNode
NodeManager
7、问题及解决方法
7.1、刚配置好的hadoop,namenode可以正常开启,但是datanode却不停的报错,并且不能正常启动:
2014-05-04 10:43:33,970 WARNorg.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server:hadoop1/192.168.10.22:9000
2014-05-04 10:43:55,009 INFOorg.apache.hadoop.ipc.Client: Retrying connect to server:hadoop1/192.168.10.22:9000. Already tried 0 time(s); retry policy isRetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
2014-05-04 10:43:56,012 INFOorg.apache.hadoop.ipc.Client: Retrying connect to server:hadoop1/192.168.10.22:9000. Already tried 1 time(s); retry policy isRetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
如果你已经检查了datanode以及namenode的连通性,ip都正确,但是仍然没法解决问题,那么可以接着往下看了。
其实根本原因还是无法连接到192.168.10.22:9000 相应ip的相应端口。
查看一下namenode的端口监听情况:
[hdp@hadoop1 sbin]$ netstat -an | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:37072 127.0.1.1:9000 TIME_WAIT
由于127.0.1.1正在使用9000的监听端口(红色标记),导致192.168.10.22:9000不能使用此端口
解决方法:
删除master节点
配置文件ect/hosts中 127.0.1.1这条IP配置,
重启后datanode可以连接
|