大数据技术栈概貌

一、大数据技术栈概貌

大数据技术栈概貌

  • pig:要使用 Apache Pig 分析数据,程序员需要使用Pig Latin语言编写脚本。所有这些脚本都在内部转换为Map和Reduce任务。
  • sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。导入数据:MySQL,Oracle导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统,导出数据:从 Hadoop 的文件系统中导出数据到关系数据库mysql 等
  • Flume美[fluːm]作为 cloudera开发,是一个分布式、可靠、高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据的简单处理,并写到各种数据接收方的能力。
  • Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。
  • Kudu美[ˈkuːduː]是由Cloudera开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力
  • Alluxio是一个开源的基于内存的分布式存储系统,
  • Impala是Cloudera公司推出,基于内存进行计算,能够对PB级数据进行交互式实时查询、分析
  • Flink弗林克;是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。

1.1 Hadoop生态

大数据技术栈概貌

  • HDFS:Hadoop分布式文件系统(Distributed File System)-HDFS(Hadoop Distributed File System)
  • MapReduce:并行计算框架,0.20前使用org.apache.hadoop.mapred旧接口,0.20版本开始引入org.apache.hadoop.mapreduce的新API
  • Apache HBase:分布式NoSQL列数据库,类似谷歌公司BigTable。
  • Apache
    Hive:构建于hadoop之上的数据仓库,通过一种类SQL语言HiveQL为用户提供数据的归纳、查询和分析等功能。Hive最初由Facebook贡献。
  • Apache Mahout:美[məˈhaʊt]机器学习算法软件包。
  • Apache Sqoop:结构化数据(如关系数据库)与Apache Hadoop之间的数据转换工具。
  • Apache ZooKeeper:分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。
  • Hadoop YARN: 一个新的MapReduce框架,任务调度与资源管理

二、hadoop工作流程简介

2.1 简单案例

大数据技术栈概貌

  • 当读取的文件的大小超过内存的大小时,一个map的方案是不可行的。
  • 摩尔定律:每隔18-24个月,服务器的性能提升一倍。但是数据的增长速度是远远超过服务器性能的提升。在数据不断增长的情况下,单位时间内,服务器所需要处理的数据量是越来越大。最终的结论:
    靠 纵向提升服务器性能的手段 在理论上有 瓶颈的。
  • 横向提升核心思想: 大事化小 分而治之
    终极解决方案:
    1、先把文件切碎成很多的小文件。
    2、每一个服务器节点去处理一个小文件。
    3、再把所有服务器的处理结果汇总到一起。
    4、再把所有的数据合并到一起求出出现次数最多的那个ip。
    横向提升要解决3个问题
    1、数据分布式存储的问题HDFS
    2、编写作业代码MapReduce,map负责读取文件内容到内存,reduce负责统计
    3、集群资源(CPU、内存)调度

2.2 HDFS简介

大数据技术栈概貌
企业存储数据时最头疼的事情是什么?不是数据量太大或者读写速度不够快,而是数据丢失。
那么 HDFS 是如何保证在机器故障情况下文件数据依然不丢失的呢?就是数据备份,说白了就是多存几份。如果我们不去配置,HDFS 默认3份。
Rack(机架)有若干台机器垂直地组成一个 Rack,像一个书架一样。通常,一个 rack 共享一个电源,一条网线,一个交换机;据统计,很多数据中心里的故障都是一整个 rack 出问题。出于这个原因,
HDFS 备份数据的时候,(假设还是3份),通常在同一个 rack 上储存一份,然后在另一个 rack 上储存另两份。这样就保证数据有更高的安全性。

2.2.1 HDFS框架图

大数据技术栈概貌

2.2.2 HDFS读文件

