Hadoop 集群安装部署及新增服务器节点(详细):
文章目录
前言
- Hadoop是Yahoo!开发,后贡献给了Apache的一套开源的、可靠的、可扩展的用于分布式计算的框架
-
Hadoop作者
Doug cutting
-
Hadoop名字由来
以Hadoop作者的孩子的一个棕黄色的大象样子的玩具的命名
-
Hadoop特点
-
高可靠性
Hadoop按位存储和数据处理的能力值得信赖
-
高扩展性
Hadoop通过可用的计算机集群分配数据,完成存储和计算任务,这些集群可以方便地扩展到数以千计的节点中,具有高扩展性
-
高效性
Hadoop能够在节点之间进行动态地移动数据,并保证各个节点的动态平衡,处理速度非常快,具有高效性
-
高容错性
Hadoop能够自动保存数据的多个副本(默认是3个),并且能够自动将失败的任务重新分配
Hadoop能做什么
-
大数据量存储
分布式存储(各种云盘,百度,360~还有云平台均有hadoop应用)
-
日志处理
-
搜索引擎
如何存储持续增长的海量网页: 单节点 V.S. 分布式存储
如何对持续增长的海量网页进行排序: 超算 V.S. 分布式计算
-
数据挖掘
目前比较流行的广告推荐
提示:以下是本篇文章正文内容,下面案例可供参考
安裝部署
1.引入库
此处部署完全分布式:(示例):
Hadoop 安装部署:
基础环境:
IP hostname 系统名称 jdk hadoop
192.168.146.128 hadoop128 centos7.6 1.8.0_181 hadoop-3.1.3.tar.gz
192.168.146.134 hadoop134 centos7.6 1.8.0_181 hadoop-3.1.3.tar.gz
192.168.146.135 hadoop135 centos7.6 1.8.0_181 hadoop-3.1.3.tar.gz
192.168.146.132 windows10 使用浏览器
关闭防火墙,selinux ,
调整会话数 ulimit -n 65535
一、设置主机名
hostnamectl set-hostname hadoopxxx
vim /etc/hosts (四台服务器都需添加)
192.168.146.128 hadoop128
192.168.146.134 hadoop134
192.168.146.135 hadoop135
192.168.146.132 hadoop132 # Windows 系统
二、添加公钥(三台centos服务器互相添加公钥!否则入坑
)
入坑点:
因为该集群的部署是完全分布式 hdfs 和 yarn 需要在不同的服务器节点上启动,所以三台连接必须都能互通!
添加公钥的意思是指三台分别都要互通
eg:
1、hadoop128可以互联hadoop128(也就是自己!
)、hadoop134和hadoop135
2、hadoop129可以互联hadoop128、hadoop134(也就是自己!
)和hadoop135
3、hadoop129可以互联hadoop128、hadoop134和hadoop135(也就是自己!
)
ssh-keygen -t rsa # 生成公钥
ssh-copy-id xx.xx.xx.xx # 分发公钥
#公钥分发完成后相互之间需要首次登陆
三、安装jdk
#上传jdk 到 /usr/local/src/下
tar zxvf jdk-8u181-linux-x64.tar.gz
mv jdk-8u181-linux-x64 jdk8
vim /etc/profile.d/my_hadoop.sh
#配置Java环境变量
export JAVA_HOME=/usr/local/src/jdk8
export PATH=$PATH:$JAVA_HOME/bi
四、上传Hadoop 包到指定目录 /opt/module/
mkdir /opt/module/
#上传文件然後ls
#解压
hadoop-3.1.3.tar.gz
tar -zxvf hadoop-3.1.3.tar.gz -C "your tar path"
五、配置循环复制脚本制作
cd /opt/module/hadoop-3.1.3/sbin # 也可以放在$HADOOP_HOME/bin 下
vim xsync
#!/bin/bash
#判断参数个数
if [ $# -lt 1 ];then
echo Not Enough Arguement !
exit;
fi
#遍历所有机器
for host in hadoop128 hadoop134 hadoop135 #你的ip或者主机名是什么 就写什么!!
do
echo =====================$host========================
# 遍历目录,挨个发送
for file in $@
do
if [ -e $file ];then
#获取父目录
pdir=$(cd -P $(dirname $file) ; pwd)
#获取当期文件名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file is not exist !
fi
done
done
六、集群配置
集群部署规划:
namenode 和 secondarynamenode 最好不要安装在同一台服务器上
resourcemanager 也比较耗内存,不要跟 namenode和secondarynamenode 配置在同一台机器
Hadoop128 | Hadoop134 | Hadoop135 | |
---|---|---|---|
HDFS | Namenode 和 Datanode | DataNode | SecondaryNameNode 和 DataNode |
YARN | NodeManager | ResourceManager 和 NodeManager | Nodemanager |
七、修改配置文件 (红色为新增部分)
配置core-site.xml 核心配置文件
vim $HADOOP_HOME/etc/hadoop/core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop128:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
</configuration>
配置hdfs-site.xml hdfs配置文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop128:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop135:9868</value>
</property>
<!-- 能够在web界面进行文件的增删操作-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
配置mapred-site.xml mapreduce配置文件
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置yarn-site.xml yarn配置文件
<?xml version="1.0"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
: <!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop134</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
配置workers (类似于slaves)
hadoop128
hadoop134
hadoop135
利用脚本(xsync分发更新其余几台服务器的配置文件)
[root@hadoop128 ~] cd /opt/module/hadoop-3.1.3
# 分发
[root@hadoop128 hadoop-3.1.3] xsync ../hadoop3.1.3
查看分发
分发完毕!
在另外两台服务器上查看验证:
[root@hadoop134 ~] cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[root@hadoop135 ~] cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
此处需注意:
如果使用的是root 用户,下面启动集群之前需要做如下设置:
在$HADOOP_HOME/sbin 目录下修改 start-dfs.sh stop-dfs.sh start-yarn.sh stop-yarn.sh 四个配置文件
start-dfs.sh stop-dfs.sh 两个添加如下内容
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
start-yarn.sh stop-yarn.sh 两个添加如下内容
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
配置分发到另外两台服务器
[root@hadoop128 sbin] xsync $HADOOP_HOME/sbin/
八、启动集群(重点!否则入坑!)
如果集群是第一次启动,需要在 hadoop128主节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化
格式化集群:(在128 namenode 上操作)
[root@hadoop128 bin] hdfs namenode -format
启动HDFS
[root@hadoop128 hadoop-3.1.3] sbin/start-dfs.sh
查看启动进程 (三台服务器上都查看)
[root@hadoop128 hadoop-3.1.3]# jps
72496 NameNode
72664 DataNode
72922 Jps
==================================
[root@hadoop134 opt]# jps
60662 Jps
60590 DataNode
==================================
[root@hadoop135 opt]# jps
59153 DataNode
59299 Jps
59257 SecondaryNameNode
启动YARN (一定要在配置 ResourceManager 的节点hadoop134 上启动!
)
[root@hadoop134 hadoop-3.1.3] sbin/start-yarn.sh
查看启动进程 (三台服务器上都查看)
[root@hadoop134 hadoop-3.1.3]jps
[root@hadoop134 hadoop-3.1.3]
60962 ResourceManager
61107 NodeManager
61411 Jps
60590 DataNode
================================
[root@hadoop128 hadoop-3.1.3]# jps
72496 NameNode
73239 Jps
72664 DataNode
73133 NodeManager
================================
[root@hadoop135 opt]# jps
59520 NodeManager
59153 DataNode
59257 SecondaryNameNode
59625 Jps
经检查,跟规划的进程一模一样。
查看前需提前配置 浏览器所在服务器 192.168.146.132 的 hosts 解析文件
Web端查看HDFS 的NameNode
在任何一台服务器上打开浏览器:
Web端查看YARN的ResourceManager
在$HADOOP_HOME/sbin目录下新增jps 文件
如果是root用户可以制作一件查看jps状态脚本
[root@hadoop128 hadoop-3.1.3] vim jps
#!/bin/bash
for host in hadoop128 hadoop134 hadoop135
do
echo "========== $host =========="
ssh $host "source /etc/profile ;jps"
done
使用jps查看
九、集群基本测试
上传文件到集群
上传小文件:
在集群上创建目录 input
[root@hadoop128 hadoop-3.1.3] hadoop fs -mkdir /input
在服务器上创建测试目录 /opt/module/hadoop-3.1.3/wcinput 并新增文件 word.txt
[root@hadoop128 wcinput] cat word.txt
ll lll
jjj jjj
ping
上传word.txt 文件到集群根目录下。
[root@hadoop128 wcinput] hadoop fs -put /opt/module/hadoop-3.1.3/wcinput/word.txt /input
2021-03-09 13:25:12,013 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
刷新web界面查看,已上传到集群 input 目录
上传大文件到集群根 目录下 (上传后是两个文件)
[root@hadoop128 hadoop-3.1.3] hadoop fs -put /usr/local/src/jdk-8u181-linux-x64.tar.gz /
2021-03-09 13:28:10,812 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
2021-03-09 13:28:13,254 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
上传文件后在服务器上查看存储位置:
[root@hadoop128 subdir0] pwd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1753310987-192.168.146.128-1615261700958/current/finalized/subdir0/subdir0
查看上传的 word.txt 文件
blk_1073741826 和 blk_1073741827 这两个文件才是jdk的压缩包,查看的时候需要拼接一下
[root@hadoop128 subdir0] cat blk_1073741826 >> tmp.tar.gz
[root@hadoop128 subdir0] cat blk_1073741827 >> tmp.tar.gz
[root@hadoop128 subdir0]# tar zxvf tmp.tar.gz
用命令下载 tmp.tar.gz 文件
[root@hadoop128 hadoop-3.1.3] hadoop fs -get /jdk-8u181-linux-x64.tar.gz
由此可见需要 两个文件合并后才是jdk文件
在浏览器界面查看上传的word.txt 文件
点击查看内容:
(若查看失败,可能是浏览器服务器的hosts解析文件没有配置)
命令执行wordcount 程序: (输出集群目录 /output 必须不存在才能正常运行生成)
[root@hadoop128 hadoop-3.1.3] hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input/word.txt /output
查看web界面:
查看MapReduce界面:(证明刚才运行了一个任务)
点开history 查看详细信息:
此报错需要配置历史服务器:
修改 mapred-site.xml 文件在该文件里新增如下内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop128:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop128:19888</value>
</property>
</configuration>
分发配置到其余两台服务器
[root@hadoop128 hadoop-3.1.3] xsync etc/hadoop/mapred-site.xml
在 hadoop128 上启动历史服务器
[root@hadoop128 hadoop-3.1.3] mapred --daemon start historyserver
查看进程
[root@hadoop128 hadoop-3.1.3] jps
72496 NameNode
78678 Jps
72664 DataNode
73133 NodeManager
78637 JobHistoryServer
重新运行一个任务,(或者删除之前的/output目录后重新运行上一条任务)
[root@hadoop128 hadoop-3.1.3] hadoop fs -rm -r /output
[root@hadoop128 hadoop-3.1.3] deleted /output
[root@hadoop128 hadoop-3.1.3] hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input/word.txt /output
点击history 显示如图:不再报错
点击logs后会显示如图:(日志聚集不能使用,需要配置日志聚集功能,转到下面日志聚集配置)
如上图点击logs后,点击左侧栏 configuration 会显示运行日志信息
开启日志聚集功能:
配置yarn-site.xml 配置文件 新增如下内容:(红色为新增部分)
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop134</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop128:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
分发到其余两台服务器
[root@hadoop128 hadoop-3.1.3] xsync etc/hadoop/yarn-site.xml
重新启动
NodeManager 、ResourceManager 、 Historyserver 服务
先关闭 NodeManager 、ResourceManager 、 Historyserver 服务:
[root@hadoop128 hadoop-3.1.3] mapred --daemon stop historyserver
[root@hadoop134 hadoop-3.1.3] sbin/stop-yarn.sh
然后启动 NodeManager 、ResourceManager 、 Historyserver 服务:
[root@hadoop134 hadoop-3.1.3] sbin/start-yarn.sh
[root@hadoop128 hadoop-3.1.3] mapred --daemon start historyserver
删除之前生成的 /output 文件
[root@hadoop128 hadoop-3.1.3] hadoop fs -rm -r /output
重新运行一个任务
[root@hadoop128 hadoop-3.1.3] hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input/word.txt /output
查看web界面点击history,点击logs 后显示如图:
日志查看正常,至此hadoop集群部署成功。