当前位置:主页 > 查看内容

Apache Hadoop基础知识

发布时间:2021-06-19 00:00| 位朋友查看

简介:我的Hadoop笔记 一、背景 起源于google的3篇论文中的GFS和MapReduce作者是Doug cutting截止到2021-04-07为止最新的正式版本为3.2.2本笔记还是基于Hadoop2.x的内容 二、Hadoop是什么 狭义的Hadoop包括 HDFS(Hadoop Distributed File System) 和 MapReduce 本……

我的Hadoop笔记

一、背景

起源于google的3篇论文中的GFS和MapReduce,作者是Doug cutting,截止到2021-04-07为止,最新的正式版本为3.2.2,本笔记还是基于Hadoop2.x的内容

二、Hadoop是什么?

狭义的Hadoop包括HDFS(Hadoop Distributed File System)MapReduce,本篇笔记只包括狭义的Hadoop

HDFS是一个分布式文件存储系统,MapReduce是计算框架

广义的Hadoop可以理解为Hadoop生态(hdfs,mapreduce,hive,hbase,yarn,oozie,sqoop,flume,phoenix,kafka,spark)

三、HDFS

是一个分布式文件系统,从用户角度看就是个存文件的地方,可以创建目录,创建文件,上传文件,下载文件等等。

支持Java API、RestFul API操作HDFS。

1 HDFS存储模型

  1. 文件被切割成一个个block,每个block大小默认128兆
  2. 单个block大小一致,文件和文件的block大小可以不一致
  3. block分散存储在集群的多个节点
  4. block可以设置副本个数,默认值是3,一般副本数不建议超过节点数
  5. 已存储的block副本数可以重新设置数量,大小不可变
  6. 支持一次写入多次读取,同一时刻只能有一个写入者
  7. 只支持append操作,不支持修改,修改可以通过删除文件重写实现

2 HDFS架构


NameNode 管理结点

职责:

存储元数据,数据存储在内存中
	元数据包括三类:
		1.文件与目录的属性,包括文件名、创建时间、修改时间等
		2.数据所在DataNode、偏移量,block副本位置(由DataNode上报)
		3.记录所有DataNode的信息,管理DataNode
接收客户端的读写服务

DataNode 数据结点

存储数据

职责:

1.存储数据和block元数据
2.向NameNode汇报block信息
3.向NameNode保持心跳
	如果NameNode10分钟未收到DataNode心跳认为该DataNode已经无效
	将会拷贝无效DataNode上的block到其他DataNode

JournalNode 存储数据变动记录

职责:

保存editlog(数据变化记录)

Client 客户端

职责:

切分数据文件
从NameNode读取文件元数据
从DataNode读取数据

FailoverController

职责:

检测NameNode的健康状况
选举Active NameNode

架构示意图:
在这里插入图片描述

3 HDFS 元数据持久化

元数据分为两个文件,其一是fsimage,是内存中元数据的一个快照;其二是editslog,记录了快照之后的所有编辑操作。

集群重启后,通过合并fsimage和editslog来恢复元数据。

4 HDFS 启动过程(HA 模式)

  1. 启动2个NameNode,一个为Active(主),一个是Standby(备)
  2. Active NameNode读取元数据fsimage,加载到内存中
  3. Active NameNode读取editslog,合并到fsimage中,将fsimage传输给Standby NameNode,在磁盘上生成一个新的fsimage文件,同时创建新的editslog。Active NameNode将其不断发送到JournalNode
  4. Standby NameNode不间断的从JournalNode读取editslog,合并到fsimage
  5. DataNode启动,向NameNode报告block信息
  6. 进入SafeMode(安全模式),此时只响应读取操作
  7. 退出安全模式

5 HDFS 安全模式

  1. Hadoop集群启动后会进入安全模式,此时HDFS只响应读请求,不会响应删除修改请求。
  2. Active NameNode获得DataNode上报的block信息,检查block副本数是否满足条件(NameNode统计元数据和DataNode发送过来的块报告中的统计信息匹配度达到99.999%),满足条件则会退出安全模式。
  3. 如果块有丢失,会自动复制丢失副本的block到DataNode上,直至达到配置的副本数为止,复制后,过一段时间会退出安全模式。
# 退出安全模式
hdfs dfsadmin -safemode leave;
# 强制退出安全模式,上面命令不生效可使用下面的命令
hdfs dfsadmin -safemode forceExit;

