Hadoop集群搭建
- 搭建所使用的环境和软件:
- 搭建一台虚拟机
- 创建虚拟机
- 为虚拟机安装操作系统
- 设置虚拟机ip为静态ip,以及修改主机名字
- 用Xshell连接
- 关闭防火墙
- 安装JDK
- 安装hadoop
- Hadoop集群的配置
- 启动HDFS
- 配置集群
- 启动NameNode,DataNode
- 启动YARN
- 配置集群
- 启动ResourceManager,NodeManager
- 配置历史服务器
- 配置日志的聚集
- 搭建3台虚拟机的集群
- 集群部署规划
- 准备三台虚拟机
- 克隆虚拟机
- 对克隆出的虚拟机ip分配和hostname修改
- 编写xsync集群分发脚本
- 集群配置
- 配置集群
- SSH无密登录配置
- 群起集群
- 原文链接
搭建所使用的环境和软件:
- Xshell
- hadoop-2.10.1.tar.gz
- jdk-8u162-linux-x64.tar.gz
- CentOS-7-x86_64-DVD-2009.iso
- VMware-workstation-full-15.5.6-16341506 (1).exe
网盘链接 link ----------------- 提取码:whs9
搭建一台虚拟机
创建虚拟机
- 进入VMware----点击文件----新建虚拟机
为虚拟机安装操作系统
- 出现 CentOS Linux 7 安装屏幕,按回车(或等待 1 分钟)继续。
- 按 Esc 键跳过安装源检查,或等待安装程序对系统自检(等待时间较长)。
- 选择语言
- 选择安装源(默认)。点击“软件选择”,选择软件。
- 使用无图形界面:选择安装计算节点,然后选里面的:调试工具,性能工具,开发工具,就够了
- 点击”安装位置”,选择自动分区,单击左上角”完成”。
- 点击开始安装,然后设置root用户和密码
- 用root用户进入终端,输入以下命令,同步时间(有ip地址才可以同步网络时间)
- 安装ntpdate工具
yum -y install ntp ntpdate
- 设置系统时间与网络时间同步
ntpdate cn.pool.ntp.org
- 将系统时间写入硬件时间
hwclock --systohc
- 检查时间是否同步
date
设置虚拟机ip为静态ip,以及修改主机名字
- 进入虚拟网络编辑器
- 查看NAT设置,查看网关
- 根据自己的子网Ip,从这儿规划出4个IP,作为其他虚拟机静态Ip。
192.168.159.100 ------- hadoop-00
192.168.159.110 ------- hadoop-01
192.168.159.120 ------- hadoop-02
192.168.159.130 ------- hadoop-03 - 修改主机名
vim/etc/hostname
- 重启以下虚拟机
- 修改/etc/hosts
修改内容为规划好的ip以及对应的主机名
192.168.159.100 ------- hadoop-00
192.168.159.110 ------- hadoop-01
192.168.159.120 ------- hadoop-02
192.168.159.130 ------- hadoop-03
vim/etc/hosts
- 修改静态IP
- 第一步:打开
vim /etc/sysconfig/network-scripts/ifcfg-ens33
(ens33 是自己网卡的名字,可用ifconfig查看),配置文件
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
#BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="6ddb40f1-d3c7-498b-9b5c-c92af02b8a65"
DEVICE="ens33"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR=192.168.159.100 #静态IP
GATEWAY=192.168.159.2 #默认网关
NETMASK=255.255.255.0 #子网掩码
DNS1=192.168.159.2 #DNS 配置
- 第二步:修改完后,执行:
reboot
(重启虚拟机) - 第三步:检查
ifconfig - ping 自己
- ping百度
- 都能ping通说明成功了。
用Xshell连接
Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
- 新建会话,主机填所连接的IP
- 接受并保存
- 填写账户名
- 填写密码
- 连接成功
关闭防火墙
- 查看防火墙状态
firewall-cmd --state
- 停止firewall
systemctl stop firewalld.service
- 禁止firewall开机启动
systemctl disable firewalld.service
安装JDK
- 在/opt目录下创建module、software文件夹
- 卸载现有JDK
(1). 查询是否安装Java软件:rpm -qa|grep java
。
(2). 全部卸载:rpm -e --nodeps 包名称
[root@hadoop-00 opt]# rpm -e --nodeps tzdata-java-2020a-1.el7.noarch
[root@hadoop-00 opt]# rpm -e --nodeps python-javapackages-3.4.1-11.el7.noarch
[root@hadoop-00 opt]# rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch
[root@hadoop-00 opt]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
[root@hadoop-00 opt]# rpm -e --nodeps javamail-1.4.6-8.el7.noarch
[root@hadoop-00 opt]# rpm -e --nodeps javassist-3.16.1-10.el7.noarch
[root@hadoop-00 opt]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
- 用Xftp将JDK与hadoop导入opt目录下面的software文件夹下
(1). Xfrp新建会话如Xshell
(2). 传过去 - 查看是否成功
- 解压JDK到/opt/module目录下
[root@hadoop-00 module]# tar -zxvf jdk-8u162-linux-x64.tar.gz -C /opt/module/
- 配置JDK环境变量
- (1):打开/etc/profile文件:
vi /etc/profile
- (2):末尾添加JDK路径
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_162
export PATH=$PATH:$JAVA_HOME/bin
- (3). 让修改后的文件生效
source /etc/profile
- 看看JDK是否安装成功
java -version
安装hadoop
- 解压Hadoop安装包到/opt/module下
cd /opt/software/
tar -zxvf hadoop-2.10.1.tar.gz -C /opt/module/
ls /opt/module/
查看是否解压成功
- 将Hadoop添加到环境变量
- (1). 打开/etc/profile文件末尾添加路径:
vi /etc/profile
#添加的内容:
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.10.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
- (2). 使文件生效
source /etc/profile
- (3). 检查是否成功
hadoop version
Hadoop集群的配置
启动HDFS
配置集群
- 1:配置:hadoop-env.sh
[root@hadoop-00 software]# cd /opt/module/hadoop-2.10.1/etc/hadoop/
[root@hadoop-00 hadoop]# vim hadoop-env.sh
修改25行的:export JAVA_HOME=/opt/module/jdk1.8.0_162
- 2:配置:core-site.xml
[root@hadoop-00 hadoop]# vim core-site.xml
添加内容,注意后面的配置文件中出现hadoop-00应改为你自己的hostname
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-00:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.10.1/data/tmp</value>
</property>
修改结果:
- 3 :配置:hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
修改结果
启动NameNode,DataNode
- 1:格式化NameNode(第一次启动时格式化,以后就不要总格式化)
[root@hadoop-00 hadoop]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-00 hadoop-2.10.1]# bin/hdfs namenode -format
出现这个就成功!!!
- 2:启动NameNode,DataNode
[root@hadoop-00 hadoop-2.10.1]# sbin/hadoop-daemon.sh start namenode
[root@hadoop-00 hadoop-2.10.1]# sbin/hadoop-daemon.sh start datanode
- 3:查看启动结果
[root@hadoop-00 hadoop-2.10.1]# jps
- 4:web端查看HDFS文件系统
http://192.168.159.100:50070
启动YARN
配置集群
- 1:配置yarn-env.sh
[root@hadoop-00 hadoop-2.10.1]# cd /opt/module/hadoop-2.10.1/etc/hadoop/
[root@hadoop-00 hadoop]# vim yarn-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_162
- 2:配置yarn-site.xml
注意hadoop-00应改为你自己的hostname
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-00</value>
</property>
结果:
- 3:配置:mapred-env.sh
配置JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_162
- 4:配置:(对mapred-site.xml.template重新命名为) mapred-site.xml 并修改
[root@hadoop-00 hadoop]# mv mapred-site.xml.template mapred-site.xml
[root@hadoop-00 hadoop]# vim mapred-site.xml
添加内容
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
启动ResourceManager,NodeManager
- 1:启动前先确保NameNode和DataNode已经启动
- 2:启动ResourceManager,NodeManager
[root@hadoop-00 hadoop]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-00 hadoop-2.10.1]# sbin/yarn-daemon.sh start resourcemanager
[root@hadoop-00 hadoop-2.10.1]# sbin/yarn-daemon.sh start nodemanager
结果
- 3:YARN的web页面 :http://192.168.159.100:8088
配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。
- 1:配置mapred-site.xml
[root@hadoop-00 hadoop-2.10.1]# cd /opt/module/hadoop-2.10.1/etc/hadoop/
[root@hadoop-00 hadoop]# vi mapred-site.xml
添加内容
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>Hadoop-00:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value> Hadoop-00:19888</value>
</property>
- 2:启动历史服务器
[root@hadoop-00 hadoop]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-00 hadoop-2.10.1]# sbin/mr-jobhistory-daemon.sh start historyserver
- 3:查看启动结果
- 4:web端查看:http://192.168.159.100:19888
配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
- 1:关闭NodeManager 、ResourceManager和HistoryManager
[root@hadoop-00 hadoop-2.10.1]# sbin/mr-jobhistory-daemon.sh stop historyserver
[root@hadoop-00 hadoop-2.10.1]# sbin/yarn-daemon.sh stop nodemanager
[root@hadoop-00 hadoop-2.10.1]# sbin/yarn-daemon.sh stop resourcemanager
查看是否关闭:
- 2:配置yarn-site.xml
文件中配置如下内容
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 3:启动NodeManager 、ResourceManager和HistoryManager
[root@hadoop-00 hadoop]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-00 hadoop-2.10.1]# sbin/yarn-daemon.sh start resourcemanager
[root@hadoop-00 hadoop-2.10.1]# sbin/yarn-daemon.sh start nodemanager
[root@hadoop-00 hadoop-2.10.1]# sbin/mr-jobhistory-daemon.sh start historyserver
搭建3台虚拟机的集群
集群部署规划
准备三台虚拟机
克隆虚拟机
通过上面步骤获得的虚拟机(hadoop-00)为模板进行克隆,或者自行准备3台安装了hadoop和jdk的centos的虚拟机。
克隆出3台虚拟机 分别为:
hadoop-01
hadoop-02
hadoop-03
以克隆出hadoop-01为例子克隆步骤如下:
对克隆出的虚拟机ip分配和hostname修改
参考创建hadoop-00 ,去修改ip和hostname
下面是我的分配
192.168.159.110 ------- hadoop-01
192.168.159.120 ------- hadoop-02
192.168.159.130 ------- hadoop-03
后面的操作在那一台虚拟机注意看主机名!
编写xsync集群分发脚本
需求:循环复制文件到所有节点的相同目录下
- 1:在/home/whs目录下创建bin目录,并在bin目录下创建xsync文件:
[root@hadoop-01 ~]# cd /home
[root@hadoop-01 home]# mkdir whs
[root@hadoop-01 home]# cd whs
[root@hadoop-01 whs]# mkdir bin
[root@hadoop-01 whs]# cd bin
[root@hadoop-01 bin]# touch xsync
[root@hadoop-01 bin]# vi xsync
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=1; host<4; host++)); do
echo ------------------- Hadoop-0$host --------------
rsync -rvl $pdir/$fname $user@hadoop-0$host:$pdir
done
- 2: 修改脚本 xsync 具有执行权限
[root@hadoop-01 bin]# chmod 777 xsync
- 3:调用脚本方法:
xsync 文件名称
如将 /home/zyy/bin 分发到hadoop-02和hadoop-03
[root@hadoop-01 bin]# ./xsync /home/whs/bin
这样就成功了
- 4.查看分发结果:
hadoop-02中
hadoop-03中
集群配置
配置集群
(1)核心配置文件
- 1:配置core-site.xml
[root@hadoop-01 bin]# cd /opt/module/hadoop-2.10.1/etc/hadoop/
[root@hadoop-01 hadoop]# vi core-site.xml
编写修改如下配置
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-01:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.10.1/data/tmp</value>
</property>
(2)HDFS配置文件
- 1:配置hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_162
结果
- 2:配置hdfs-site.xml
[root@hadoop-01 hadoop]# vi hdfs-site.xml
#配置内容如下:
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop-03:50090</value>
</property>
(3)YARN配置文件
- 1:配置yarn-env.sh
[root@hadoop-01 hadoop]# vi yarn-env.sh
#配置内容如下
export JAVA_HOME=/opt/module/jdk1.8.0_162
- 2:配置yarn-site.xml
[root@hadoop-01 hadoop]# vi yarn-site.xml
#配置内容如下
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-02</value>
</property>
(4)MapReduce配置文件
- 1:配置mapred-env.sh
[root@hadoop-01 hadoop]# vi mapred-env.sh
#配置内容如下
export JAVA_HOME=/opt/module/jdk1.8.0_162
- 2:配置mapred-site.xml
[root@hadoop-01 hadoop]# vim mapred-site.xml
#配置内容如下:
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(5)集群上分发配置好的Hadoop配置文件
/home/whs/bin/xsync /opt/module/hadoop-2.10.1/etc/hadoop
(6)格式化NameNode
- 1:
#删除 data/ logs/
[root@hadoop-01 bin]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-01 hadoop-2.10.1]# rm -rf data/ logs/
[root@hadoop-02 bin]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-02 hadoop-2.10.1]# rm -rf data/ logs/
[root@hadoop-03 bin]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-03 hadoop-2.10.1]#$ rm -rf data/ logs/
- 2:格式化
[root@hadoop-01 hadoop-2.10.1]# bin/hdfs namenode -format
SSH无密登录配置
- 1:生成公钥和私钥
[root@hadoop-01 hadoop-2.10.1]# cd ~
[root@hadoop-01 ~]# cd .ssh/
[root@hadoop-01 .ssh]# ssh-keygen -t rsa
然后连续3个回车
- 1:将公钥拷贝到要免密登录的目标机器上
[root@hadoop-01 .ssh]# ssh-copy-id hadoop-01
[root@hadoop-01 .ssh]# ssh-copy-id hadoop-02
[root@hadoop-01 .ssh]# ssh-copy-id hadoop-03
注意:这个只是hadoop-01的,还需要在hadoop-02和hadoop-03重复以上两个步骤
群起集群
- 1:配置slaves
[root@hadoop-01 .ssh]# vim /opt/module/hadoop-2.10.1/etc/hadoop/slaves
#配置内容如下:
hadoop102
hadoop103
hadoop104
- 2:同步所有节点配置文件(这里就不会在输入密码)
[root@hadoop-01 home]# /home/whs/bin/xsync /opt/module/hadoop-2.10.1/etc/hadoop/slaves
- 3:启动集群
启动HDFS
[root@hadoop-01 hadoop]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-01 hadoop-2.10.1]# sbin/start-dfs.sh
在hadoop-01,hadoop-02,hadoop-03分别查看 jps
hadoop-01:
hadoop-02:
hadoop-03:
启动YARN
[root@hadoop-02 .ssh]# cd /opt/module/hadoop-2.10.1/
[root@hadoop-02 hadoop-2.10.1]# sbin/start-yarn.sh
注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。
到这里就搭建完了