安装步骤

  1. 集群规划
  2. 前置条件
  3. 集群搭建
  4. 提交服务到集群

集群规划

目标搭建一个 3 节点的 Hadoop 集群。对所有角色尽量做到均衡分配。对集群服务规划如下:

hadoop001(192.168.10.99) hadoop002(192.168.10.100) hadoop003(192.168.10.101)
HDFS namenode、datenode datenode secondarynamenode、
namenode
YARN nodemanager resourcemanager、nodemanager nodemanager

前置条件

安装JDK 配置主机映射 配置SSH免密登录 配置时间同步

安装JDK

请参照以往文章:安装JDK-Centos7

配置主机映射

  1. vi /etc/hosts #修改映射文件-每个节点上设置
  2. 192.168.10.99 hadoop001
  3. 192.168.10.100 hadoop002
  4. 192.168.10.101 hadoop003
  5. wq #保存文件
  6. reboot #重启生效

配置SSH免密登录

  1. ssh-keygen -t rsa #生成公钥和私钥 按提示输入enter
  2. ssh-copy-id hadoop001 #公钥复制目标服务器
  3. ssh-copy-id hadoop002
  4. ssh-copy-id hadoop003

.ssh文件下文件功能解释:
known_hosts 记录ssh访问过计算机的公钥
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的免密登录服务器公钥
注:如配置映射时对应关系错误,可能导致ssh-copye-id 处操作失败。更改为正确的ip和hostname对应即可。

配置时间同步

如已经安装ntp,即进行修改配置文件即可。

  1. rpm -qa|grep ntp
  1. yum install ntp
  1. vi /etc/ntp.conf
  2. restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap 如已安装,即解开此条注释
  3. #server 0.centos.pool.ntp.org iburst #注释掉这四条
  4. #server 1.centos.pool.ntp.org iburst
  5. #server 2.centos.pool.ntp.org iburst
  6. #server 3.centos.pool.ntp.org iburst
  7. server 127.127.1.0 #添加一个默认的内部时钟数据,使它为局域网用户提供服务
  8. fudge 127.127.1.0 stratum 10
  1. vi /etc/sysconfig/ntpd
  2. SYNC_HWCLOCK=yes #添加内容:让硬件时间与系统时间一起同步
  1. service ntpd restart
  2. chkconfig ntpd on #ntp开机自启动
  1. crontab -e
  2. */10 * * * * /usr/sbin/ntpdate hadoop001

集群搭建

文件解压-编辑环境变量

  1. tar -zxvf hadoop-2.10.1.tar.gz
  2. vi /etc/profile
  3. export HADOOP_HOME=/root/hadoop-2.10.1 #增加内容
  4. export PATH=${HADOOP_HOME}/bin:$PATH
  5. :wq
  6. source /etc/profile #执行 `source` 命令,使得配置立即生效:

修改配置

进入 ${HADOOP_HOME}/etc/hadoop 目录下,修改配置文件。各个配置文件内容如下:

hadoop-env.sh

  1. vi hadoop-env.sh
  2. export JAVA_HOME=/root/jdk1.8.0_321/ #增加内容

core-site.xml

  1. <configuration>
  2. <property>
  3. <!--指定 namenode hdfs 协议文件系统的通信地址-->
  4. <name>fs.defaultFS</name>
  5. <value>hdfs://hadoop001:8020</value>
  6. </property>
  7. <property>
  8. <!--指定 hadoop 集群存储临时文件的目录-->
  9. <name>hadoop.tmp.dir</name>
  10. <value>/home/hadoop/tmp</value>
  11. </property>
  12. </configuration>

hdfs-site.xml

  1. <property>
  2. <!--指定HDFS存储内容的副本个数-->
  3. <name>dfs.replication</name>
  4. <value>3</value>
  5. </property>
  6. <property>
  7. <!--配置secondarynamenode-->
  8. <name>dfs.namenode.secondary.http-address</name>
  9. <value>hadoop003:50090</value>
  10. </property>
  11. </configuration>

yarn-site.xml

  1. <configuration>
  2. <property>
  3. <!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
  4. <name>yarn.nodemanager.aux-services</name>
  5. <value>mapreduce_shuffle</value>
  6. </property>
  7. <property>
  8. <!--resourcemanager 的主机名-->
  9. <name>yarn.resourcemanager.hostname</name>
  10. <value>hadoop002</value>
  11. </property>
  12. </configuration>

mapred-site.xml

  1. <configuration>
  2. <property>
  3. <!--指定 mapreduce 作业运行在 yarn 上-->
  4. <name>mapreduce.framework.name</name>
  5. <value>yarn</value>
  6. </property>
  7. </configuration>

slaves

slaves文件用来配置hadoop分布式集群中各台从节点服务器的角色。
将3台节点服务器全部指定为从节点服务器

  1. vi /root/hadoop-2.10.1/etc/hadoop/slaves
  2. hadoop001
  3. hadoop002
  4. hadoop003

关闭防火墙

不关闭防火墙可能导致无法访问 Hadoop 的 Web UI 界面:

  1. #查看防火墙状态
  2. sudo firewall-cmd --state
  3. #关闭防火墙:
  4. sudo systemctl stop firewalld.service

初始化

Hadoop001 上执行 namenode 初始化命令:

  1. hdfs namenode -format

分发程序

将 Hadoop 安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下 Hadoop 的环境变量。

  1. scp -r /root/hadoop-2.10.1/ hadoop002:/root/
  2. scp -r /root/hadoop-2.10.1/ hadoop003:/root/

启动集群

进入到 节点 的 ${HADOOP_HOME}/sbin 目录下,启动 Hadoop。此时 hadoop002hadoop003 上的相关服务也会被启动:

  1. # 启动dfs服务
  2. start-dfs.sh
  1. # 启动yarn服务
  2. start-yarn.sh
  1. jps
  2. #查看服务启动情况

查看WEB页面

http://hadoop001:50070
http://hadoop002:8088

提交服务到集群

这里以提交 Hadoop 内置的计算 Pi 的示例程序为例,在任何一个节点上执行都可以,命令如下

  1. hadoop jar /root/hadoop-2.10.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar pi 3 3

显示结果如下。成功提交。
image.png
注:如提示没有hadoop命令。则需要配置环境变量即可。
如提交失败,则可能是集群的防火墙导致,可尝试关闭防火墙。service firewalld stop。