Hadoop 集群安装部署(超详细)

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 配置在同一台机器

Hadoop128Hadoop134Hadoop135
HDFSNamenode DatanodeDataNodeSecondaryNameNode DataNode
YARNNodeManagerResourceManager NodeManagerNodemanager

七、修改配置文件 (红色为新增部分)

配置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

在任何一台服务器上打开浏览器:

http://192.168.146.128:9870

在这里插入图片描述

Web端查看YARN的ResourceManager

http://192.168.146.134:8088

在这里插入图片描述

在$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集群部署成功。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 将以下命令复制到终端安装Hadoop集群部署脚本: b'shell\xe4\xb8\x80\xe9\x94\xae\xe5\xae\x89\xe8\xa3\x85hadoop\xe9\x9b\x86\xe7\xbe\xa4\xe9\x83\xa8\xe7\xbd\xb2' 按下回车键开始安装安装完成后,将你的Hadoop集群配置文件复制到所需的所有节点上,并启动Hadoop服务就可以了。 ### 回答2: Hadoop是一个分布式计算框架,主要用于处理大规模的数据集。在Hadoop集群部署过程,需要在每台机器上安装Java、Hadoop,并配置各节点间通信等。Shell脚本为我们提供了自动化一键化的部署方式,有效减少了操作时间和人工错误的可能性。 Shell是一种脚本语言,可以用于执行操作系统内置的命令,也可以组合成程序,实现批处理的工作。可以通过编Shell脚本,在多个节点上自动安装配置Hadoop集群。 一般来说,Shell脚本部署Hadoop集群的流程如下: 1. 编Shell脚本,定义需要安装哪些软件和配置,主要包括安装Java、Hadoop软件、配置Hadoop环境变量、配置Hadoop集群等。 2. 在主节点上运行一键安装脚本,脚本会自动下载Java、Hadoop软件到各个节点,并启动安装配置过程。 3. 在集群各节点上传或复制一键安装脚本,执行脚本完成每台机器的自动化安装配置。 4. 验证集群配置是否正确,包括节点间的链接通断、数据块的分配、备份等。 Shell脚本部署Hadoop集群的优点很明显,它可以大大简化安装的流程,让不懂Linux命令和Hadoop的人也能快速完成部署。同时,通过Shell脚本的一键安装方式,可以让部署过程更具可重复性、可靠性,减少出错和手动调整的可能性。 ### 回答3: Hadoop是一个分布式计算框架,它能够管理和处理大规模数据集。在实际应用,如果需要进行数据分析、机器学习等工作,通常需要一台或多台计算机上配置Hadoop集群部署来实现。这个过程需要依次安装不同的环境与组件,如Java、Hadoop、Hive等。由于这个过程繁琐复杂,需要操作系统、环境与软件等多方面的知识,因此有必要使用一键安装的方式来简化部署的过程。 Shell一键安装Hadoop集群部署是使用Shell脚本编自动安装脚本,减少繁琐的部署过程。通过一键安装,可以省去手动安装配置环境不免出现的人工操作失误,并且可以快速、轻松地完成Hadoop集群部署。 具体实现过程可以分为以下几步: 1. 准备安装环境,如Ubuntu、CentOS等Linux平台、GitHub下载一键安装脚本; 2. 将主机与节点服务器IP地址配置文件; 3. 创建Shell脚本文件并设置所需的安装环境; 4. 编自动安装脚本,包括软件下载、配置环境、启动服务等。 5. 安装完毕后,进行配置检查和测试。 在实际使用过程,一键安装脚本不仅可以用于简化Hadoop集群部署的过程,也可以扩展到其他的应用上。例如,一键安装脚本也可以用与Kafka集群或其他分布式系统等。 总之,Shell一键安装Hadoop集群部署是一项非常有用而又实用的技术,可以帮助用户快速构建和部署Hadoop集群,提高工作效率和减少错误率。同时,还可以使管理和维护的过程更加简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚者oO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值