——Hadoop是什么

  1. 是一个由 Apache 基金会所开发的分布式系统基础架构
  2. 主要解决海量数据的储存和海量数据的分析计算问题
  3. 广义上说,Hadoop 是一个更广泛的概念,Hadoop生态圈

——大数据技术生态体系

  • Sqoop:Sqoop 主要用户在 Hadoop、Hive 与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中
  • Flume :Flume 是一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中订制各类数据发送方,用于收集数据
  • Kafka:Kafka 是一种高吞吐量的分布式发布订阅消息系统
  • Spark:Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数据进行计算
  • Flink:Flink 是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多
  • Oozie:Oozie 是一个管理 Hadoop 作业(job)的工作流程调度管理系统
  • HBase:HBase 是一个分布式的、面向列的开源数据库。HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
  • Hive:Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将 SQL 语句转化为 MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析
  • ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等

——Hadoop 1.X、2.X、3.X区别

  • 1.X

    • MapReduce(计算+资源调度)
    • HDFS(数据存储)
    • Common(辅助工具)
  • 2.X
    • MapReduce(计算)
    • Yarn(资源调度)
    • HDFS(数据存储)
    • Common(辅助工具)
  • 3.X:组成上没有变化

——HDFS(Hadoop Distributed File System)

产生背景

  • 是分布式文件管理系统中的一种
  • 通过目录树来定位文件
  • 适合一次写入,多次读出。 一个文件经过创建、写入和关闭之后就不需要改变

架构概述

  • NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等;配置副本策略;处理的客户端的读写请求
  • DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和;执行数据块的读 / 写操作
  • Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份;并非热备,当NameNode挂掉的时候,并不能马上替换NameNode并提供服务;紧急情况,可辅助恢复NameNode
  • Client:将上传到HDFS的文件切分成块(128M / 256M);与NameNode交互,获取文件位置信息;与DataNode交互,读取写入数据;管理HDFS,例如NameNode格式化,对HDFS增删改查

优缺点

  • 优点

    • 高容错性:数据自动保存多个副本,某一个副本丢失之后,可以自动恢复
    • 适合处理大数据:
      数据规模 能够达到GB、TB、PB级别
      文件规模 能够处理百万规模以上的文件数量
    • 可构建在廉价的机器上:通过多副本机制,提高可靠性
  • 缺点
    • 不适合低延时数据访问:毫秒级的存储数据
    • 无法高效的对大量小文件进行存储:存储大量小文件的话,会占用NameNode 大量的内存来存储文件目录和块信息,NameNode的内存总是有限的;小文件的存储的寻址时间会超过读取时间,违反了HDFS的设计目标
    • 不支持并发写入、文件随机修改:一个文件只能有一个写,不允许多个线程同时写;仅支持数据追加,不支持文件的随机修改

常见问题

文件块的大小

  • HDFS的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在2.x / 3.x版本中是128M,1.x版本是64M
  • 如果寻址时间(查找到目标block的时间)为10ms,寻址时间为传输时间的1%时,则为最佳状态,因此传输时间为 10ms / 0.01 = 1000ms = 1s
  • 目前机械硬盘的传输速率普遍为100MB/s

为什么块的大小不能太大,也不能太小

  • HDFS的块设置太小,会增加寻址的时间,程序一直在找块的开始位置
  • 如果块设置设置太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢

写数据流程


