IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hadoop概述与Hadoop集群搭建 -> 正文阅读

[大数据]Hadoop概述与Hadoop集群搭建

1. Hadoop概述

1.1. Hadoop的组成部分

hadoop2.0以后的四个模块:
    - Hadoop Common:Hadoop模块的通用组件
    - Hadoop Distributed File System:分布式文件系统
    - Hadoop YARN:作业调度和资源管理框架
    - Hadoop MapReduce:基于YARN的大型数据集并行计算处理框架

hadoop3.0新扩展的两个模块:
    - Hadoop Ozone:Hadoop的对象存储机制 
    - Hadoop Submarine:Hadoop的机器学习引擎

1.2. Hadoop的生态系统

在这里插入图片描述

2. Hadoop集群安装

2.1 集群规划(先完成一台的配置,后面两台采用克隆技术)

集群规划规划
操作系统Mac、Windows
虚拟软件Parallels Desktop(Mac)、VMWare(Windows)
虚拟机主机名: zrclass01, IP地址: 192.168.111.101
主机名: zrclass02, IP地址: 192.168.111.102
主机名: zrclass03, IP地址: 192.168.111.103
软件包上传路径/home/soft
软件包安装路径/usr/local
JDKJdk-8u221-linux-x64.tar.gz
Hadoophadoop-2.7.6.tar.gz
用户root

2.2 安装JDK

2.2.1 检查一下是否已经安装过或者系统内置JDK,如果有内置的,将其卸载

[root@zrclass01 ~]# rpm -qa | grep jdk     				# 如果有,请卸载
[root@zrclass01 ~]# rpm -e xxxxxxxx --nodeps      	# 将查询到的内置jdk强制卸载

2.2.2 上传jdk1.8

将jdk-8u221-linux-x64.tar.gz上传到/root目录中

2.2.3 解压jdk到/usr/local/下