大数据技术栈概貌

  • 客户端通过调用FileSystem对象的open()方法来打开文件(第1步),
  • DistributedFileSystem通过RPC调用询问NameNode来得到此文件最开始几个block的文件位置(第2步)。
  • 对每一个block来说,namenode返回拥有此block备份的所有namenode的地址信息(按集群的拓扑网络中与客户端距离的远近排序)
    以上步骤完成后,DistributedFileSystem会返回一个FSDataInputStream。用来处理namenode和datanode的I/O操作。客户端然后执行read()方法(第3步)
  • DFSInputStream连接到第一个datanode(也即最近的datanode)来获取数据。通过重复调用read()方法(第4、第5步),文件内的数据就被流式的送到了客户端。
  • 当真个文件读取完毕时,客户端调用FSDataInputSteam中的close()方法关闭文件输入流(第6步)。
  • 如果在读某个block是DFSInputStream检测到错误,DFSInputSteam就会连接下一个datanode以获取此block的其他备份,同时他会记录下以前检测到的坏掉的datanode以免以后再无用的重复读取该datanode。
  • DFSInputSteam也会检查从datanode读取来的数据的校验和,如果发现有数据损坏,它会把坏掉的block报告给namenode同时重新读取其他datanode上的其他block备份。

2.2.3 HDFS衡量节点距离

大数据技术栈概貌
如果将数据中心d1里的机架r1上的节点n1定义为/d1/r1/n1的话,那么将会有以下结果:
distance(/d1/r1/n1, /d1/r1/n1) = 0 (同一节点上的两个应用程序)
distance(/d1/r1/n1, /d1/r1/n2) = 2 (同一机架上的两个节点)
distance(/d1/r1/n1, /d1/r2/n3) = 4 (同一数据中心里不同机架上的两个节点)
distance(/d1/r1/n1, /d2/r3/n4) = 6 (不同数据中心的两个节点)

2.2.4 HDFS写文件

大数据技术栈概貌

  • 首先客户端通过DistributedFileSystem上的create()方法指明一个欲创建的文件的文件名(第一步),
  • DistributedFileSystem再通过RPC调用向NameNode申请创建一个新文件(第二步)。namenode检查是否有同名文件存在以及用户是否有相应的创建权限,DistributedFileSystem返回一个FSDataOutputStream以供客户端写入数据,
  • 当客户端开始写数据时(第三步),DFSOutputStream把写入的数据分成包(packet), 放入一个中间队列——数据队列(data
    queue)中去。DataStreamer从数据队列中取数据,同时向namenode申请一个新的block来存放它已经取得的数据。namenode选择一系列合适的datanode(个数由文件的replica数决定)构成一个管道线(pipeline),这里我们假设replica为3,所以管道线中就有三个datanode。
  • DataSteamer把数据流式的写入到管道线中的第一个datanode中(第四步),第一个datanode再把接收到的数据转到第二个datanode中(第四步),以此类推。
  • DFSOutputStream同时也维护着另一个中间队列——确认队列(ack
    queue),确认队列中的包只有在得到管道线中所有的datanode的确认以后才会被移出确认队列(第五步)。
  • 如果某个datanode在写数据的时候当掉了,下面这些对用户透明的步骤会被执行:
      1)管道线关闭,所有确认队列上的数据会被挪到数据队列的首部重新发送,这样可以确保管道线中当掉的datanode下流的datanode不会因为当掉的datanode而丢失数据包。
      2)在还在正常运行的datanode上的当前block上做一个标志,这样当当掉的datanode重新启动以后namenode就会知道该datanode上哪个block是刚才当机时残留下的局部损坏block,从而可以把它删掉。
      3)已经当掉的datanode从管道线中被移除,未写完的block的其他数据继续被写入到其他两个还在正常运行的datanode中去,namenode知道这个block还处在under-replicated状态(也即备份数不足的状态)下,然后他会安排一个新的replica从而达到要求的备份数,后续的block写入方法同前面正常时候一样。
  • 有可能管道线中的多个datanode当掉(虽然不太经常发生),但只要dfs.replication.min(默认为1)个replica被创建,我们就认为该创建成功了。剩余的replica会在以后异步创建以达到指定的replica数。
  • 客户端完成写数据后,它会调用close()方法(第六步)。
  • 这个操作会冲洗(flush)所有剩下的package到pipeline中,等待这些package确认成功,然后通知namenode写入文件成功(第七步)。
  • 这时候namenode就知道该文件由哪些block组成(因为DataStreamer向namenode请求分配新block,namenode当然会知道它分配过哪些blcok给给定文件),它会等待最少的replica数被创建,然后成功返回。