最近距离计算:在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接受数据;节点距离(两个节点到达最近的共同祖先的距离总和

读数据流程

NameNode 工作机制

  • Fsimage 文件:HDFS 文件系统源数据的一个永久性的检查点,其中包含 HDFS 文件系统的所有目录和文件inode的序列化信息
  • Edits 文件:存放 HDFS 文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到 Edits 文件中
  • 默认 1 小时检查执行一次,1 分钟检查一次操作次数,当操作次数达到 100 w 时,SecondaryNameNode 执行一次

DataNode 工作机制

数据的完整性

如果存储DataNode节点上数据的磁盘发生损坏,却没有被发现,是否很危险?如何解决

  1. 当 DataNode 读取 Block 的时候,它会计算 CheckSum
  2. 如果计算后的 CheckSum,与 Block 创建时值不一样,说明 Block 已经损坏
  3. Client 读取其他 DataNode 上的 Block
  4. 常见的校验算法 crc(32),md5(158),sha1(160)
  5. DataNode 在其文件创建后周期验证 CheckSum

——MapReduce

定义

  • MapReduce 是一个分布式运算程序的编程框架,是用户开发“基于 Hadoop 的数据分析应用”的核心框架
  • MapReduce 核心功能是将用户编写的业务逻辑代码自带默认组件整合成一个完整的分布式运算程序,并发运行在一个 Hadoop 集群上

优缺点

  • 优点

    • 易于编程:用户只需要关心业务逻辑,实现框架的接口
    • 良好的扩展性:可以动态增加服务器,解决计算资源不够的问题
    • 高容错性:任何一台机器挂掉,可以将任务转移到其他节点
    • 适合海量数据计算(TB/PB) :几千台服务器共同计算
  • 缺点
    • 不擅长实时计算(Mysql)
    • 不擅长流式计算(SparkStreaming / Flink)
    • 不擅长DAG有向无环图(计算出来的结果作为下一次计算的参数,迭代计算)计算(Spark)

架构概述

  • Map 阶段并行处理输入数据
  • Reduce 阶段对 Map 结果进行汇总

MapReduce核心思想

MapReduce 进程

一个完整的 MapReduce 程序在分布式运行时有三类实例进程:

  1. MrAppMaster:负责珍格格程序的过程调度及状态协调
  2. MapTask:负责 Map 阶段的整个数据处理流程
  3. ReduceTask:负责 Reduce 阶段的整个数据处理流程

序列化

定义

  • 序列化:把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输
  • 反序列化:将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据,转换成内存中的对象

问题
为什么不用Java 的序列化

  • Java 的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承体系等),不便于网络中高效传输
  • Hadoop 自身序列化存储空间少,传输速度快,可在机器互相操作

InputFormat 数据输入

数据块和与数据切片

  • 数据块:Block 是HDFS 物理上把数据分成一块一块,数据块是HDFS存储数据单位
  • 数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapReduce 程序计算输入数据的单位,一个切片会对应启动一个MapTask

切片机制

  • 一个 Job 的 Map 阶段并行度由客户端再提交 Job 时的切片数决定
  • 每个 Split 切片分配一个 MapTask 并行实例处理
  • 默认情况下,切片大小 = BlockSize
  • 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

Shuffle 机制

定义:Map 方法之后,Reduce 方法之前的数据处理过程称之为 Shuffle (打乱顺序,洗牌)

分区排序:按照字典顺序对 Key 的索引使用快速排序

MapTask 工作机制

ReduceTask 工作机制


注意事项

  • ReduceTask = 0 ,表示没有 Reduce 阶段,输出文件个数和Map 个数一致
  • ReduceTask 默认值就是1,所以输出文件个数为1
  • 如果数据分布不均匀,就有可能在Reduce 阶段产生数据倾斜
  • ReduceTask 数量并不是任意设置,还要考虑业务逻辑需求,有些情况下,需要计算全局汇总结果,就只能有1个ReduceTask
  • 具体多少个ReduceTask ,需要根据集群性能而定
  • 如果分区数不是1,但是ReduceTask 为1,不执行分区过程,因为在MapTask 的源码中,执行分区的前提是先判断ReduceNum 个数是否大于1,不大于1肯定不执行

数据清洗-ETL(Extract-Tramsform-Load)

定义

  • 用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL 一词较常用在数据仓库,但其对象并不限于数据仓库
  • 在运行核心业务 MapReduce 程序之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理过程往往只需要 Mapper 程序,不需要运行 Reduce 程序

——YARN

Yarn 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序