[root@zrclass01 ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local

2.2.4 更名jdk

[root@zrclass01 ~]# cd /usr/local
[root@zrclass01 local]# mv jdk1.8.0_221/  jdk

2.2.5 配置Jdk的环境变量:/etc/profile

[root@zrclass01 local]# vi /etc/profile
.........省略...........
#jdk environment
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

2.2.6 使当前窗口生效

[root@zrclass01 local]# source /etc/profile

2.2.7 验证jdk环境

[root@zrclass01 local]# java -version
[root@zrclass01 local]# javac	

2.3. 完全分布式环境需求及安装

1. 三台机器的防火墙必须是关闭的
2. 确保三台机器的网络配置通常(NAT模式、静态IP、主机名的配置)
3. 确保/etc/hosts文件配置了IP和hosts的映射关系
4. 确保配置了三台机器的免密登录认证
5. 确保所有的机器时间同步
6. JDK和Hadoop的环境变量配置

2.3.1 关闭防火墙

[root@zrclass01 ~]# systemctl stop firewalld
[root@zrclass01 ~]# systemctl disable firewalld
[root@zrclass01 ~]# systemctl stop NetworkManager
[root@zrclass01 ~]# systemctl disable NetworkManager

#最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled
[root@zrclass01 ~]# vi /etc/selinux/config
.........
SELINUX=disabled			
.........

2.3.2 静态IP和主机名配置

--1. 配置静态IP(确保NAT模式)
[root@zrclass01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
............
BOOTPROTO=static					# 将dhcp改为static
............
ONBOOT=yes								# 将no改为yes
IPADDR=192.168.111.101			# 添加IPADDR属性和ip地址
PREFIX=24									# 添加NETMASK=255.255.255.0或者PREFIX=24	
GATEWAY=192.168.111.2			# 添加网关GATEWAY
DNS1=114.114.114.114      # 添加DNS1和备份DNS
DNS2=8.8.8.8

--2. 重启网络服务
[root@zrclass01 ~]# systemctl restart network
或者
[root@zrclass01 ~]# service network restart

--3. 修改主机名(如果修改过,请略过这一步)
[root@localhost ~]# hostnamectl set-hostname zrclass02
或者
[root@localhost ~]# vi /etc/hostname
zrclass01

2.3.3 配置/etc/hosts文件(先配置zrclass01)

[root@zrclass01 ~]#  vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.111.101 zrclass01  #添加本机的静态IP和本机的主机名之间的映射关系 
192.168.111.102 zrclass02
192.168.111.103 zrclass03

2.3.4 免密登录认证

-1. 使用rsa加密技术,生成公钥和私钥。一路回车即可
[root@zrclass01 ~]# cd ~
[root@zrclass01 ~]# ssh-keygen -t rsa	

-2. 进入~/.ssh目录下,使用ssh-copy-id命令
[root@zrclass01 ~]# cd ~/.ssh			
[root@zrclass01 .ssh]# ssh-copy-id  root@zrclass01

-3. 进行验证	
[hadoop@zrclass01 .ssh]# ssh zrclass01
#下面的第一次执行时输入yes后,不提示输入密码就对了
[hadoop@zrclass01 .ssh]# ssh localhost
[hadoop@zrclass01 .ssh]# ssh 0.0.0.0

注意:三台机器提前安装好的情况下,需要同步公钥文件。如果使用克隆技术。那么使用同一套密钥对就方便多了。

2.3.5 时间同步

# 1 选择集群中的某一台机器作为时间服务器,例如zrclass01
# 2 保证这台服务器安装了ntp.x86_64。 yum install ntp -y
# 3 保证ntpd 服务运行......
[root@zrclass01 ~]# sudo service ntpd start
# 	开机自启动:
[root@zrclass01 ~]# chkconfig ntpd on
	
# 4 配置相应文件:
[root@zrclass01 ~]# vi /etc/ntp.conf
	
	# Hosts on local network are less restricted.
	# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
  # 添加集群中的网络段位
	restrict 192.168.111.0 mask 255.255.255.0 nomodify notrap

	# Use public servers from the pool.ntp.org project.
	# Please consider joining the pool (http://www.pool.ntp.org/join.html).
	# server 0.centos.pool.ntp.org iburst    注释掉
	# server 1.centos.pool.ntp.org iburst	   注释掉
	# server 2.centos.pool.ntp.org iburst    注释掉
	# server 3.centos.pool.ntp.org iburst    注释掉
	server 127.127.1.0     #master作为服务器
	
systemctl restart ntpd
# 5 其他机器要保证安装ntpdate.x86_64    yum install ntpdate -y
    同步zrclass01的时间,ntpdate -u zrclass01
# 6 其他机器要使用root定义定时器 zrclass02和zrclass03  sudo crontab -e
*/1 * * * * /usr/sbin/ntpdate -u zrclass01 

2.3.6 Hadoop安装与环境变量配置

# 1. 上传和解压两个软件包
[root@zrclass01 ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/
[root@zrclass01 ~]# tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/

# 2. 进入local里,给两个软件更名
[root@zrclass01 ~]# cd /usr/local/
[root@zrclass01 local]# mv 1.8.0_221/  jdk
[root@zrclass01 local]# mv hadoop-2.7.6/ hadoop

# 3. 配置环境变量
[hadoop@zrclass01 local]# vi /etc/profile

.....省略...........

#java environment
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

#hadoop environment
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

2.3.7 克隆zrclass02和zrclass03

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改克隆虚拟机的ip

vi /etc/sysconfig/network-scripts/ifcfg-ens32
# 将zrclass02,zrclass03 ip分别改为192.168.111.102和192.168.111.103
systemctl restart network

修改zrclass02和zrclass03的hostname

设置zrclass02和zrclass03 同步zrclass01的时间

sudo crontab -e

*/1 * * * * /usr/sbin/ntpdate -u zrclass01 

systemctl restart crond

2.4. Hadoop的配置文件

2.4.1. 概述

我们需要通过配置若干配置文件,来实现Hadoop集群的配置信息。需要配置的文件有:
hadoop-env.sh
yarn-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml

在Hadoop安装完成后,会在$HADOOP_HOME/share路径下,有若干个*-default.xml文件,这些文件中记录了默认的配置信息。同时,在代码中,我们也可以设置Hadoop的配置信息。
这些位置配置的Hadoop,优先级为: 代码设置 > *-site.xml > *-default.xml
集群规划:
+--------------+---------------------+
|     Node     | Applications        |
+--------------+---------------------+
|  zrclass01  | NameNode            |
|              | DataNode            |
|              | ResourceManager     |
|              | NodeManagere        |
+--------------+---------------------+
|  zrclass02  | SecondaryNameNode   |
|              | DataNode            |
|              | NodeManager         |
+--------------+---------------------+
|  zrclass03  | DataNode            |
|              | NodeManager         |
+--------------+---------------------+

2.4.2. core-site.xml

[root@zrclass01 ~]# cd $HADOOP_HOME/etc/hadoop/
[root@zrclass01 hadoop]# vi core-site.xml
<configuration>
    <!-- hdfs的地址名称:schame,ip,port-->
    <!-- 在Hadoop1.x的版本中,默认使用的端口是9000。在Hadoop2.x的版本中,默认使用端口是8020 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://zrclass01:8020</value>
    </property>
    <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>
</configuration>

2.4.3. hdfs-site.xml

[root@zrclass01 hadoop]# vi hdfs-site.xml
<configuration>
    <!-- namenode守护进程管理的元数据文件fsimage存储的位置-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/name</value>
    </property>
    <!-- 确定DFS数据节点应该将其块存储在本地文件系统的何处-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file://${hadoop.tmp.dir}/dfs/data</value>
    </property>
    <!-- 块的副本数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 块的大小(128M),下面的单位是字节-->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
    <!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>zrclass02:50090</value>
    </property>
  	<!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局-->
	<property>
  	  <name>dfs.namenode.http-address</name>
  	  <value>zrclass01:50070</value>
	</property>  
</configuration>

2.4.4. mapred-site.xml

[root@zrclass01 hadoop]# cp mapred-site.xml.template  mapred-site.xml
[root@zrclass01 hadoop]# vi mapred-site.xml
<configuration>
    <!-- 指定mapreduce使用yarn资源管理器-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 配置作业历史服务器的地址-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>zrclass01:10020</value>
    </property>
    <!-- 配置作业历史服务器的http地址-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>zrclass01:19888</value>
    </property>
</configuration>

2.4.5 yarn-site.xml

[root@zrclass01 hadoop]# vi yarn-site.xml
<configuration>
    <!-- 指定yarn的shuffle技术-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定resourcemanager的主机名-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>zrclass01</value>
    </property> 
    <!--下面的可选-->
    <!--指定shuffle对应的类 -->
	<property> 
	<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
     <value>org.apache.hadoop.mapred.ShuffleHandler</value> 
	</property>

	<!--配置resourcemanager的内部通讯地址-->
	<property>
	<name>yarn.resourcemanager.address</name>
	<value>zrclass01:8032</value>
	</property>

	<!--配置resourcemanager的scheduler的内部通讯地址-->
	<property>
	<name>yarn.resourcemanager.scheduler.address</name>
	<value>zrclass01:8030</value>
	</property>

	<!--配置resoucemanager的资源调度的内部通讯地址-->
	<property>
	<name>yarn.resourcemanager.resource-tracker.address</name>
	<value>zrclass01:8031</value>
	</property>

	<!--配置resourcemanager的管理员的内部通讯地址-->
	<property>
	<name>yarn.resourcemanager.admin.address</name>
	<value>zrclass01:8033</value>
	</property>

	<!--配置resourcemanager的web ui 的监控页面-->
	<property>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>zrclass01:8088</value>
	</property>
</configuration>

2.4.6 hadoop-env.sh

[root@zrclass01 hadoop]# vi hadoop-env.sh
.........
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk
.........

2.4.7 yarn-env.sh

[root@zrclass01 hadoop]# vi yarn-env.sh
.........
# some Java parameters
export JAVA_HOME=/usr/local/jdk
if [ "$JAVA_HOME" != "" ]; then
  #echo "run java in $JAVA_HOME"
  JAVA_HOME=$JAVA_HOME
fi
.........

2.4.8 slaves

此文件用于指定datanode守护进程所在的机器节点主机名

[root@zrclass01 hadoop]# vi slaves
zrclass01
zrclass02
zrclass03

2.4.9 分发到另外两台节点

# 同步Hadoop到另外两台节点
[root@zrclass01 ~]# cd /usr/local
[root@zrclass02 local]# scp -r hadoop zrclass02:$PWD
[root@zrclass02 local]# scp -r hadoop zrclass03:$PWD

# 同步profile到另外两台节点
[root@zrclass01 ~]# scp /etc/profile zrclass02:/etc
[root@zrclass01 ~]# scp /etc/profile zrclass03:/etc

# 检查slave节点上的jdk是否已安装
# 检查是否同步了/etc/hosts文件

2.5 格式化与启动

2.5.1 格式化集群

**1)**在zrclass01机器上运行命令

[root@zrclass01 ~]# hdfs namenode -format

**2)**格式化的相关信息解读

--1. 生成一个集群唯一标识符:clusterid
--2. 生成一个块池唯一标识符:blockPoolId
--3. 生成namenode进程管理内容(fsimage)的存储路径:
	默认配置文件属性hadoop.tmp.dir指定的路径下生成dfs/name目录
--4. 生成镜像文件fsimage,记录分布式文件系统根路径的元数据

--5. 其他信息都可以查看一下,比如块的副本数,集群的fsOwner等。

2.5.2 启动集群

1) 启动脚本和关闭脚本介绍

