您的位置:首页 > 运维架构

hadoop完全分布式集群搭建

2015-04-24 10:11 429 查看
算起来接触hadoop集群也有一段时间了,只是以前硬件条件有限,玩儿都是伪分布式。最近有了新服务器,应项目需求,完成了hadoop完全分布式的搭建,以下是具体过程。这是个人实践操作后的记录,欢迎各位阁下不吝赐教。

好了不废话了,赶紧进入正题,过程有点长。



硬件条件:多台相同linux系统主机,要求所有机器在同一网段。主机分别命名为quad1,quad2,…quadn,其中quad1作为主节点,其余的作为从节点。为了实验描写方便,本次实验使用4个结点,quad201~quad204。(如果阁下有更多机器,集群搭建方法也是一样,只是多了几个scp命令而已)

相关软件及其版本:

Linux系统:CentOS release 6.5 final x86-64

jdk:jdk1.7.0_71
hadoop: Yarn的hadoop2.4.1

集群框架如下:



详细步骤:

一.建立hosts文件。其作用就是将主机ip映射主机名,方便主节点节点快速查询访问。

编辑/etc/hosts文件,将以下代码添加进去:

172.20.36.244 quad201

192.168.2.2 quad202

192.168.2.3 quad203

192.168.2.4 quad204

备注:172.20网段是外部可访问IP,192.168网段只能是内部访问IP,外部主机可通过登录quad201进入访问另外三个节点。

然后切换到root用户下,永久性关闭所有节点的防火墙(四个节点都得操作):

[root@quad201 ~]# service iptables stop
[root@quad201 ~]# chkconfig iptables off

二.建立hadoop账户。

为hadoop集群专门设置一个用户组及用户。

root用户下输入以下命令:

[root@quad201 home]# groupadd hadoop

[root@quad201 home]# useradd –s /bin/bash–d /home/hadoop –m hadoop –g hadoop –G root

[root@quad201 home]# passwd Hadoop

然后切换到hadoop用户下

[hadoop@quad201~]

三.免密码连接SSH配置(很重要,细节需注意)在每个节点分产生公私密钥。

一)首先在主节点运行命令:

[hadoop@quad201~]$ ssh-keygen –t dsa –P ‘’–f ~/.ssh/id_dsa

然后会在hadoop主目录下生成.ssh文件夹。将~/.ssh下的id_dsa.pub复制成authorized_keys

[hadoop@quad201~]$ cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys

之后修改权限(很重要,否则配置会失败):

[hadoop@quad201~]$ chmod 700 .ssh

[hadoop@quad201~]$ chmod 600 .ssh/authorized_keys

接下来单机回环测试下ssh免密码登录是否设置成功

[hadoop@quad201~]$ ssh localhost

第一次登录要求输入密码,若配置成功,则以后连接都是不需要密码的。然后注销登录。

二)在其余每个子节点上面做与一)相同的操作,若所有的单机回环连接测试均成功,表示每个节点的公私密钥生成正确,接下来配置从主节点免密码登录子节点。

三)将主节点的公钥文件追加到每个子节点的authorized_keys文件。

[hadoop@quad202~]$ scp
hadoop@quad201:~/.ssh/id_dsa.pub~/.ssh/master_dsa.pub

[hadoop@quad202~]$ cat ~/.ssh/master_dsa.pub>> .ssh/authorized_keys

然后去quad201连接quad202:

[hadoop@quad201~]$ ssh quad202

第一次连接需要密码,以后都不要,否则配置未成功。

接下来在quad203和quad204以及quad201上做相同的操作。

如果此时已能从quad201 ssh 连接上集群中任何一个节点,表示ssh免密码登录配置成功。

四、下载并安装hadoop安装包,本次实验使用的是基于Yarn的hadoop2.4.1版本

在quad201主节点建立一个开发用户和用户组dev。

root用户下输入以下命令:

[root@quad201 home]# groupadd dev

[root@quad201 home]# useradd –s /bin/bash–d /home/dev –m dev –g dev

[root@quad201 home]# passwd dev

然后切换到dev用户下

[dev@quad201~]$

在/home目录下:修改dev用户文件和文件夹权限,使hadoop用户对其有读取和执行权限。

[dev@quad201 home]$ chmod – R o+r dev

[dev@quad201 home]$ chmod – R o+x dev

五、安装配置jdk.将jdk.1.7.0_71放入/home/dev/toochain目录下,赋予其他用户读取和执行权限(过程省略)

六、将hadoop安装包解压后放入/home/dev/platforms/目录下,设置hadoop用户的环境变量.

在hadoop主目录下,添加一个.hadoop文件:

[hadoop@quad201 ~]$ vim ~/.hadoop

将以下内容添加到.hadoop中:

export HADOOP_HOME=/home/dev/platforms/hadoop-2.4.1

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export HADOOP_PID_DIR=/home/hadoop/pids

export HADOOP_USER_NAME=hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

export JAVA_HOME=/home/dev/toolchain/jdk1.7.0_71

