Hadoop
一、大数据
数据分析的基本流程
明确分析目的和思路==》数据收集==》数据处理==》数据分析==》数据展现==》报表撰写
大数据的5V特征
- Volume 数据体量大
- 采集数据量大
- 存储数据量大
- 计算数据量大
- TB、PB级别起步
- Variety 种类、来源多样化
- 种类:结构化、半结构化、非结构化
- 来源:日志文本、图片、音频、视频
- Value 低价值密度
- 信息海量但是价值密度低
- 深度复杂的挖掘分析需要机器学习参与
- Velocity 速度快
- 数据增长速度快
- 获取数据速度快
- 数据处理速度快
- Veracity 数据的质量
- 数据的准确性
- 数据的可信赖度
分布式和集群的概念
- 分布式:多台机器,每台机器上部署不同组件
- 集群:多台机器,每台机器上部署相同组件
大数据存储和计算
- 多台机器分布式存储
- 多台机器分布式计算
二、Hadoop
1、Hadoop介绍
狭义上说:Hadoop指的是Apache软件基金会的一款开源软件。
Java语言实现
Hadoop核心组件
Hadoop HDFS(分布式文件存储系统):解决海量数据存储
Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度
Hadoop MapReduce(分布式计算框架):解决海量数据计算
广义上Hadoop指的是围绕Hadoop打造的大数据生态圈
底层是HDFS ==》 YARN ==》 调度、资源管理、任务部署、安全 ==》各种各样基于Hadoop的计算框架
2、Hadoop发展史
- Hadoop之父:Doug Cutting
- 为了解决数十亿网页的存储和索引问题
- 根据Google的3篇论文得到启发
3、Hadoop现状
- HDFS作为分布式文件存储系统,处在生态圈的底层与核心地位;
- YARN作为分布式通用的集群资源管理和任务调度平台,支撑各种计算引擎运行,保证了Hadoop的地位;
- MapReduce作为大数据生态圈第一代分布式计算引擎,由于自身设计的模型所产生的弊端,导致企业一线几乎不再直接使用MapReduce进行编程处理,但是很多软件的底层依然在使用MapReduce引擎来处理数据。
4、Hadoop特性优点
- 扩容能力
- 成本低
- 效率高
- 可靠性
5、Hadoop集群整体概述
- Hadoop集群包括两个集群:HDFS集群、YARN集群
- 两个集群逻辑上分离、通常物理上在一起
- 两个集群都是标准的主从架构集群
HDFS集群(分布式存储)
- 主角色:NameNode (NN)
- 从角色:DataNode (DN)
- 主角色辅助角色:SecondaryNameNode (SNN)
YARN集群(资源管理、调度)
- 主角色:ResourceManager (RM)
- 从角色:NodeManager (NM)
Hadoop集群简介
HDFS和YARN物理上在一起,逻辑上分离
逻辑上分离:
两个集群互相之间没有依赖,互不影响。
物理上在一起:
某些角色进程往往部署在用一台物理服务器上。
MapReduce是计算框架、代码层面的组件,所以没有集群之说。
6、Hadoop配置文件
xxxx-site.xml,site表示的是用户定义的配置,会覆盖default中的配置
core-site.xml 核心模块配置
hdfs-site.xml hdfs文件系统模块配置
mapred-site.xml MapReduce模块配置
yarn-site.xml yarn模块配置
所有的配置文件目录:/xxx/hadoop-3.x.x/etc/hadoop
三、HDFS分布式文件系统
HDFS(Hadoop Distributed File System)分布式文件系统
文件系统定义
- 文件系统是一种存储和组织数据的方法,实现了数据的存储、分级组织、访问和获取等操作。
- 文件系统使用目录树概念,替代了硬盘等物理设备使用数据快的概念,用户无需担心数据底层存在硬盘什么位置,只需要记住这个文件的目录即可。
- 文件系统通常使用硬盘和关盘这样的存储设备,并维护文件在设备中的物理位置。
数据、元数据
- 数据
- 指存储的内容本身,如文件、视频、图片等,这些数据底层最终是存储在磁盘等存储介质上的,一般用户无需关心数据的具体位置,只需要基于目录树进行增删改查即可,即使针对数据的操作由文件系统完成。
- 元数据
- 元数据(metadata)又称之为解释性数据,记录数据的数据;
- 文件系统元数据一般指文件大小、最后修改时间、底层存储位置、属性、所属用户、权限等信息。
分布式存储系统核心属性
- 分布式存储
- 多机横向扩展:机器不够加机器,理论上无限扩展
- 元数据记录
- 元数据记录下文件及其存储位置信息,快速定位文件位置
- 分块存储
- 文件分块存储在不同机器,针对块并行操作提高效率
- 副本机制
- 不同机器设置备份,冗余存储,保证数据安全
HDFS简介
- HDFS主要是解决大数据如何存储的问题的。分布式意味着横跨多台计算机。
- 能够在普通硬件上运行,高度容错。
- 使用多台计算机存储文件,并且提供统一的访问接口。NameNode进行管理。
HDFS整体概述
- 主从架构
- HDFS集群是标准的master/slave主从架构集群
- HDFS = 1 NameNode + n DataNode
- NameNode 是HDFS主节点
- DataNode 是HDFS从节点
- 两者各司其职、共同协调。
- 分块存储
- HDFS中的文件在物理上是粪块存储(block)的,默认128M。
- 大小可以通过配置参数来规定。
- 参数位于 hdfs-default.xml中:dfs.blocksize
- 副本机制
- 文件的所有block都会有副本
- 副本数由参数dfs.replication控制,默认值是3
- 就是连同本身共3份,额外复制2份
- 元数据管理
- NameNode管理的元数据,具有两种类型
- 文件自身属性信息,如名称、权限、时间、大小等。
- 文件块和DataNode之间的映射信息
- namespace
- HDFS支持传统的层次型文件组织结构
- NameNode负责维护文件系统的namespace名称空间
- HDFS会给客户端提供一个统一的抽象目录树
- 数据块存储
- 文件块的具体存储管理由DataNode节点承担。
- 每个block都可以在多个DataNode上存储。
命令行界面(command-line interface)CLI
echo [选项][输出内容] 用于字符串的输出
命令的输出内容如果没有特殊含义,则原内容输出到屏幕
如果输出内容有特殊含义,则输出打印其含义。
echo 向文本中写入内容
echo “content” > 文件名 向文件中写入内容,原先被覆盖
echo “content” >> 文件名 向文件中写入内容,追加在内容后面 hadoop fs -ls file:/// # 操作本地文件系统
hadoop fs -ls hdfs://lyfx/ #操作HDFS分布式文件系统
hadoop fs -ls / # 直接根目录,加载读取fs.defaultFS值
hadoop fs -cat # 读取指定文件全部内容,显示在标准输出控制台,注意:** 对于大文件内容读取,慎重 **
hadoop fs -rm aaa.txt # 删除aaa.txt文件
hadoop fs -rmdir aaa # 删除aaa目录 下载HDFS文件
hadoop fs -get [-f][-p]
将HDFS文件下载到本地文件系统指定目录
-f覆盖目标文件(如果已存在)
-p保留访问和修改时间,所有权和权限
上传到HDFS文件 hadoop fs -put
HDFS数据移动 hadoop fs -mv
角色介绍
主角色:NameNode
- NameNode是Hadoop分布式文件系统的核心。架构中的主角色。
- NameNode维护和管理文件系统的数据,包括名称空间、目录树结构、文件和块的位置信息、访问权限等信息。
- 基于此,NameNode成为了访问HDFS的唯一入口。
- NameNode 内部通过内存和磁盘文件种方式管理元数据。
从角色:DataNode
- 负责具体的数据块存储
- DataNode的数量决定了HDFS集群的整体数据存储能力。
主角色辅助角色:Secondery Name Node
- 充当NameNode的辅助节点,但不能替代NameNode。
- 主要帮助主角色进行元数据文件的合并动作。
角色职责
- NameNode 职责
- 仅存储HDFS的元数据,所有文件的目录树,跟踪整个集群中的文件,不存储实际数据。
- NameNode 知道任何给定文件的块列表和其位置。
- NameNode 不持久化每个文件中各个块所在的DataNode的位置信息,这些信息会在系统启动的时候,从DataNode重建,并及时反馈给NameNode。
- NameNode 是Hadoop集群的单点故障,所在机器通常会配置大量内存(RAM)
- DataNode 职责
- 负责最终数据块block的存储,是集群的从角色(slave)
- 启动时,会将自己注册到NameNode,并汇报自己负责持有的块列表。
- 单个DataNode关闭时,不影响数据的可用性,有备份。
- DataNode所在机器需要大量磁盘空间。
核心概念 – Pipeline 管道
- Pipeline是HDFS在写数据过程中采用的一种数据传输方式。
客户端将数据块写入第一个数据节点,第一个数据节点保存数据之后,再将块复制到第二个数据节点,后者保存后将其复制到第三个数据节点。
- ACK(Acknowledge character) 应答响应
ACK确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符,表示发来的数据已确认接受无误。
在HDFS pipeline管道传输数据的过程中,传输的反方向会进行ACK校验,确保数据传输安全。
- 默认三副本存储策略
- 由BlockPlacementPolicyDefault类指定
- 第一块副本:优先客户端本地,否则随机
- 第二块副本:不同于第一块副本的不同机架
- 第三块副本:第二块副本相同机架不同机器
四、MapReduce
核心思想:先分再合,分而治之
reduce:减少、浓缩
- Map表示第一阶段,负责“拆分”
- Reduce表示第二节点,负责“合并”。对map的结果进行全局汇总。
- 不可拆分的计算任务或相互间有依赖关系的数据,无法进行并行计算。
map:对一组数据元素进行某种重复式的处理
reduce:对map的中间结果进行某种进一步的结果整理。
MR执行流程
Input–>splite–>Mapping–>Shuffing–>Reducing–>Filnallresult
MapReduce整体执行流程图
Map阶段执行过程
- 第一阶段:把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划,默认(128M),每个切片有一个Maptask处理。
- 第二阶段:对切片中数据按照一定的规则读取解析返回对,默认按行读取。key是行的起始偏移量,value是本行文本内容。
- 第三阶段:调用Mapper类中的map方法处理数据
- 每读取解析出来的一个,调用一次map方法。
- 第四阶段:按照一定的规则对map输出的键值对进行分区 partition。
- 第五阶段:Map输出数据写入内存缓冲区,达到比例溢出到磁盘上,溢出spill的时候很久key进行排序sort。默认字典序排序。
- 第六阶段:对所有溢出文件进行最终的merge合并,成为一个文件。
spill溢出:如果读一行数据,往磁盘写一行数据,这样IO操作频繁,效率低,所有先写入内存缓冲区,等达到一定比例再写入磁盘。
Reduce阶段执行过程
- 第一阶段:ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据。
- 第二阶段:把拉取来的数据,全部进行合并merge,即把分散的数据合并成一个大的数据,再对合并后的数据排序。
- 第三阶段:对排序后的键值对调用reduce方法,键相同的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中。
Shuffle概念 (洗牌,混洗)
在MapReduce中,shuffle将map端的无规则输出按指定的规则整理成具有一定规则的数据,以便reduce端处理。
一般把从map产生输出开始到reduce取得数据作为输入之前的的过程称作shuffle。
shuffle机制的弊端
shuffle中频繁涉及到数据在内存、磁盘之间的多次往复。过程太繁琐。
shuffle是MapReduce程序的核心与精髓,也是MR计算慢的原因。
五、YARN
简介(保住了Hadoop的江湖地位)
Apache Hadoop YARN(Yet Another Resource Negotiator ,另一种资源协调者)
是一种新的Hadoop资源管理器。
YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度。
功能说明
- 资源管理系统:集群的硬件资源和程序运行相关,比如内存、CPU等。(磁盘是由HDFS管理的)。
- 调度平台:多个程序同时申请计算资源时如何分配,调度的规则(算法)。
- 通用:不仅支持MR程序,理论上支持各种计算程序,YARN不关心你干什么,只关心你要什么资源,在有的情况下给你,用完之后还我。
YARN3大组件
Resource Manager(RM)
YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限。通过NM分配、管理各机器上的计算资源。
NodeManager(NM)
YARN中的从角色,一台机器上一个,负责管理本机的计算资源。根据RM的命令,启动container容器,监视容器的资源使用情况,并向RM主角色汇报资源使用情况。
ApplicationMaster(AM)
用户提交的每个应用程序均包含一个AM。
应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。