共计 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.sh
和yarn-env.sh
中设置好 jdk 的路径,然后开始修改 hadoop 相关配置文件。
配置 hdfs
在配置文件 hdfs-site.xml
中添加以下内容。
|
|
配置 yarn
为了能够运行 MapReduce 程序,需要让各个 NodeManager 在启动时加载 shuffle server,Reduce Task 通过该 server 从各个 NodeManager 上远程拷贝 Map Task 产生的中间结果。在配置文件 yarn-site.xml
中添加以下内容。
|
|
配置 MapReduce 计算框架
为了利用 MapReduce 中的 WordCount 验证 hadoop 集群是否安装成功,需要为 hadoop 配置 MapReduce 计算框架。在配置文件 mapred-site.xml
中添加以下内容。
|
|
配置 slaves
在配置文件 slaves
中添加以下内容。
slave1
slave2
到这里为止,我们已经完成 master 机器上 hadoop 的配置,更多关于 hadoop 的配置参数说明请查看官方文档)左侧的 Configuration 一栏,下面我们要将 master 机器上所有的安装配置操作同步到集群中所有节点上,为了避免挨个节点的重复劳动,我们前面也设置好了 ssh 无密码登录,现在我们简单写几个脚本,完成同步安装操作。
同步配置
首先同步 /etc/hosts 文件,这个需要切换到 root 用户下来完成,运行如下脚本:
|
|
其中 rsync 为文件同步命令,每次配置作修改后可以通过 rsync 命令进行文件的同步操作。完成上述操作后,切换回 hadoop 用户下,运行如下脚本,完成 hadoop 的同步安装:
|
|
每次修改 hadoop 配置后,运行如下脚本同步到集群所有节点:
|
|
到这里,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