架构概述

  • ResourceManager(RM):整个集群资源(内存、CPU等)的管理者
  • NodeManager(NM):单个节点服务器的管理者
  • ApplicationMaster(AM):单个任务运行的负责人
  • Container:容器,相当于一台独立的服务器,里面封装了任务运行所需要的资源(内存、CPU、磁盘、网络)
  • 注意
    • 客户端可以有多个
    • 集群上可以运行多个 ApplicationMaster
    • 每个 NodeManager 上可以有多个 Container

YARN 工作机制

HDFS、YARN、MapReduce 三者关系

YARN 调度器

Hadoop 作业调度器主要有三种:FIFO、容量、公平调度器。Hadoop 3.1.3 默认的资源调度器是容量调度器

FIFO调度器

  • 单队列,根据提交作业的先后顺序,先来先服务

容量调度器

  • 是Yahoo开发的多用户调度器
  • 多队列:每个队列可配置一定的资源量
  • 容量保证:管理员可为每个队列设置资源最低保证和资源使用上限
  • 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用和程序提交,则其他队列借调的资源会归还给该队列
  • 多租户:支持多用户共享集群和多应用程序同时运行。为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定
  • 分配算法
    • 队列资源分配:从root 开始,使用深度优先算法,优先选择资源占用率最低的队列分配资源
    • 作业资源分配:默认按照提交作业的优先级和提交时间顺序分配资源
    • 容器资源分配:按照容器的优先级分配资源,如果优先级相同,按照数据本地性原则

公平调度器

  • 是 Facebook 开发的多用户调度器
  • 具有与容量调度器的相同特点
  • 不同点为
    • 核心调度策略不同(容量调度器优先选择资源利用率低的队列;公平调度器优先选择对资源的缺额比例大的队列)
      缺额:某一个时刻一个作业应获得资源和实际获取资源的差距叫“缺额”
    • 每个队列可以单独设置资源分配方式(容量调度器:FIFO、DRF;公平调度器:FIFO、FAIR、DRF)

——常见面试题

端口号

  • Hadoop 3.x

    • HDFS NameNode 内部通信端口:8020 / 9000 / 9820
    • HDFS NameNode 对用户的查询端口: 9870
    • Yarn 查看任务运行情况:8088
    • 历史服务器:19888
  • Hadoop 2.x
    • HDFS NameNode 内部通信端口:8020 / 9000
    • HDFS NameNode 对用户的查询端口: 50070
    • Yarn 查看任务运行情况:8088
    • 历史服务器:19888

常用配置文件

  • Hadoop 3.x

    1. core-site.xml
    2. hdfs-site.xml
    3. yarn-site.xml
    4. mapred-site.xml
    5. workers
  • Hadoop 3.x
    1. core-site.xml
    2. hdfs-site.xml
    3. yarn-site.xml
    4. mapred-site.xml
    5. slaves

