微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Hadoop课程知识点总结

第一章 大数据概述

大数据的定义

大数据是指无法在一定时间内用常规软件工具对其 内容进行抓取、管理和处理的数据集合,比如:与人类社会活动有关的网络数据。

三次信息浪潮

在这里插入图片描述

信息技术为大数据提供的技术支撑

  • 存储设备容量不断增加
  • cpu处理能力大幅提升
  • 网络带宽不断增加

数据产生方式的变革

  • 运营式系统阶段:管理信息应用系统
  • 用户原创内容阶段:WEB 2.0, 微博、微信等
  • 感知式系统阶段:传感器,物联网

大数据的概念(4V+xV)

volume:数据量大

variety:类型繁多

veLocity:速度快,时效高

valueless:价值密度低

variability:可变性

veracity:真实性

数量与类型

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

速度与价值

  • 从数据的生成到消耗,时间窗口非常小,可用于生成决策的时间非常少

  • 1秒定律:这一点也是和传统的数据挖掘技术有着本质的不同

  • 价值密度低,商业价值高

    以视频为例,连续不间断监控过程中,可能有用的数据仅仅有一两秒,但是具有很高的商业价值

大数据的影响

科学研究

先后经历四种范式:

实验——理论 ——计算——数据

思维方式

  • 全样而非抽样
  • 效率而非精确
  • 相关而非因果

社会发展

大数据决策逐渐成为一种新的决策方式,大数据应用有力促进了信息技术与各行业的深度融合,大数据开发大大推动了新技术和新应用的不断涌现。

就业市场

大数据的兴起使得数据科学家成为热门职业。

人才培养

大数据的兴起,将在很大程度上改变中国高校信息技术相关专业的现有教学和科研体制。

大数据的应用

互联网+

  • 互联网企业之所以取得令人瞩目的成绩,其核心的本质就是包括用户网络操作的大数据,进行记录和分析,形成用户 “行为指纹” ,从而洞悉用户的潜在的、真实的需求,形成预判。

  • 用户行为分析,是大数据技术的典型应用之一。

电商

推荐系统

推荐系统类型:

用户内容、协同、混合推荐。

大数据关键技术

技术层面功能
数据采集利用ETL工具将分布的、异构数据源中的数据如关系数据、平面数据文件等,抽取到临时中间层后进行清洗、转换、集成, 最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础;或者也可以把实时采集的数据作为流计算系统的 输入,进行实时处理分析
数据存储、管理利用分布式文件系统、数据仓库、关系数据库、Nosql数据库、云数据库等,实现对结构化、半结构化和非结构化海量数据的存储和管理
数据处理、分析利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析;对分析结果进行可视化呈现,帮助人们更好地理解数据、分析数据
数据隐私、安全在从大数据中挖掘潜在的巨大商业价值和学术价值的同时,构建隐私数据保护体系和数据安全体系,有效保护个人隐私和数据安全

两大核心技术

分布式存储:HDFS/GFS、BigTable/HBase、Nosql、Newsql

分布式处理:MapReduce

大数据计算模式

模式解决问题代表产品
批处理计算针对大规模数据的批量处理MapReduce、Spark等
流计算针对流数据的实时计算Storm、S4、Flume、Streams、Puma、DStream、Super Mario、银河流数据处理平台等
图计算针对大规模图结构数据的处理pregel、GraphX、Giraph、Powergraph、Hama、Goldenorb等
查询分析计算大规模数据的存储管理和查询分析Dremel、Hive、Cassandra、Impala等

大数据、云计算与物联网

在这里插入图片描述

第二章 Linux使用与Hadoop介绍

Linux基础

  • Linux泛指一类操作系统,具体的版本有: Ubuntu、CentOS、Debian、Red Hat、OpenSUSE、UOS(统信)、Deepin(深度)、优麒麟(Ubuntu Kylin)等

  • Linux是一个用户、多任务的操作系统。

  • Linux支持带卓面(GNOME)的鼠标操作方式(GUI),也支持不带卓面的命令行操作方式(CMD)。

系统目录结构

在这里插入图片描述

基本操作

目录文件

  • pwd ,查看当前路径

  • cd 或 cd ~ 进入用户主目录, ~表示用户主目录

  • mkdir mydir 在当前目录下创建子目录mydir

  • rmr -R mydata 删除目录(R表示递归删除其下子目录)

  • rm filename 删除文件

  • touch filename 创建一个文件内容为空)

压缩包:

  • tar:解包(x)、压包(c)。

    z表示gzip格式

    tar -xzvf 待解压文件名 –C 目标路径

    tar -czvf 目标压缩文件文件或目录

查看文件

文本编辑器

vi/vim:

在这里插入图片描述

Linux与Windows的换行符:

  • Linux/unix:\n
  • Windows:\r\n

