您当前的位置:首页 > 计算机 > 云技术 > 大数据

Hadoop 集群搭建详细步骤 v2.6.0

时间:12-14来源:作者:点击数:11

本文记录在3台物理机上搭建 Hadoop 2.6.0 的详细步骤及碰到的问题解决。默认使用 root 账号操作,实际中建议使用专用的hadoop用户账号。

1. 环境

机器: 物理机 3 台,ip 分别为192.168.1.130、192.168.1.132、192.168.1.134

操作系统: CentOS 6.6

Java: 1.7

Hadoop: 2.6.0

请确保 JDK 已安装,使用 java -version 确认。

hosts 配置

配置主机 hosts 文件:

  • vim /etc/hosts
  • 192.168.1.130 master
  • 192.168.1.132 slave1
  • 192.168.1.134 slave2

ssh 配置

master 上的 namenode 需要无密码 ssh 访问两台 salve,一次需要配置无密码 ssh。

步骤如下:

在 master 上,使用下面命令生成密钥对:

  • ssh-keygen -t rsa

-t 参数表示类型,这里选择 rsa。选择保存位置的时候直接回车,使用默认的 /root/.ssh/id_rsa。提示输入密码的时候,直接回车。如下图:

上述命令将在 /root/.ssh 目录下生成公钥文件 id_rsa.pub。将此文件拷贝到 .ssh 目录下的 authorized_keys:

  • cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

ssh登录本机,确保能够免密码登录:

然后将公钥复制到两台 slave:

  • ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.132
  • ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.134

ssh-copy-id 把公钥分发即追加到远程主机的 .ssh/authorized_key 上,并确保目录及文件有对应的权限。确保可以从 master 免密码登录到 slave1 和 slave2:

配置文件目录

在 master 常见 name,data,ymp 分别用于保存 HDFS 的 namenode 文件,数据及临时文件:

  • mkdir /home/data/hdfs
  • cd /home/data/hdfs
  • mkdir name
  • mkdir data
  • mkdir tmp

然后将 hdfs 文件拷贝到两台 slave 对应的位置:

  • scp -r hdfs/ root@192.168.1.132:/home/data/hdfs
  • scp -r hdfs/ root@192.168.1.134:/home/data/hdfs

2. 安装及配置

下载 hadoop 2.6

  • cd /home/soft/
  • mkdir hadoop
  • cd hadoop
  • wget http://apache.fayea.com/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz

解压到home目录下:

  • tar zxvf hadoop-2.6.0.tar.gz -C /home/

配置 Hadoop 集群:

Hadoop 的配置文件位于安装目录下的 etc/hadoop 文件。

配置 core-site.xml

  • vim /home/hadoop-2.6.0/etc/hadoop/core-site.xml
  • <configuration>
  • <property>
  • <name>hadoop.tmp.dir</name>
  • <value>file:/home/data/hdfs/tmp</value>
  • <description>A base for other temporary directories.</description>
  • </property>
  • <property>
  • <name>io.file.buffer.size</name>
  • <value>131072</value>
  • </property>
  • <property>
  • <name>fs.default.name</name>
  • <value>hdfs://master:9000</value>
  • </property>
  • <property>
  • <name>hadoop.proxyuser.root.hosts</name>
  • <value>*</value>
  • </property>
  • <property>
  • <name>hadoop.proxyuser.root.groups</name>
  • <value>*</value>
  • </property>
  • </configuration>

配置 hdfs-site.xml

基本配置包括副本数量,数据存放目录等。

  • vim /home/hadoop-2.6.0/etc/hadoop/hdfs-site.xml
  • <configuration>
  • <property>
  • <name>dfs.replication</name>
  • <value>2</value>
  • </property>
  • <property>
  • <name>dfs.namenode.name.dir</name>
  • <value>file:/home/data/hdfs/name</value>
  • <final>true</final>
  • </property>
  • <property>
  • <name>dfs.datanode.data.dir</name>
  • <value>file:/home/data/hdfs/data</value>
  • <final>true</final>
  • </property>
  • <property>
  • <name>dfs.namenode.secondary.http-address</name>
  • <value>master:9001</value>
  • </property>
  • <property>
  • <name>dfs.webhdfs.enabled</name>
  • <value>true</value>
  • </property>
  • <property>
  • <name>dfs.permissions</name>
  • <value>false</value>
  • </property>
  • </configuration>

配置 yarn-site.xml

  • vim /home/hadoop-2.6.0/etc/hadoop/yarn-site.xml
  • <configuration>
  • <!-- Site specific YARN configuration properties -->
  • <property>
  • <name>yarn.resourcemanager.hostname</name>
  • <value>master</value>
  • </property>
  • <property>
  • <name>yarn.resourcemanager.address</name>
  • <value>master:18040</value>
  • </property>
  • <property>
  • <name>yarn.resourcemanager.scheduler.address</name>
  • <value>master:18030</value>
  • <property>
  • <name>yarn.resourcemanager.webapp.address</name>
  • <value>master:18088</value>
  • </property>
  • <property>
  • <name>yarn.resourcemanager.resource-tracker.address</name>
  • <value>master:18025</value>
  • <property>
  • <name>yarn.resourcemanager.admin.address</name>
  • <value>master:18141</value>
  • </property>
  • <property>
  • <name>yarn.nodemanager.aux-services</name>
  • <value>mapreduce_shuffle</value>
  • <property>
  • <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  • <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  • </property>
  • </configuration>

