Hadoop学习笔记_8_实施Hadoop集群,hadoop_8


实施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的安装配置

[以下修改步骤在masterslave上都需要做,其不同之处会给出说明]

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.修改mastersslaves配置文件,将之修改为

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配置文件,配置JobTrackerrIP和端口

<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. 登录到各台服务器上(包括masterslave)

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.


hadoop集群配置

你的配置文件mapred-site.xml有问题,估计是哪个配置项写错了,是否可以将此文件内容贴出来看看,最简单的情况下mapred-site.xml的配置如下,一个自定义选项即可,以下是伪分布式或者单机部署配置,分布式将<value>修改为你的jobtracker节点即可。
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
 

hadoop 集群是否要做到相互通信

肯定的了. SSH通信是一种,其它的还有heartbeat等。主从节点之间要通信,从节点之间也应该有通信(文件传输),方式我猜应该是socket之类的。我也是半瓶醋,呵呵。
 

相关内容