大数据之 Hadoop 基本概念相关推荐

  1. 大数据之Hadoop——1概念

    1 Hadoop是什么 1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 2)主要解决海量数据的存储和海量数据的分析计算问题. 3)广义上来说,Hadoop通常是指一个更广泛的概 ...

  2. 大数据与Hadoop有什么关系?大数据Hadoop入门简介

    学习着数据科学与大数据技术专业(简称大数据)的我们,对于"大数据"这个词是再熟悉不过了,而每当我们越去了解大数据就越发现有个词也会一直被提及那就是--Hadoop 那Hadoop与 ...

  3. 【快速入门大数据】hadoop和它的hdfs、yarn、mapreduce

    文章目录 导学 大数据概述 初识Hadoop 概述 核心组件 HDFS分布式文件系统 资源调度系统YARN MapReduce 优势 发展史 生态系统 发行版本选择 企业应用案例 第3章 分布式文件系 ...

  4. 大数据和Hadoop什么关系?为什么大数据要学习Hadoop?

    大数据是一系列技术的统称,经过多年的发展,大数据已经形成了从数据采集.整理.传输.存储.安全.分析.呈现和应用等一系列环节,这些环节涉及到诸多大数据工作岗位,这些工作岗位与物联网.云计算也都有密切的联 ...

  5. 【大数据】Hadoop—— 三大核心组件理论入门 | 完全分布式集群搭建 | 入门项目实战

    文章目录 前言 大数据概述 时代背景 4V特点 大数据思维 核心技术 储存 计算 相关技术 云计算 物联网 Hadoop简介 简介 版本之分 项目生态结构 安装和部署 HDFS 简介 集群结构 实现目 ...

  6. 大数据和Hadoop平台介绍

    大数据和Hadoop平台介绍 定义 大数据是指其大小和复杂性无法通过现有常用的工具软件,以合理的成本,在可接受的时限内对其进行捕获.管理和处理的数据集.这些困难包括数据的收入.存储.搜索.共享.分析和 ...

  7. 大数据与Hadoop之间是什么关系

    广义上讲 大数据是时代发展和技术进步的产物.Hadoop只是一种处理大数据的技术手段. "大数据"概念在1980年由维克托·迈尔-舍恩伯格及肯尼斯·库克耶 在<第三次浪潮&g ...

  8. 大数据 python hadoop_大数据与Hadoop

    1. 大数据简介 1.1 大数据的由来 随着计算机技术的发展,互联网的普及,信息的积累已经到了一个非常庞大的地步,信息的增长也在不断的加快,随着互联网.物联网建设的加快,信息更是爆炸式增长,收集.检索 ...

  9. 大数据和Hadoop时代的维度建模和Kimball数据集市

    维度建模已死? 在回答这个问题之前,让我们回头来看看什么是所谓的维度数据建模. 为什么需要为数据建模? 有一个常见的误区,数据建模的目的是用 ER 图来设计物理数据库,实际上远不仅如此.数据建模代表了 ...

  10. 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】

    视频地址:尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优) 尚硅谷大数据技术Hadoop教程-笔记01[大数据概论] 尚硅谷大数据技术Hadoop教程-笔记02[Hadoop-入 ...

最新文章

  1. 柏林噪声产生火焰等纹理
  2. OpenCV的cv::cvtColor函数之“CV_RGB2GRAY”: 未声明的标识符错误解决方法
  3. PostgreSQL-数据复制
  4. 浙大通讯与计算机网络离线作业,浙大2015年 通信与计算机网络离线作业
  5. SkGradientShader::CreateLinear 的参数。
  6. 计算机的iscsi配置,PC端的iSCSI参数设置方法
  7. DirectX 矩阵
  8. python2和3语法区别_python2和3语法区别
  9. 【数据结构】二叉树的python实现
  10. Spectra Logic磁带库成SGI方案中标准化产品
  11. 【微信小程序】性能分析Trace工具
  12. php原创度检测工具,推荐一款不错的伪原创工具
  13. jq UI中的dialog属性设置
  14. 计算机硬盘数据如何恢复,如何防止硬盘数据被恢复?毁灭数据教程
  15. 一文彻底搞懂加密、数字签名和数字证书,看不懂你打我!
  16. 数据库中第一范式、第二范式、第三范式
  17. iOS测试工程师如何用xcode进行性能测试
  18. seo外包公司可以为企业带来什么好处
  19. jackson 入门
  20. Helocobic-energy 小电视

热门文章

  1. 菜鸟教程学习JAVA 01
  2. 群晖 php,群晖NAS安装配置typecho博客教程
  3. webdriver中PDF控件无法显示的问题(IE兼容性)
  4. 3.1、如何通过ISP(FlyMcu串口)下载程序(附CH340驱动及FlyMcu安装包)
  5. 用matlab还原全息图像,一种全息再现图像的零级像消除方法与流程
  6. 用友U8.72总账报表速学手册
  7. 小米球外网映射本地tomcat
  8. Python 求水仙花数
  9. Ubuntu(小名乌班图)的安装顺便附带VMware的安装教程,以及VM的激活密钥
  10. java中定义存放汉字的数组_Java中如何存储汉字