以上四个特点可以总结为数据的收集->数据的传输->数据的处理->数据的展现。其中数据的处理一般涉及数据的聚合,数据的处理和展现能够在秒级或者毫秒级得到响应。
针对这些问题目前形成了 Flume + kafka + Storm / Spark + Hbase / Redis 的技术架构
Flume 专注于大数据的收集和传输,用来解决在线分析处理特点,数据源源不断的到来的问题。类似的大数据开源系统有 Logstash 和 Fluentd 。
三者区别如下:
架构图中 Source 用来连接输出源,Sink 用来连接输出源,Channel 是 Flume 内部数据传输通道(主要包括 Memory Channel 和 File Channel)。
其中 Source 连接的输入源可以但不限于:
其中 Sink 连接的输出源可以但不限于:
Spark (Spark Streaming) 和 Storm 专注于将数据按照时间窗口进行聚合和处理。用来解决在线分析处理特点,数据需要尽快的得到处理的问题。所以经常被称作流式处理框架。
两者的区别如下:
目前 Spark 有三种集群管理模式:
其中第二种和第三种都是使用 Spark 做任务管理和调度,Mesos 和 Yarn 做资源管理和调度
HBase 专注于大数据存储和提供查询,用来解决在线分析处理特点,数据经过处理后数据量依然巨大的存储和展现问题。类似的大数据开源系统有 Cassandra 。
两者区别如下:
组成部件说明:
管理用户对表的增删改查操作
管理HRegionServer的负载均衡,调整Region分布
Region Split后,负责新Region的分布
在HRegionServer停机后,负责失效HRegionServer上Region迁移
HRegionServer管理一些列HRegion对象;
每个HRegion对应Table中一个Region,HRegion由多个HStore组成;
每个HStore对应Table中一个Column Family的存储;
Region的 Split 和 StoreFile 的 Compact:
Client写入 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 触发Compact合并操作 -> 多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除 -> 当StoreFiles Compact后,逐步形成越来越大的StoreFile -> 单个StoreFile大小超过一定阈值后,触发Split操作,把当前Region Split成2个Region,Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上。
由此过程可知,HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能;
不像在线计算当前呈现的各种框架和架构,离线处理目前技术上已经成熟,大家使用的均是: 使用 Hdfs 存储数据,使用 MapReduce 做批量计算,计算完成的数据如需数据仓库的存储,直接存入 Hive , 然后从Hive 进行展现。
Hdfs 是一种分布式文件系统,和任何文件系统一样 Hdfs 提供文件的读取,写入,删除等操作。Hdfs 是能够很好的解决离线处理中需要存储大量数据的要求。Hdfs和本地文件系统的区别如下:
Hdfs 多备份数据存放策略: 第一个副本放在和client所在的node里(如果client不在集群范围内,则这第一个node是随机选取的,当然系统会尝试不选择哪些太满或者太忙的node);第二个副本放置在与第一个节点不同的机架中的node中(随机选择);第三个副本和第二个在同一个机架,随机放在不同的node中。如果还有更多的副本就随机放在集群的node里。
MapReduce 是一种分布式批量计算框架,分为 Map 阶段和 Reduce 阶段。 MapReduce 能够很好的解决离线处理中需要进行大量计算的要求。 MapReduce 从出现到现在经历了第一代 MapReduce v1 和 第二代 MapReduce Yarn。
Yarn 框架相对于老的 MapReduce 框架有以下优势:
Yarn 框架各个组件的功能:
Hive 是一种数据仓库,Hive 中的数据存储于文件系统( 大部分使用 Hdfs),Hive 提供了方便的访问数据仓库中数据的 HQL 方法,该方法将 SQL 翻译成MapReduce。 能够很好的解决离线处理中需要对批量处理结果的查询。
Hive 将元数据存放在 metastore 中, Hive 的 metastore 有三种工作方式:
OLAP (联机分析处理) 和 OLTP (联机事务处理) 在查询方面的特点:
Elasticsearch 是一种基于 文档 的 底层使用 Lucene 进行检索的分布式NoSql 集群。Elasticsearch 检索大量文档类数据响应速度很快,更够为 在线 OLTP 提供支持。类似的大数据开源系统有 Solr。
两者的区别如下
所以, Solr的架构不适合实时搜索的应用,也就不适合 OLTP 处理
Impala 是 Cloudera 公司主导开发的新型查询系统,它提供 SQL 语义,能查询存储在 Hadoop 的 Hdfs 和 Hbase 中的 PB 级大数据。已有 的 Hive 系统虽然也提供了 SQL 语义,但由于 Hive 底层执行使用的是 MapReduce 引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之 下,Impala 的最大特点就是它的快速。
所以, Impala 使得在 TB 甚至 PB 级数据上进行 OLTP 分析成为可能。
Impala 主要通过以下两种技术实现快速查询大量数据:
列存储可以减少查询时处理的数据量,有效提升 查询效率。多层查询树则借鉴了分布式搜索引擎的设计,查询树的根节点负责接收查询,并将查询分发到下一层节点,底层节点负责具体的数据读取和查询执行,然后将结果返回上层节点。
Kylin 是由国人作为主要贡献者的一个旨在对 Hadoop 环境下分析流程进行加速、且能够与 SQL 兼容性工具顺利协作的解决方案,目前 Kylin 已经成功将SQL接口与多维分析机制(OLAP)引入 Hadoop,旨在对规模极为庞大的数据集加以支持。
Kylin 能够在大数据分析领域实现以下各项特性:
Kylin 的大体设计思路: