hadoop学习总结

来源:互联网 发布:php 设置远程cookie 编辑:程序博客网 时间:2024/06/05 16:39

hadoop总结1 - - MapReduce和HDFS

Hadoop是一个分布式的集群环境,它不需要我们深入了解许多分布式平台的细节,直接帮我们在上面搭建好了一个平台。Hadoop的核心是HDFS和MapReduce。当然,Hive, hbase, storm, spark等技术,也都是基于hadoop的。下图展示了hadoop的生态圈:

这里写图片描述

MapReduce

MapReduce是一种分布式计算框架,它实现了在多台机器上并行计算,主要由map过程和reduce过程组成。map接受输入数据,它对输入的每一条数据都进行map函数的处理,然后指定输出的键值对,将其发送到reduce端。reduce端会首先保证所有的数据都按照key进行排序,对相同的key的数据,统一做reduce函数操作。

shuffle过程

为了保证map的输出能按照key值的顺序传到reduce端,MapReduce指定了一个排序过程,这个排序过程我们成为shuffle过程。shuffle包括map端shuffle和reduce端shuffle。
在map端,map的输出不是直接写到磁盘,而是写到一个内存缓冲区做预排序,当缓冲区达到80%,就溢写到磁盘。所有溢写文件会被合并成一个已排序的输出文件。
在reduce端,只要有一个map任务完成, reduce就开始复制其输出,当复制完所有map输出后,reduce便进入合并阶段,合并后的每个文件都是相同的key值,此数据作为reduce的输入。

combiner函数

MapReduce除了map和reduce,还提供了combiner函数,它使map的输出更加“紧凑”,减少了带宽的占用。例如: map输出结果(6,1),(7,1),(6,1),(6,1),统计每个数字出现的次数。没有combiner函数时,到reduce的输入数据为: {(6,1),(7,1),(6,1),(6,1)}增加了Combiner函数后,到reduce的输入数据为{(6,3)(7,1)}。

HDFS

HDFS是hadoop的另一核心内容,它提供了hadoop上的文件管理,类似于linux上的文件系统。通过hdfs,用户操作hadoop集群上的文件就如同操作本地文件一样。为了保证数据不丢失,hdfs将数据块在不同机器上进行备份。

hdfs架构

HDFS由NameNode, SecondaryNode, 多个DataNode组成。NameNode管理文件系统的命名空间,负载均衡。它维护文件系统的树形结构,这些信息以文件的形式永久保存在本地磁盘上—命名空间镜像文件(fs-image)和编辑日志(edit-logs)文件。NameNode也记录着每个文件中所在块的节点的信息,但是并不永久保存。SecondaryNode用来辅助NameNode,帮助Namenode合并编辑日志,减少namenode的启动时间。 多个DataNode分布在不同的机器上,用来存储数据,管理各自节点的文件块信息。

shell命令

HDFS使用命令行来操作文件,很多命令和linux系统下的操作非常类似,文件的一些权限等属性也和linux一样,这里不再列举。(以hadoop fs 开头的命令)

Yarn

Yarn负责hadoop上的资源管理。起初hadoop上,JobTracker 同时兼备了资源管理和作业控制两个功能, 这成为系统的一个最大瓶颈,严重制约了 Hadoop 集群扩展性。随着storm,spark等框架的出现,带来了很多局限性。所以,hadoop开发第二代,使用Yarn来单独进行资源的管理。

yarn的架构

Yarn由ResourseManager,NodeManager,ApplicationMaster, Container组成。

ResourceManager(RM)是全局的资源管理器,负责整个系统资源的管理和分配。
NodeManager是每个节点上的资源和任务管理器,一方面定时向RM汇报本节点的资源使用情况和各个Container的运行状态,另一方面,接受来自AM的Container启停请求。
ApplictionMaster(AM):每个应用程序对应一个AM。主要负责向RM请求资源、与NM通信来启停任务、监控所有任务的运行状态,并在任务运行失败时重新为任务申请资源并重启。

yarn的调度器

yarn提供了多种调度器,如FIFO Schedule,Capacity Schedule,FAIR Schedule。FIFO就是按照作业进入的时间先后来使用。Capacity Schedule以队列为单位划分资源。FAIR Schedule会按照作业的数量,动态将资源平均分给每个job。下图是三种调度方式示意图:

这里写图片描述

shell命令

yarn也有shell命令,用来运行jar包,查看节点信息等。(以yarn 开头的命令)

hadoop2 Hive和HBase

hive

hive是建立在Hadoop上的数据仓库平台,它将SQL语句转换成MapReduce作业,进而在hadoop上运行。

  • hive的表:

    hive的表存储在HDFS上是一个个的文件,一个 表对应一个目录名,如果有分区,一个分区对应一个子目录。
    hive表有托管表和外部表之分, 托管表:数据存储在仓库目录下;外部表:数据存储在任何HDFS目录下。
    hive提供了对表的增删改查等操作,称为HiveQL,包括视图,索引,用户自定义函数等等。

    Hive从两个维度对表的存储进行管理:“行格式”(row format)和“文件格式”(file format)。

    • 行格式:一行中数据的存储格式。按照hive的术语,行格式的定义由SerDe定义,即序列化和反序列化。也就是查询数据时,SerDe将文件中字节形式的数据行反序列化为Hive内部操作数据行时使用的对象形式。 Hive向表中插入数据时,序列化工具会将Hive的数据行内部表示形式序列化为字节形式并写到输出文件中去。
    • 文件格式:最简单的文件格式是纯文本文件,但是也可以使用面向列的和面向行的二进制文件格式。二进制文件可以是顺序文件、 Avro、 RCFile、 ORC、 parquet文件。
  • hive优缺点:

    Hive适用于大数据的批量处理,而且支持标准SQL,免去了写MR程序的过程。但是也正因为它自动转成MR作业,有时不够智能,运行效率较低。所以现在通常使用SparkSQL,它有效提高了hadoop上的数据查询效率。

    HBase

    HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。
    HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。总之,在一个HBase:

    • 表是行的集合。
    • 行是列族的集合。
    • 列族是列的集合。
    • 列是键值对的集合。