export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

保存后,退出,修改~/.bashrc:

末尾添加一行:

source ~/.hadoop

保存后使其生效。

[hadoop@quad201 ~]$ source ~/.bashrc

最后通过java –version查看版本是否是刚刚安装的。

过程四到六在每个子节点都要做一遍。目前为止,准备工作已做好。

七、配置hadoop

主要是修改/home/dev/platforms/hadoop-2.4.1/etc/hadoop目录下的几个配置文件。先在每个节点的根目录下新建文件夹:/hd用于存放hadoop的data和namenode,然后在主节点上进行以下操作:

1. masters。添加主节点主机名:quad201

2. slaves。 添加从节点主机名:

quad202

quad203

quad204

3. hadoop-env.sh。添加JAVA_HOME变量和HADOOP_HOME:

exportJAVA_HOME=/home/dev/toolchain/jdk1.7.0_71

exportHADOOP_HOME=/home/dev/platforms/hadoop-2.4.1

4. core-site.xml,配置分布式集群的属性,注意hdfs的IP要写成主节点的对外IP,即172.20.36.244,如下:



5.hdfs-site.xml。 请添加以下属性:





6..mapred-site.xml。注意job.tracker的ip写成主节点对外IP:172.20.36.244添加一下属性:



7. yarn-env.sh。 设置java:

JAVA=$JAVA_HOME/bin/java

JAVA_HEAP_MAX=-Xmx2038m

8. yarn-site.xml。所有的管理节点的ip都得写成主节点对外IP:172.20.36.244。如下:



八、在dev用户下,将主节点上/home/dev/hadoop-2.4.1目录拷贝到所有子节点的/home/dev/。

在quad202:

[dev@quad202 ~]$ scp –rdev@quad201:/home/dev/* ~/home/dev/

输入密码,待拷贝成功,切换到quad203和quad204做同样的操作。

这样在所有节点上就已经配置好hadoop环境了。

九、启动hadoop集群。

1. 格式化namenode。在主节点quad201上完成:

[hadoop@quad201 ~]$ hadoop namenode –format

只要运行结果出现successfully formatted就表示格式化成功。

2、启动。

[hadoop@quad201 ~]$ start-dfs.sh

[hadoop@quad201 ~]$ start-yarn.sh

等待所有节点上的服务都起来,如果有报错说某些文件或文件夹的权限不够,那么得修改相应的权限,然后再重新格式化后启动,若没有报错信息,那么说明启动成功。若要停止所有进程,执行stop-dfs.sh 和stop-yarn.sh即可

3.用jps查看后台进程是否启动成功。

[hadoop@quad201 ~]$ jps



在子节点上:运行jps,若出现以下进程,则表示hadoop已成功启动。



4. 在主节点,运行命令:hdfs dfsadmin -report

如果可用的datanode与slaves的机器数目一样,说明真正启动起来了。

然后打开网页: 172.20.36.244:50032 查看节点健康状态





打开172.20.36:18088 查看程序执行情况:



以上是整个安装过程,下面对于遇到的问题做一个总结,希望与大家共勉:

1、文件权限问题。对于hadoop用户,要读取dev用户下的文件,因为必须它读取和执行权限。方法是,在dev用户下,执行chmod -R o+r dev主目录。

2、配置ssh免密码登录时,要注意相关文件的权限。

3、在配置hadoop的时候,所有涉及主节点路径的地方,不要用主节点的主机名,应该指明其IP地址(对外IP),如果只用主机名quad201,会由于quad201有两个IP地址,而出现在hadoop已经看似正常启动的情况下,slaves节点无法访问主节点。

4、防火墙问题。之前一直是用serviceiptables stop命令去关闭防火墙,但是这种方法是临时性的,如果重启系统,防火墙就会再次开启,以至于启动hadop的时候,数据节点不能正确启动(表现为:用jps查看,datanode进程正常,但是利用hdfs dfsadmin -report命令查看数据节点的健康状态时,发现数据节点的状态是dead,可以利用的磁盘空间也为0)。所以需要永久性关闭防火墙:执行 service iptables stop命令后,再执行chkconfig
iptabls off命令即可。

5、hadoop集群的pid不一致问题,如果不可避免得要重启hadoop集群,那么需要将所有节点上/hd文件夹下的三个文件夹(data,name,tmp)清空,不然namenode无法启动,但是这样做会丢失之前的所有数据,所以应该不要把pid的存放在tmp中,这样如果需要重启hadoop,只需根据实际需要启动相应的进程即可,而hadoop的pid去保持不变,历史data也不会丢失。

6、在hadoop启动之后,除了使用jps查看进程是否都正常启动之外,还应该查看下每个节点的健康状态,也可以使用hadoopfs -put命名测试数据节点是否能正常工作,如果出现任何异常错误,就去查看日志文件,然后针对性解决问题。

结语:hadoop完全分布式搭建与伪分布式在很多细节处理上很不相同,主要是节点之间的通信问题。后序的集群学习还得多用多积累经验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: