首页 > 代码库 > Hadoop学习笔记_8_实施Hadoop集群 --分布式安装Hadoop
Hadoop学习笔记_8_实施Hadoop集群 --分布式安装Hadoop
实施Hadoop集群
--分布式安装Hadoop
说明:
以Ubuntu配置为例,其中与CentOS不同之处会给出详细说明
现有三台服务器:其IP与主机名对应关系为:
192.168.139.129 master #NameNode/JobTrackerr结点 192.168.139.132 slave01 #DataNode/TaskTracker结点 192.168.139.137 slave02 #DataNode/TaskTracker结点
一.配置ssh实现Hadoop节点间用户的无密码访问
1.修改主机名(hostname)
[Ubuntu系统配置方法如下]
分别编辑三台主机的/etc/hostname文件
master结点文件内容修改为:
master
slave两个结点内容分别修改为:
slave01 #slave01结点 slave02 #slave02结点
[CentOS配置方式如下]
分别编辑三台主机的/etc/sysconfig/network文件,
master结点文件内容修改为:
NETWORKING=yes HOSTNAME=master
slave两个结点内容分别修改为:
NETWORKING=yes HOSTNAME=slave01 #slave01结点 NETWORKING=yes HOSTNAME=slave02 #slave02结点
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
验证:
1.执行reboot命令,重启服务器
2.执行命令hostname,查看是否已经生效
2.将hostname与IP绑定
分别编辑三台服务器的/etc/hosts[与CentOS相同]文件,添加以下三行(三台服务器内容相同):
192.168.139.129 master 192.168.139.132 slave01 192.168.139.137 slave02
配置完成之后如图所示:
注意:IP地址和主机名一定要准确对应,这样以后在配置.xml配置文件需要IP地址和ssh无密码访问时可以直接用主机名代替IP地址。
验证:三台服务器互ping一下
ping master ping slave01 ping slave02
3.解除结点间的SSH访问密码
a) 在三台主机的/root目录下执行下面命令[注意是以root用户登录]
rm -r .ssh #删除.ssh目录
b) 执行
ssh-keygen -t rsa
c) 进入.ssh(cd .ssh/)目录,执行
cp id_rsa.pub authorized_keys
d) 将master结点下的authorized_keys文件中的内容分别拷贝到各个slave结点下的authorized_keys文件中(追加到文件末尾即可)
在master下验证:
ssh slave01 ssh slave02 //如果可以访问就说明现在你可以通过ssh命令无密码访问各个DataNode节点了
在这里说明一下:主机A需要无密码访问主机B,就要把主机A的公钥拷贝到主机B上,如果主机B也许要无密码访问主机A则把主机B的公钥拷贝到主机A上即可,只是这样做意义不大
首次ssh无密码访问DataNode节点可能提示输入Yes或者No,输入Yes再次访问就可以直接登录任何DataNode节点而对他们进行远程操作了。
如图所示无密码访问成功:
出错处理:
1.如果刚开始不通,试着重启一下机器再看看。
2.如果ssh命令不可用可能是ssh命令没有安装,先安装ssh
[Ubuntu命令如下]
sudo apt-get install ssh
[CentOS方法如下]
yum install ssh
启动 SSH service sshd start
设置开机运行 chkconfig sshd on
二.JDK的安装配置
1.首先下载JDK软件包:jdk-6u24-linux-i586.bin,并将JDK软件包放在/root目录下
2.给jdk加上可执行权限,这样我们就可以运行这个二进制文件,方法如下:
chmod a+x jdk-6u24-linux-i586.bin
3.运行jdk进行安装,命令如下:
./jdk-6u24-linux-i586.bin
执行安装后将在当前目录(/root)生成jdk.***文件夹。
4.把生成的jdk文件夹复制到/usr/java文件夹下
mkdir /usr/java cp -r jdk.*** /usr/java/
5.设置环境变量
修改/etc/profile[与CentOS相同]文件,在/etc/profile文件中添加如下代码:
export JAVA_HOME=/usr/java export PATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
执行source /etc/profile //使环境变量设置生效
验证:
通过which命令测试JDK的安装是否成功:
which java
系统显示如下信息:
此时JDK配置成功
亦可编写一个小程序测试一下编写test.java,如下
public class test { public static void main(String args[]) { System.out.println(“JDK successed!”); } }
终端编译:
javac test.java java test
如果成功就没问题了。
三.Hadoop的安装配置
[以下修改步骤在master与slave上都需要做,其不同之处会给出说明]
1.将Hadoop解压放在用户主目录/root下
tar -xzvf hadoop-0.20.2.tar.gz mv hadoop.*** hadoop #为了以后使用该目录方便,将名称修改
2.在master结点上编辑/etc/profile文件,设置环境变量
a) 增加一行
export HADOOP_HOME=/root/hadoop
b) 修改一行
export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
c) 执行source /etc/profile,使之生效
3.修改/root/hadoop/conf/下的hadoop-env.sh配置文件,将增添一行:
export JAVA_HOME=/usr/java
4.修改masters和slaves配置文件,将之修改为
master节点的配置:
masters文件:
master
slaves文件:
master //加了以后,NameNode节点也就变成DataNode中的一员了 slave01 slave02
slave节点的配置(slave01,slave02):
masters文件:
master
slaves文件:
master //加了以后,NameNode节点也就变成DataNode中的一员了 slave01 slave02
注意:这里slaves文件的配置还有疑问,没有达成一致意见,不过这种方法可行。
4.修改core-site.xml配置文件,配置NameNode的IP和端口:
<configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/root/tmp/hadoop-${user.name}</value> </property> </configuration>
5.修改hdfs-sites.xml配置文件,配置数据备份数量
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration>
6.修改mapred-site.xml配置文件,配置JobTrackerr的IP和端口
<configuration> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> </configuration>
注意:这是NameNode(master)节点的设置,其他DataNode(slave)节点的设置也是这样,千万不要把core-site.xml配置文件和mapred-site.xml配置文件中的master改成DataNode节点各自的主机名,此处必须是NameNode节点的主机名,否则NameNode节点和他的DataNode节点就无法发完成通讯。
7.格式化NameNode节点(格式化NameNode节点是运行Hadoop之前的必须步骤,Hadoop安装完成之后再需要格式化NameNode节点需要注意的情况将在后文有介绍)
hadoop namenode -format
8.Hadoop的运行
start-all.sh
终端将显示类似如下信息:
在NameNode(master)上输入jps命令查看守护进程的启动情况:
六个守护进程必须都得起来才行,如果没有都起来那么要查看hadoop的配置文件,保证配置的正确,特别是路径正确。
而salve上只需启动三个进程即可:
9.Hadoop的停止
stop-all.sh
10.测试Hadoop
正常情况下执行如下命令查看HDFS文件系统结果类似于这样:
这是正常的情况,但有时会出现如下情况:
Configured Capacity: 0 (0 KB) Present Capacity: 0 (0 KB) DFS Remaining: 0 (0 KB) DFS Used: 0 (0 KB) DFS Used%: ?% Under replicated blocks: 0 Blocks with corrupt replicas: 0 Missing blocks: 0 ------------------------------------------------- DataNodes available: 0 (0 total, 0 dead)
这个错误在操作HDFS文件系统的时候常出现,错误主要是因为namenodeId不一致。
原因是每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了NameNode下的数据,但是没有清空DataNode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp下 的所有目录.
对于此问题的处理,又回到了Hadoop安装时需要格式化节点的地方了,为了清除此问题但同时还得保证NameNode节点和他的DataNode节点的连接通信正常需要进行如下操作(前提是NameNode和各个DataNode节点的各项设置都正确配置文件也没有问题)
a. 登录到各台服务器上(包括master和slave)
b. 执行rm -rf tmp //删除各台服务器主机上的tmp文件夹及其内容
c. mkdir tmp //新建tmp文件夹
d. 在master上执行
a) hadoop namenode -format
b) start-all.sh
c) jps
查看六个守护进程是不是都起来了,
再看看HDFS是不是恢复了hadoop dfsadmin -report
注意:以上所有步骤之前默认Hadoop已经安装好了并且停掉了。
其他可能出错的情况:有些操作不成功还有可能是防火墙的原因
Ubuntu下可以执行如下命令关闭防火墙:
ufw disable
CentOS下请参照博客:
http://blog.csdn.net/zjf280441589/article/details/38406025
下的步骤5.