6 HA 切换过程

1 当Active NameNode挂掉

  1. Active NameNode挂了
  2. Zookeeper删除Active NameNode 对应的FailoverController创建的结点,Active NameNode 对应的FailoverController之后将Active NameNode的状态修改为Standby状态
  3. Standby NameNode 对应的FailoverController发现删除了,则立即到Zookeeper创建节点,之后将Standby NameNode的状态调整为Active

2 当FailoverController挂掉

  1. Active NameNode对应的FailoverController挂了
  2. Zookeeper中Active NameNode对应的FailoverController创建的临时结点被删除
  3. Standby NameNode对应的FailoverController在Zookeeper
  4. Active FailoverController控制当前的Active NameNode状态变为Standby
  5. Active FailoverController控制之前为Standby的NameNode的状态变为Active

7 FS Shell

常用的一些shell命令,命令和linux shell命令很相似


# 创建目录
hdfs dfs -mkdir /test_mkdir
# 查看制定目录内容,类似shell命令里的ls
hdfs dfs -ls /
# 删除目录
hdfs dfs -rm -R /test_mkdir

命令的官方参考文档:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html

四、MapReduce

MapReduce思想认为所有的数据计算都可以通过map和reduce的组合实现。

1 执行流程

在这里插入图片描述
一段数据的处理过程:

  1. 一行一行读取数据
  2. 按分隔符切割一行数据
  3. map进行转换映射
  4. 拉取相同的key到一个reduce
  5. reduce将拿到的数据聚合
  6. 将所有reduce的输出汇聚到一起即是最终的结果

2 Map

  1. map接收到前面输入的一条数据
  2. 按一条记录为单位进行拆分,形成一条Key-Value数据
  3. 计算Key-Value数据的Partition(哈希取余),把KVP存进buffer里,排序
  4. 写成小文件
  5. 合并成一个大文件(大文件中分区相同的分区的数据放到一起,相同key的放到一起)
  6. map完全执行完毕

map完全执行完毕才会执行reduce

3 Reduce

  1. 拉取map执行完后的结果,进行归并排序,生成一个大文件
  2. 从其他map中拉取key相同的数据,再归并排序,但不生成大文件
  3. 一条条的计算key相同的数据

一组数据调用一次reduce,reduce迭代计算的单位是一条,所以需要的内存很少

五、Yarn

1 资源分配过程

yarn资源分配过程
在这里插入图片描述

  1. 用户向YARN提交应用程序,包括ApplicationMaster程序,启动ApplicationMaster的命令、用户程序等。
  2. Resource Manager通知不忙的NodeManager,为该应用程序分配一个Container,并在Container中启动一个负责管理此次运行的ApplicationMaster
  3. ApplicationMaster启动后,向Resource Manager注册,方便用户通过Resource Manger查看程序的运行状态。之后Application Master为此次任务向Resource Manger申请资源,同时监控程序运行状态,直到程序运行结束。如果没有足够资源,会重复第4步,直到申请到足够资源
  4. Application Master 采用轮巡方式通过RPC协议向Resource Manger申请和领取资源
  5. 一旦Application Master申请到足够的内存和core,就会要求对应的NodeManager启动任务
  6. NodeManger设置运行环境(包括环境变量、jar包、二进制程序等),将任务启动命令写到脚本中,通过运行脚本启动任务
  7. 各个任务通过RPC协议向Application Master汇报状态和进度,既可以让Application Master掌握任务运行状态,又可以在任务失败时进行重试。
    8.程序运行完毕后,Application Master向Resource Manager注销,然后关闭自己

2 Yarn Commond

常用命令

# 查看所有已缓存的包
yarn cache list
# 查看缓存位置
yarn cache dir

# 查看应用列表
yarn application -list
# 查看指定应用程序id或应用名的程序的状态
yarn application -status <ApplicationId or ApplicationName>
# 杀死指定Application ID的程序
yarn application -kill <Application ID>

# 查看指定Application ID的程序的日志
yarn logs -applicationId <application ID> [options]

Yarn命令 官方参考手册:
https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/YarnCommands.html

参考链接

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

https://blog.csdn.net/zpf_940810653842/article/details/106569759

;原文链接:https://blog.csdn.net/qq_39945938/article/details/115485138
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