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是计算框架、代码层面的组件,所以没有集群之说。

hadoop做大数据分析 hadoop 大数据分析_学习

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整体概述

  1. 主从架构
  1. HDFS集群是标准的master/slave主从架构集群
  2. HDFS = 1 NameNode + n DataNode
  3. NameNode 是HDFS主节点
  4. DataNode 是HDFS从节点
  5. 两者各司其职、共同协调。
  1. 分块存储
  1. HDFS中的文件在物理上是粪块存储(block)的,默认128M。
  2. 大小可以通过配置参数来规定。
  3. 参数位于 hdfs-default.xml中:dfs.blocksize
  1. 副本机制
  1. 文件的所有block都会有副本
  2. 副本数由参数dfs.replication控制,默认值是3
  3. 就是连同本身共3份,额外复制2份
  1. 元数据管理
  1. NameNode管理的元数据,具有两种类型
  1. 文件自身属性信息,如名称、权限、时间、大小等。
  2. 文件块和DataNode之间的映射信息
  1. namespace
  1. HDFS支持传统的层次型文件组织结构
  2. NameNode负责维护文件系统的namespace名称空间
  3. HDFS会给客户端提供一个统一的抽象目录树
  1. 数据块存储
  1. 文件块的具体存储管理由DataNode节点承担。
  2. 每个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整体执行流程图


hadoop做大数据分析 hadoop 大数据分析_学习_02

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。

应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况。