1. 启动脚本
	-- start-dfs.sh			:用于启动hdfs集群的脚本
	-- start-yarn.sh		:用于启动yarn守护进程
	-- start-all.sh			:用于启动hdfs和yarn
2. 关闭脚本
	-- stop-dfs.sh			:用于关闭hdfs集群的脚本
	-- stop-yarn.sh			:用于关闭yarn守护进程
	-- stop-all.sh			:用于关闭hdfs和yarn
3. 单个守护进程脚本
	-- hadoop-daemons.sh	:用于单独启动或关闭hdfs的某一个守护进程的脚本
	-- hadoop-daemon.sh		:用于单独启动或关闭hdfs的某一个守护进程的脚本
	reg:
		hadoop-daemon.sh [start|stop] [namenode|datanode|secondarynamenode]
	
	-- yarn-daemons.sh	:用于单独启动或关闭hdfs的某一个守护进程的脚本
	-- yarn-daemon.sh		:用于单独启动或关闭hdfs的某一个守护进程的脚本
	reg:
		yarn-daemon.sh [start|stop] [resourcemanager|nodemanager]

**2) ** 启动HDFS

使用start-dfs.sh,启动 hdfs
启动过程解析:

- 启动集群中的各个机器节点上的分布式文件系统的守护进程
  一个namenode和resourcemanager以及secondarynamenode
  多个datanode和nodemanager
- 在namenode守护进程管理内容的目录下生成edit日志文件
- 在每个datanode所在节点下生成${hadoop.tmp.dir}/dfs/data目录
注意!
如果哪台机器的相关守护进程没有开启,那么,就查看哪台机器上的守护进程对应的日志log文件,注意,启动脚本运行时提醒的日志后缀是*.out,而我们查看的是*.log文件。此文件的位置:${HADOOP_HOME}/logs/里

3) jps查看进程

--1. 在zrclass01上运行jps指令,会有如下进程
	namenode
	datanode
--2. 在zrclass02上运行jps指令,会有如下进程
	secondarynamenode
	datanode
--3. 在zrclass03上运行jps指令,会有如下进程
	datanode   

**4) **启动yarn

使用start-yarn.sh脚本

jps查看

--1. 在zrclass01上运行jps指令,会多出有如下进程
	resoucemanager
	nodemanager
--2. 在zrclass02上运行jps指令,会多出有如下进程
	nodemanager
--3. 在zrclass03上运行jps指令,会多出有如下进程
	nodemanager 

5) webui查看

HDFS: http://192.168.10.101:50070
YARN: http://192.168.10.101:8088
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 13:08:12  更:2022-03-06 13:09:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:49:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码