文件格式互转:

  • unix2dos:将具有unix风格的格式文件转化为具有window下的格式文件
  • dos2unix:将具有windows风格的格式文件转化为unix下的格式文件

Hadoop概述

Hadoop简介

  • Hadoop是Apache软件基金会旗下的一个开源分布 式计算平台,为用户提供了系统底层细节透明的分布式基础架构;
  • Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中;
  • Hadoop的核心是分布式文件系统HDFS(Hadoop distributed File System)和MapReduce;
  • Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力;

Hadoop定义

Apache开源软件基金会开发的运行于大规模普通服务器上的大数据存储、计算、分析的分布式存储系统和分布式运算框架。

Hadoop项目结构

在这里插入图片描述

Hadoop集群的安装与使用

概述

  • 计算机集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。
  • 集群系统中的单个计算机通常称为节点,通常通过局域网连接。
  • 集群技术的特点:
    • 通过多台计算机完成同一个工作。达到更高的效率;
    • 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。

运行模式

  • 单机模式(Standalone,独立或本地模式:安装简单,运行时只启动单个进程,仅调试用途;
  • 伪分布模式(Pseudo-distributed):在单节点上同时启动 namenode、datanode、secondarynamenode、resourcemanager 、nodemanager 等5个进程,模拟分布式 运行的各个节点;
  • 完全分布式模式(Fully-distributed):正常 的Hadoop集群,由多个各司其职的节点构成。

第三章 HDFS技术

分布式文件系统

  • 分布式文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连;

  • 分布式文件系统的基于c/s模式。通常,一个分布式文件系统提供多个供用户访问的服务器;

  • 分布式文件系统一般都会提供备份和容错的功能

  • 分布式文件系统一般都基于OS的本地文件系统

    • ext3、ext4
    • NTFS

为什么需要分布式文件系统

  • 传统文件系统最大的问题是容量和吞吐量的限制;
  • 用户多应用的并行读写是分布式文件系统产生的根源
    • 一块硬盘的读写性能,比不上多块硬盘同时读写的性能
    • 1 HDD = 75MB/sec
    • 1000 HDDs = 75GB/se
  • 扩充存储空间的成本低廉
  • 可提供冗余备份;
  • 可以为分布式计算提供基础。

HDFS简介

  • HDFS是一个使用Java实现的、分布式的、可横向扩展的文件系统;
  • 是Hadoop的核心组件;

基础思想

HDFS为了做到可靠性(reliability)创建多份数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点中(compute nodes),MapReduce就可以在它们所在的节点上处理这些数据了。

在这里插入图片描述

设计目标

  • 基于廉价的普通硬件,可以容忍硬件出错;

    • 系统中的某一台或几台服务器出现故障时,系统仍可用且数据完整。
  • 大数据集(大文件);

    • HDFS适合存储大量文件,总存储量可达到PB、EB级;
    • HDFS适合存储大文件,单个文件一般在百MB级之上;
    • 文件数目适中。
  • 简单的一致性模型;

    • HDFS应用程序需要一次写入多次读取一个文件的访问模式;
    • 支持追加(append)操作,但无法更改已写入数据
  • 顺序的数据流访问;

    • HDFS适合用于处理批量数据,而不适合用于随机定位访问。
  • 侧重高吞吐量的数据访问,可容忍数据访问的高延迟;

  • 为把“计算”移动到“数据”提供基础和便利。

优劣势

适合做什么:

  • 存储并管理PB级数据;
  • 处理非结构化数据;注重数据处理的吞吐量(latency不敏感);
  • 应用模式为:write-once-read-many存取模式。

不适合做什么:

相关概念

block, Meta data, name node, data node, secondary name node, client.

在这里插入图片描述

block 块

传统块存储介质中,块是读写的最小数据单位 (扇区)。windows上文件系统块,被称为簇。

  • HDFS使用了块的概念,认大小128M/256M字节;
    • 可针对每个文件配置,由客户端指定;
    • 每个块有一个自己的全局ID
  • HDFS将一个文件分为一个或数个块来存储。
    • 每个块是一个独立的存储单位;
    • 以块为单位在集群服务器上分配存储。

与传统文件系统不同的是,如果实际数据没有达到块大小,则并不实际占用整个块磁盘空间

HDFS采用抽象的块概念的好处:

  • 支持大规模文件存储:大文件被分拆成若干个文件块并被分发到不同的节点上,因此文件的大小不会受到单个节点的存储容量的限制,可充分利用集群中所有的磁盘;
  • 简化系统设计:容易计算出一个节点可以存储多少文件块;方便管理元数据,元数据不需要和文件块一起存储,可以由其他系统负责管理元数据;
  • 适合数据备份:每个文件块都可以冗余存储到多个节点上,提高了系统的容错性和可用性。
Meta data 元数据

元数据内容包括

  • 文件系统目录树信息:
    • 文件名、目录名;
    • 文件和目录的从属关系;
    • 文件和目录的大小,创建及最后访问时间;
    • 权限。
  • 文件和块对应的关系:
  • 块的存放位置:
    • 机器名,块ID。

HDFS对元数据和实际数据采取分别存储方法元数据存储在 Name Node 服务器上;实际数据储存在集群的 Data Node 中。

在这里插入图片描述

name node 命名节点
  • Name Node 是用来管理文件系统命名空间的组件;

  • 一个HDFS集群只有一台活跃的 Name Node ;

  • Name Node 上存放了HDFS的元数据;

    • 记录了每个文件中各个块所在的数据节点的位置信息;
    • 一个HDFS集群只有一份元数据,可能有单点故障问题。
  • 元数据工作时在 Name Node 内存中,以便快速查询

    • 1G内存大致可存放 1,000,000 块对应的元数据信息,按缺省每块64M计算,大致对应64T实际数据;
    • 集群关闭时,元数据持久化到磁盘中,启动集群时,需要 将元数据装载到内存中。
secondary name node 次命名节点

第二名称节点是 HDFS 架构中的一个组成部 分,协助 Name Node 完成 FsImage 和edits文件合并工作,使得内存中的 FsImage 保持“最新” 。Secondary Name Node 一般是单独运行在一台机器上。

data node 数据节点
  • 块的实际数据存放在 Data Node 上;
  • 每个块会在本地文件系统产生两个文件一个是实际的数据文件,另一个是块的附加信息文件,其中包括块数据的长度、校验和,以及时间戳;
  • Data Node 通过心跳包(Heartbeat)与 Name Node 通讯;
  • 客户端读取/写入数据的时候直接与 Data Node 通信;
  • 集群运行中可以安全加入和退出一些机器。

HDFS原理

体系结构

  • 主从结构;
  • 通信协议:TCP/IP
  • Name node 单点故障

在这里插入图片描述

Name Node 的作用

  • Name Node 是一个中心服务器,单一节点,负责管理文件系统的命名空间 namespace,以及客户端文件的访问
  • 文件操作,Name Node 负责文件元数据的操作,Data Node 负责处理文件内容读写请求数据流不经过 Name Node ,只会询问它跟哪一个 Data Node 联系;
  • 副本在 Data Node 上的存放信息由 Name Node 来控制,根据全局情况做出块放置决定,读取文件时 Name Node 尽量用户先读取最近的副本,降低带块消耗和读取时延;
  • Name Node 全权管理数据块的复制,它周期性地从集群中的每一个 Data Node 接收心跳信号(Heart beat)块状态报告(Block report)。接收到心跳信号意味着该 Data Node 节点工作正常。块状态报告包含了一个该 Data Node 上所有数据块的列表;
  • Data Node 启动后向 Name Node 注册,通过后,周期性向Name Node 上报所有块信息;
  • 心跳是每3秒一次,心跳返回结果带有 Name Node 给该 Data Node 的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个 Data Node 的心跳,则认为该节点不可用,并copy其上的block到其他 Data Node 。
数据结构

Name Node 负责管理分布式文件系统的 Namespace 命名空间,保存了两个核心数据结构:FsImageEditLog

在这里插入图片描述

Name Node 的启动和运行
启动时
  1. 通过 FsImage 读取元数据,载入内存;
  2. 执行 EditLog 中的记录,在内存中生成最新的元数据;
  3. 清空 EditLog ,保存最新的元数据到 FsImage ;
  4. 收集 Data Node 汇报的块的位置信息。

​ 在名称节点启动的时候,它会将 FsImage 文件中的内容加载到内存中,之后再执行 EditLog 文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。

​ 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的 FsImage 文件一个空的 EditLog 文件

名称节点起来之后,HDFS 中的更新操作会重新写到 EditLog 文件中,因为 FsImage 文件一般都很大(GB级别的很常见),如果所有的更新操作都往 FsImage 文件添加,这样会导致系统运行的十分缓慢,但是,如果往 EditLog 文件里面写就不会这样,因为EditLog 要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,EditLog 文件都需要同步更新。

EditLog 文件过大引发的问题:

​ 只有在 Name Node 重启时,edit logs才会合并到 FsImage 文件中,从而得到一个文件系统的最新快照。

​ 在名称节点运行期间,HDFS的所有更新操作都是直接写到 EditLog 中,久而久之, EditLog 文件将会变得很大。

​ 虽然这对名称节点运行时候是没有什么明显影响的,但是,当名称节点重启的时候,名称节点需要先将 FsImage 里面的所有内容映像到内存中,然后再一条一条地执行 EditLog 中的记录,当 EditLog 文件非常大的时候,会导致名称节点启动操作非常慢,而在这段时间内HDFS系统处于安全模式,一直无法对外提供写操作,影响了用户的使用。

解决办法:Secondary Name Node第二名称节点。

运行时
  1. 文件创建和写操作,记录到 EditLog ;
  2. 更新内存中的元数据;
  3. 收集 Data Node 汇报的块的创建和复制信息。

数据的冗余存储

  • 每个块在集群上会存储多个副本(replication);
  • 某个块的所有备份都是同一个ID;
  • 根据机架配置自动分配备份位置(Rack Awareness);
  • 优点:加快数据传输速度;容易检查错误;保证数据的可靠性。

副本存放策略

一个副本:放置在上传文件的 Data Node;如果是集群外提交,则随机挑选一台磁盘不太满,cpu不太忙的节点;

第二个副本:放置在于第一个副本不同的机架的节点上;

第三个副本:与第一个副本相同机架的其他节点;

更多副本:随机节点。

数据错误与恢复

  • HDFS具有较高的容错性,可以兼容廉价的硬件,它把硬件出错看作一种常态,而不是异常;HDFS设计了相应的机制检测数据错误和进行自动恢复,包括以下几种情形:
    • 名称节点出错;
    • 数据节点出错;
    • 数据出错;
  1. 名称节点出错

    名称节点保存了所有的元数据信息,最核心的两大数据结构是 FsImage 和 EditLog 。当名称节点出错时,就可以根据备份Secondary Name Node 中的 FsImage 和 EditLog 数据进行恢复。

  2. 数据节点出错

    • 数据节点定期向名称节点发送“心跳”信息报告状态;
    • 当数据节点发生故障,或者网络断网时,名称节点就无法收到来自数据节点的心跳信息,这些数据节点就会被标记为“宕机” ,节点上面的所有数据都会被标记为“不可读” ,名称节点不会再给它们发送任何I/O请求
    • 一些数据节点的不可用,会导致一些数据块的副本数量小于冗余因子;
    • 名称节点会定期检查,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制生成新的副本
    • HDFS 和其它分布式文件系统的最大区别就是可以调整冗余数据的位置。
  3. 数据出错

    • 网络传输和磁盘错误等因素,都会造成数据错误
    • 客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据;
    • 文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面;
    • 当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误名称节点会定期检查并且重新复制这个块。

数据操作过程

创建文件
  • client
    • 客户端请求 Name Node 在命名空间中建立新的文件元信息;
    • 如果不能创建文件则 Name Node 会返回失败,文件已存在 / 资源不足;
    • 如创建成功,客户端得到此文件的写保护锁。
  • Name Node
    • Name Node 检查集群和文件状态;
    • 创建写保护锁来保证只有一个客户端在操作该文件
    • 建立该文件的元信息;
    • 创建文件这个事件加入 EditLog ;
    • 为该文件分配块,以及块的冗余备份位置。
文件
  • 客户端写一个文件并不是直接写到 HDFS 上;

  • HDFS 客户端接收用户数据,并把内容缓存在本地;

  • 当本地缓存收集足够一个HDFS块大小的时候,客户端同 Name Node 通讯注册一个新的块;

  • 注册块成功后,Name Node 给客户端返回一个 Data Node 的列表;

    列表中是该块需要存放的位置,包括冗余备份。

  • 客户端向列表中的第一个 Data Node 写入块;

    • 当完成时,第一个 Data Node 向列表中的下个 Data Node 发送写操作,并把数据已收到的确认信息给客户端,同时发送确认信息给 Name Node ;

    • 之后的 Data Node 重复之上的步骤;

    • 当列表中所有 Data Node 都接收到数据并且由最后一个 Data Node 校验数据正确性完成后,返回确认信息给客户端。

在这里插入图片描述

  • 收到所有 Data Node 的确认信息后,客户端删除本地缓存;

  • 客户端继续发送下一个块,重复以上步骤;

  • 当所有数据发送完成后,写操作完成。

文件
  • 客户端与 Name Node 通讯获取文件的块位置信息,其中包括了块的所有冗余备份的位置信息: Data Node 的列表;
  • 客户端获取文件位置信息后直接同有文件块的 Data Node 通讯,读取文件
  • 如果第一个 Data Node 无法连接,客户端将自动联系下一个 Data Node;
  • 如果块数据的校验值出错,则客户端需要向 Name Node 报告,并自动联系下一个 Data Node 。
追加写
  • 客户端与 Name Node 通讯,获得文件的写保护锁及文件最后一个块的位置( Data Node 列表);
  • 客户端挑选一个 Data Nod e作为主写入节点,并对其余节点上的该数据块加锁;
  • 开始写入数据,1. 与普通写入流程类似,依次更新各个 Data Node 上的数据;2. 更新时间戳和校验和;
  • 最后一个块写满,并且所有备份块都完成写入后,向 Name Node 申请下一个数据块。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