2.3 YARN工作机制

2.3.1 YARN简介

YARN 是一个通用资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。
大数据技术栈概貌
YARN 是 Hadoop2.x 版本中的一个新特性,提高集群环境下的资源利用率,这些资源包括内存,磁盘,网络,IO等。能支持除 MapReduce 以外的更多分布式计算程序
  1、YARN 并不清楚用户提交的程序的运行机制
  2、YARN 只提供运算资源的调度(用户程序向 YARN 申请资源,YARN 就负责分配资源)
  3、YARN 中的主管角色叫 ResourceManager
  4、YARN 中具体提供运算资源的角色叫 NodeManager
  5、这样一来,YARN 其实就与运行的用户程序完全解耦,就意味着 YARN 上可以运行各种类 型的分布式运算程序(MapReduce 只是其中的一种),比如 MapReduce、Storm 程序,Spark 程序,Tez ……
  6、所以,Spark、Storm 等运算框架都可以整合在YARN上运行,只要他们各自的框架中有符合YARN 规范的资源请求机制即可

2.4 MapReduce工作机制

2.4.1 简单案例

大数据技术栈概貌

2.4.2 MapReduce工作机制

大数据技术栈概貌

三、Hive工作机制简介

大数据技术栈概貌
大数据技术栈概貌
Hive 由Facebook 实现并开源,Hive的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
缺点:

  • Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中。
  • Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而不是OLTP(联机事务处理),这就是数据处理的两大级别)。
    Hive 具有 SQL 数据库的外表,但应用场景完全不同,Hive 只适合用来做海量离线数 据统计分析,也就是数据仓库。
    大数据技术栈概貌

四、Kylin工作机制简介

大数据技术栈概貌
大数据技术栈概貌
大数据技术栈概貌
Kylin的理论基础是Cube理论,每一种维度组合称之为Cuboid,所有Cuboid的集合是Cube。 其中由所有维度组成的Cuboid称为Base Cuboid,图中(A,B,C,D)即为Base Cuboid,所有的Cuboid都可以基于Base Cuboid计算出来。 在查询时,Kylin会自动选择满足条件的最“小”Cuboid,比如下面的SQL就会对应Cuboid(A,B):
select xx from table where A=xx group by B
大数据技术栈概貌
全维度构建
假设一张表有3个字段name,age,sex,那么当通过kylin构建这张表的cube时,hbase的表结构如下所示。注意本示例没有度量字段,value表示记录条数累计,代表count(*),度量如果存在那么也是存储在value的位置,可以手动配置cf。
通过图1很明显的可以看到,kylin将每个维度的所有基数都枚举了出来,并通过组合的方式构建出hbase的rowkey,另外将组合对应的记录数做预统计保存在value中,对应hbase表中的一个cf:c。
大数据技术栈概貌
大数据技术栈概貌

五、Hbase工作机制简介

大数据技术栈概貌

5.1 HFile

大数据技术栈概貌

5.2 HBase架构设计

大数据技术栈概貌

  • 主节点HMaster
    管理HRegionServer,实现其负载均衡。
    管理和分配HRegion,比如在HRegion拆分时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上。
    监控集群中所有HRegionServer的状态(通过Heartbeat和监听ZooKeeper中的状态)。处理Schema更新请求 (创建、删除、修改Table的定义等)。
    HMaster没有单点问题,在Hbase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master胜出。
  • HRegionServer
    HRegionServer维护HMaster分配给它的region,处理这些Region的IO请求。
    HRegionServer负责切分在运行过程中变得过大的Region。
  • ZooKeeper
    通过选举,保证任何时候,集群中只有一个HMaster,HMaster与HRegionServer启动时会向ZooKeeper注册。实时监控HRegionServer的上线和下线信息,并实时通知给HMaster。存贮所有Region的寻址入口和HBase的Schema和Table元数据。Zookeeper的引入实现HMaster主从节点的failover。

5.3 HRegionServer

大数据技术栈概貌

5.4 数据查找

大数据技术栈概貌

六、数据存储系统对比

大数据技术栈概貌

参考博客
大数据技术栈
Hadoop学习之路
Kylin 简介
Apache Kylin 入门