阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS下Hadoop-2.2.0集群安装配置

153次阅读
没有评论

共计 6562 个字符,预计需要花费 17 分钟才能阅读完成。

对于一个刚开始学习 Spark 的人来说,当然首先需要把环境搭建好,再跑几个例子,目前比较流行的部署是 Spark On Yarn,作为新手,我觉得有必要走一遍 Hadoop 的集群安装配置,而不仅仅停留在本地 (local) 模式下学习,因为集群模式下跨多台机器,环境相对来说更复杂,许多在本地 (local) 模式下遇不到的问题在集群模式下往往出现,下面将结合实际详细介绍在 CentOS-6.x 系统上 hadoop-2.2.0 的集群安装(其他 Linux 发行版无太大差别),最后运行 WordCount 程序以验证 Hadoop 集群安装是否成功。

机器准备

假设集群中有三台机器,机器可以为三台物理机或虚拟机,保证三台机器可以互相通信,其中一台机器作为 master(运行 NameNode 和 ResourceManager),另外两台机器作为 slave 或 worker(运行 DataNode 和 NodeManager)。下面我准备的机器相关配置如下,注意每台机器要保证用户名一致。

主机名 用户名 IP 地址
master hadoop 192.168.100.10
slave1 hadoop 192.168.100.11
slave2 hadoop 192.168.100.12

工具准备

为了避免在三台机器中重复安装配置工作,我们可以只在 master 机器上做安装配置,然后直接将配置好的软件打包发到每台 slave 机器上解压即可,首先我们应配置 master 机器到其他机器 ssh 免密码登陆,这是所有后续安装工作的前提。

1. 配置 host

在 master 机器中配置 host,在 /etc/hosts 文件中添加以下配置:

192.168.100.10     master
192.168.100.11     slave1
192.168.100.12     slave2

2. 配置 master 免密码登录

首先运行如下命令生成公钥:

[hadoop@master ~]$ ssh-keygen -t  rsa

将公钥拷贝到每台机器中,包括本机,以使得 ssh localhost 免密码登录:

[hadoop@master ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoop@master
[hadoop@master ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoop@slave1
[hadoop@master ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub  hadoop@slave2

为了更好的管理集群,切换到 root 身份,重复上述 ssh 无密码设置过程,保证 root 身份也无能密码登录:

[root@master ~]$ su root
[root@master ~]$ ssh-keygen -t  rsa
[root@master ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub  root@master
[root@master ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub  root@slave1
[root@master ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub  root@slave2

完成上述操作后,切换回 hadoop 用户,现在 master 机器可以 ssh 免密码的登录集群中每台机器,下面我们开始现在 master 机器中开始安装配置 hadoop。

JDK 安装

从 Oracle 官网下载 jdk,放到 /home/hadoop 目录下(后续所有安装包默认安装在 /home/hadoop 目录下),我下载的版本为 jdk1.7.0_40,解压后设置 jdk 的环境变量,环境变量最好不要设置为全局的(在 /etc/profile 中),只设置当前用户的环境变量即可.

[hadoop@master ~]$ pwd
/home/hadoop
[hadoop@master ~]$ vim .bash_proflie
 # Java ENVIRONMENT
 export JAVA_HOME=$HOME/jdk1.7.0_40
 export PATH=$JAVA_HOME/bin:$PATH
 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[hadoop@master ~]$ source .bash_proflie

Hadoop 安装

从 Apache 官网下载 hadoop 发行版,放到 /home/hadoop 目录下,我下载的版本为 hadoop-2.2.0,解压软件包后,首先设置 hadoop 的环境变量。

[hadoop@master ~]$ vim .bash_proflie
 # HADOOP ENVIRONMENT
 export HADOOP_HOME=$HOME/hadoop-2.2.0
 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 HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
 export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
 export HADOOP_LOG_DIR=$HADOOP_HOME/logs
[hadoop@master ~]$ source .bash_proflie

下面我们开始配置 hadoop,进入 hadoop 的配置目录,首先我们先在 hadoop-env.shyarn-env.sh中设置好 jdk 的路径,然后开始修改 hadoop 相关配置文件。

配置 hdfs

在配置文件 hdfs-site.xml 中添加以下内容。

1
2
3
4
5
6

7

8
9
10
11
12
13
14

15
16
17
<configuration>
<property>
<!-- hdfs 地址 -->
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<!-- hdfs 中每一个 block 所存的份数,我这里设置 1 份,默认是 3 份 -->
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<!-- 开启 hdfs web 访问 -->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

配置 yarn

为了能够运行 MapReduce 程序,需要让各个 NodeManager 在启动时加载 shuffle server,Reduce Task 通过该 server 从各个 NodeManager 上远程拷贝 Map Task 产生的中间结果。在配置文件 yarn-site.xml 中添加以下内容。

1
2
3
4
5
6

7

8
9
10
11
12
13
14
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<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>
</configuration>

配置 MapReduce 计算框架

为了利用 MapReduce 中的 WordCount 验证 hadoop 集群是否安装成功,需要为 hadoop 配置 MapReduce 计算框架。在配置文件 mapred-site.xml 中添加以下内容。

1
2
3
4
5
6

7
<configuration>
<property>
<!-- 指定 yarn 为 MapReduce 的资源调度平台 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

配置 slaves

在配置文件 slaves 中添加以下内容。

slave1
slave2

到这里为止,我们已经完成 master 机器上 hadoop 的配置,更多关于 hadoop 的配置参数说明请查看官方文档)左侧的 Configuration 一栏,下面我们要将 master 机器上所有的安装配置操作同步到集群中所有节点上,为了避免挨个节点的重复劳动,我们前面也设置好了 ssh 无密码登录,现在我们简单写几个脚本,完成同步安装操作。

同步配置

首先同步 /etc/hosts 文件,这个需要切换到 root 用户下来完成,运行如下脚本:

1
2
3
4
5
6

7

8
#! /bin/bash
for SLAVE in `cat /home/hadoop/hadoop-2.2.0/etc/hadoop/slaves`; do
if test `expr match $SLAVE "*slave*"` -eq 0; then
rsync /etc/hosts $SLAVE:/etc/hosts
#清空防火墙配置
iptables -F
fi
done

其中 rsync 为文件同步命令,每次配置作修改后可以通过 rsync 命令进行文件的同步操作。完成上述操作后,切换回 hadoop 用户下,运行如下脚本,完成 hadoop 的同步安装:

1
2
3
4
5
6

7

8
9
10
11
12
13
14

15
16
17

18
19
20
#! /bin/bash

for SLAVE in `cat $HADOOP_CONF_DIR/slaves`; do
if test `expr match $SLAVE "*slave*"` -eq 0; then
#拷贝 jdk
scp /home/hadoop/jdk-7u40-linux-i586.gz hadoop@$SLAVE:/home/hadoop/
#拷贝 hadoop
scp /home/hadoop/hadoop-2.2.0.tar.gz hadoop@$SLAVE:/home/hadoop/
#拷贝环境变量配置
scp /home/hadoop/.bash_profile hadoop@$SLAVE:/home/hadoop/

echo "set up ${SLAVE}..."
ssh $SLAVE "cd /home/hadoop;
tar zxvf jdk-7u40-linux-i586.gz;
tar zxvf hadoop-2.2.0.tar.gz;
source /home/hadoop/.bash_profile;
exit"
rsync -r /home/hadoop/hadoop-2.2.0/etc/hadoop $SLAVE:/home/hadoop/hadoop-2.2.0/etc/hadoop
fi
done

每次修改 hadoop 配置后,运行如下脚本同步到集群所有节点:

1
2
3
4
5
6
#! /bin/bash
for SLAVE in `cat $HADOOP_CONF_DIR/slaves`; do
if test `expr match $SLAVE "*slave*"` -eq 0; then
rsync -r /home/hadoop/hadoop-2.2.0/etc/hadoop $SLAVE:/home/hadoop/hadoop-2.2.0/etc/hadoop
fi
done

到这里,hadoop 的集群安装就完成了,我们启动 hadoop 环境,通过 WordCount 来测试一下集群,一次运行如下命令以启动 hdfs 和 yarn。

WordCount 测试

在 master 集群上启动 hdfs 和 yarn 后台进程:

[hadoop@master ~]$ $HADOOP_HOME/bin/hadoop namenode -format
[hadoop@master ~]$ $HADOOP_HOME/sbin/start-dfs.sh
[hadoop@master ~]$ $HADOOP_HOME/sbin/start-yarn.sh

启动后可以通过 http://master:50070 地址访问 hdfs,通过 http://master:8088 地址访问 yarn,如果不能访问,请检查 master 机器上的 iptables 配置,将相关配置清除。另外,在启动集群过程中可能会遇到 DataNode、NodeManager 启动不起来的现象,这也可能是 slave 机器上的防火墙配置导致集群间 RPC 通信失败的缘故,比较暴力的做法是把集群中所有机器的防火墙服务直接给停掉,相关 iptables 防火墙操作请自行 google,下面我们运行 hadoop 自带的 WordCount 实例来验证 hadoop 是否能正常工作。

首先准备输入文件,上传到 hdfs:

[hadoop@master ~]$ mkdir input
[hadoop@master ~]$ sh -c 'echo"hello hadoop"> input/f1.txt'
[hadoop@master ~]$ sh -c 'echo"hello java"> input/f2.txt'
[hadoop@master ~]$ sh -c 'echo"hello world"> input/f3.txt'
[hadoop@master ~]$ $HADOOP_HOME/bin/hdfs -mkdir /input
[hadoop@master ~]$ $HADOOP_HOME/bin/hdfs -put input/* /input/

运行 WordCount Mapreduce 实例:

[hadoop@master ~]$ $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-examples-2.2.0.jar wordcount /input /output

作业提交后,可以访问 web ui 页面,观察 MapReduce 作业的运行情况。

下面关于 Hadoop 的文章您也可能喜欢,不妨看看:

集群安装完毕,该如何测试和使用集群 -Hadoop 单机(伪分布)http://www.linuxidc.com/Linux/2016-06/132220.htm

Ubuntu14.04 下 Hadoop2.4.1 单机 / 伪分布式安装配置教程  http://www.linuxidc.com/Linux/2015-02/113487.htm

CentOS 安装和配置 Hadoop2.2.0  http://www.linuxidc.com/Linux/2014-01/94685.htm

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/132559.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6562字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中