Hadoop
是一个分布式计算的开源框架,包含三大核心组件:
HDFS(Hadoop Distributed System分布式文件系统)、HIVE
(数据仓库工具)、HBASE
- HDFS
HDFS是Hadoop生态圈最基础的存储引擎,请注意HDFS的设计主要为大文件存储,为高吞吐量的读取和写入服务,HDFS不适合存储小文件,也不支持大量的随机读写。
- Hive
专门处理存储在HDFS数据仓库工具,通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化成MapReduce。
特点:
Hive帮助熟悉SQL的人运行MapReduce任务。
运行Hive查询会花费较长时间
,因为Hive的默认计算引擎是Hadoop的MapReduce。当然Hive也可以将底层计算引擎更换为Spark/Tez等
限制:
Hive目前仅支持ORCFile文件格式的数据更新操作(前提是需要开启事务支持),Hive必须提供预先定义好的schema,将文件映射成表。
应用场景:
Hive主要用户构建基于Hadoop平台的数据仓库,
处理大数据量的离线处理工作
;
- Hbase
是基于HDFS的数据库,主要适用于海量数据明细随机实时查询、如日志明细、交易清单、轨迹行为等。
在大数据架构中,Hive和HBase是协作关系,数据流一般如下:
通过ETL工具将数据源抽取到HDFS存储;通过Hive清洗、处理和计算原始数据;Hive清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase数据应用从HBase查询数据
特点:
HBase通过存储Key/Value类型数据来工作。它支持四种主要的操作:增加或者更新行、查看一个范围内的cell、获取指定的行、删除指定的行、列或者列的版本。HBase数据的版本信息主要用来获取历史数据,每一行的历史数据可以被删除,然后通过HBase
的Compactions可以释放空间。虽然HBase包括表格,但是schema仅仅被表格和列族所要求,列不需要schema。HBase的表包括增加和计数功能。
限制:
HBase的SQL查询功能可以通过 Apache
Phonenix实现,需要提供表的schema。HBase的运行需要zookeeper的支持,zookeeper用来分布式协调服务(配置服务、维护元信息、命名空间服务)
应用场景:
HBase
适合用来大数据的实时查询、海量数据的存储、离散型数据的存储
kudu
Kudu是围绕Hadoop生态圈建立存储引擎,Kudu拥有和Hadoop生态圈共同的设计理念,它运行
在普通的服务器上、可分布式规模化部署、并且满足工业界的高可用要求
。其设计理念为:既支持随机读写、又支持 OLAP 分析的大数据存储引擎
(fast analytics on fast data)。
Kudu的典型使用场景
- 流式实时计算场景
流式计算场景通常有持续不断地大量写入,与此同时这些数据还要支持近乎实时的读、写以及更新操作。Kudu的设计能够很好的处理此场景。
- 时间序列存储引擎(TSDB)
Kudu的hash分片设计能够很好地避免TSDB类请求的局部热点问题。同时高效的Scan性能让Kudu能够比Hbase更好的支持查询操作。
- 机器学习&数据挖掘
机器学习和数据挖掘的中间结果往往需要高吞吐量的批量写入和读取,同时会有少量的随机读写操作。Kudu的设计可以很好地满足这些中间结果的存储需求。
- 与历史遗产数据共存
在工业界实际生产环境中,往往有大量的历史遗产数据。Impala可以同时支持HDFS、Kudu等多个底层存储引擎,这个特性使得在使用的Kudu的同时,不必把所有的数据都迁移到Kudu。
Spark
Spark 运算比 Hadoop 的 MapReduce 框架快的原因是因为 Hadoop 在一次 MapReduce 运算之后,会将数据的运算结果从内存写入到磁盘中,第二次 Mapredue 运算时在从磁盘中读取数据,所以其瓶颈在2次运算间的多余 IO 消耗. Spark 则是将数据一直缓存在内存中,直到计算得到最后的结果,再将结果写入到磁盘,所以多次运算的情况下, Spark 是比较快的. 其优化了迭代式工作负载。但他本身是不能进行数据存储的,数据还是来源于HDFS。
spark核心包括以下四个部分:
- Spark SQL: 提供了类 SQL 的查询,返回 Spark-DataFrame 的数据结构(类似 Hive)
- Spark Streaming: 流式计算,主要用于处理线上实时时序数据(类似 storm)
- MLlib: 提供机器学习的各种模型和调优
- GraphX: 提供基于图的算法,如 PageRank