Hadoop 介绍

Hadoop 介绍

Hadoop 概述

Hadoop 是什么

  1. Apache 基金会下的一个分布式系统框架
  2. 解决海量数据存储和分析计算

优势

  1. 高可靠性: Hadoop 底层维护多个数据副本,即使某个存储出现故障,也不会导致数据丢失
  2. 高扩展性: 当集群任务较多资源吃紧时,可以装载新的节点解决当前问题(如 双十一 618)。
  3. 高效性: 在 MapReduce 的思想下, Hadoop 是并行工作的,以加快任务处理的速度。
  4. 高容错性: 能够自动将失败的任务重新分配

(以上问题需要回答底层是如何解决的)

Hadoop 的组成

  1. MapReduce (分析计算)
  2. Yarn (资源调度 2.x 之后出现,之前 资源调度也由 Map Reduce 负责)
  3. HDFS (Hadoop Distributed File System)
  4. Common 辅助工具

Hadoop 常用端口号

Hadoop 3.x Hadoop 2.x
访问 HDFS 端口 9870 50070
访问 MR 执行情况端口 8088 8088
历史服务器 19888 19888
客户端访问集群端口 8020 9000

端口都可以在相关配置文件中进行修改

Hadoop 配置文件以及简单的 Hadoop 集群搭建

配置文件

Hadoop 3.x: core-site.xml hdfs-site.xml marped-site.xml yarn-site.xml workers

Hadoop 2.x: core-site.xml hdfs-site.xml marped-site.xml yarn-site.xml slaves

简单的集群搭建过程

JDK 安装

保证 Linux 系统下有和你所需要 Hadoop 的对应的 Java 版本环境

配置 SSH 免密登录

便于 Hadoop 不同主机之间的文件的快速传输

编写集群文件分发脚本实现上述要求 使用 rsync 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
配置 Hadoop 核心文件

分配 Hadoop 各组件所在位置

hadoop102 hadoop103 hadoop104
HDFS NameNode, DataNode DataNode SecondaryNameNode, DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

配置 core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>albert</value>
</property>
</configuration>

配置 hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>

配置 yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</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_MAP
RED_HOME</value>
</property>
</configuration>

配置 mapred-site.xml

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

配置 workers

1
[albert@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
1
2
3
4
5
#如果直接写主机名 你需要在 vim /etc/hosts 配置主机名与地址的映射
#如果不写,也可以直接写 192.168.10.101 等你对应主机的 ip
hadoop102
hadoop103
hadoop104

在上述某些配置文件中追加配置

配置历史服务器

配置 mapred-site.xml

1
2
3
4
5
6
7
8
9
10
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property

配置日志的聚集

配置 yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
格式化 namenode
  1. 启动集群
    如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode (注意: 格式化 NameNode, 会产生新的集群 id, 导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。 如果集群在运行过程中报错,需要重新格式化 NameNode 的话, 一定要先停止 namenode 和 datanode 进程, 并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)
1
[albert@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
  1. 启动 HDFS

    1
    [albert@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
  2. 在配置了 ResourceManager 的节点(hadoop103) 启动 YARN

    1
    [albert@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
  3. Web 端查看 HDFS 的 Nam eNode

(a)浏览器中输入: http://hadoop102:9870

(b)查看 HDFS 上存储的数据信息

  1. Web 端查看 YARN 的 ResourceManager

(a)浏览器中输入: http://hadoop103:8088

(b)查看 YARN 上运行的 Job 信息

使用脚本启动/关闭 Hadoop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"尚硅谷大数据技术之 Hadoop(入门)
—————————————————————————————
更多 Java –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop
historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac

查看三台服务器 Java 进程脚本: jpsall

1
2
3
4
5
6
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done

注意: 记得给脚本运行权限 chmod


Hadoop 介绍
http://example.com/2022/07/11/Hadoop-Intro/
作者
Zhao Zhuoyue
发布于
2022年7月11日
许可协议