配置 mapred-site.xml

  • vim /home/hadoop-2.6.0/etc/hadoop/mapred-site.xml
  • <configuration>
  • <property>
  • <name>mapreduce.framework.name</name>
  • <value>yarn</value>
  • </property>
  • </configuration>

配置 salve

  • vim /home/hadoop-2.6.0/etc/hadoop/slaves
  • slave1
  • slave2

将 hadoop 整个文件 copy 到两台 slave:

  • cd /home
  • scp -r hadoop-2.6.0 root@slave1:/home/
  • scp -r hadoop-2.6.0 root@slave2:/home/

配置 path

  • vim /etc/profile
  • export HADOOP_HOME=/home/hadoop-2.6.0
  • export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • . /etc/profile

这样在master机器上的任意路径都可以运行 hadoop 命令。

3. 运行 Hadoop

Hadoop 提供了很丰富的脚本供使用,主要在安装目录中的bin及sbin。

启动 namenode

启动之前需要格式化一下,在 master 机器上执行下面的命令,格式化 HDFS 文件系统:

  • hadoop namenode -format

格式化成功,现在启动 namenode 守护进程:

  • hadoop-daemon.sh start namenode

查看 hadoop 进程:

  • ps -ef | grep hadoop

可以看到已经有 hadoop 进程启动:

使用 jps 命令查看 JVM 进程:

  • jps

可以看到 namenode 成功启动:

如果提示你找不到 jps,请确保你安装了 JDK 而不是 jre 并将 jdk/bin 设置到 PATH 环境变量中。

启动 datanode

启动 datanode 命令如下:

  • hadoop-daemons.sh start datanode

该命令会远程启动 slave 上的 datanode 守护进程。但是启动出现错误:

echo $JAVA_HOME 看到已经配置了,查明是因为 hadoop-env.sh 没有配置 JAVA_HOME,修改配置如下(集群其他节点需同步修改):

  • vim /home/hadoop-2.6.0/etc/hadoop/hadoop-env.sh

重新启动 datanode:

在 slave 上运行 jps,发现没有 datanode,查看日志:

  • vim /home/hadoop-2.6.0/logs/hadoop-root-datanode-brandon132.out

提示 mapred-site.xml 配置有问题,查看果然如此:

修正后重新启动 datanode:

两台 slave 运行 jps 都证明 datanode 启动成功:

上述两个步骤(启动 namenode 和 datanode 可以合并为一个命令)

  • start-dfs.sh

该脚本位于 Hadoop 安装目录中 bin 目录下,我们已经加入到 PATH 环境变量中。

启动 YARN

  • yarn-daemon.sh start resourcemanager

启动 nodemanager:

  • yarm-daemon.sg start nodemanager

上述两步一样可以合并为:

  • start-yarn.sh

在 master 上运行 jps,ResourceManager 已启动:

在 salve 上运行 jps,发现只有 datanode 而没有 nodemanager:

查看 log 日志:

发现 shuffle 这个 aux-serviece 配置非法,经查证,新版本中 mapreduce.shuffle 需改为 mapreduce-shuffle,即在 mapred-site.xml 中配置修改如下(集群其他节点需同步修改),原来:

  • <property>
  • <name>yarn.nodemanager.aux-services</name>
  • <value>mapreduce.shuffle</value>
  • </property>

改为下划线:

  • <property>
  • <name>yarn.nodemanager.aux-services</name>
  • <value>mapreduce_shuffle</value>
  • </property>

修改后重启,成功:

查看 HDFS 管理界面:

访问 YARN 管理界面:

4. 运行实例

搭建完成之后,我们运行一个 Mapreduce 作业感受一下:

  • hadoop jar /home/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 5 10

启动之后发现总是卡住:

管理界面的状态也一直处于 Accepted,没有任何变化:

折腾了很久,总算找到原因,是因为 hostname 配置与 /etc/hosts 中的配置不一样,/etc/hosts 中 master 的配置如下:

  • 192.168.1.130 master

master 机器上使用 hostname 查,显示为 brandon130。先使用 hostname 命令临时修改一下主机名:

  • hostname master

其他两台 slave 对应修改。

然后重新提交pi运算作业,总算成功:

从进度日志可以看到 map 和 reduce 作业是可以一定程度上并行的:

查看 YARN 管理界面:

大功告成。

5. 常见问题及其他

1) 防火墙

请确保集群机器的防火墙都关闭,否则可能会出现各种莫名的问题,需要你自己去看日志排查原因。关闭防火墙方法如下:

临时生效,重启后复原:

  • service iptables start // 开启
  • service iptables stop // 关闭

永久性生效,重启后不会复原

  • chkconfig iptables on // 开启
  • chkconfig iptables off // 关闭

2) 主机名配置

前面提到的主机名修改是临时的,重启机器之后会恢复原来的样子,要永久修改主机名,需要对应修改 /etc/sysconfig/network 文件,如下图,将 HOSTNAME 改成对应的 master,其他两台对应 slave1,slave2。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