大数据时代,Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)的BigData为传统关系型数据带来了挑战,传统分库分表多服务器的扩展方式,部署、维护、分析都非常耗时耗钱。此时大数据产品应运而生,依靠大容量、低成本、高速运算迅速进入市场
Google公司和Apache基金会是目前主流大数据框架的贡献者,开发与孵化了非常多的大数据产品与组件
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。许多公司对开源的Hadoop进行了优化、改造和完善,其中Cloudera、Hortonworks、MapR及国内的星环这几家公司,都开发了各自的Hadoop版本
Hadoop的两大核心组件是HDFS分布式数据存储及MapReduce分布式数据处理。Hadoop从1.0到2.0的升级过程中,又增加了YARN用于资源管理与调度
MapReduce基于磁盘运行,速度太慢,于是出现了第二代计算框架Tez。Tez本质上仍然是基于MapReduce框架,只是将Map和Reduce任务分解并重新组合优化,通过DAG提供运行的整体处理逻辑,从而提高了运行效率。Spark属于第三代,是基于内存的计算
而Impala,Prestro,Drill等组件,则是直接跑在HDFS上的数据计算产品
至此,大数据的存储和计算得到了解决
由于MapReduce编程复杂难度高,催生了如Pig和Hive等更易于开发的产品。它们使用简易的SQL语言将开发人员的查询任务翻译成MapReduce任务。Hive是基于Hadoop的一个数据仓库工具,它与传统数据仓库的区别在于,它本身并不支持数据存储和处理,而是借助于HDFS和MapReduce,并且借鉴SQL语言设计了新的查询语言HiveQL
Pig主要用于数据仓库的ETL环节,Pig与Hive两者可以结合使用,常被用于企业报表中心
Spark本身不提供文件管理系统,因此它主要依附于Hadoop,但它其实也可以运行于独立的集群模式或云数据环境中。Hive on Spark(对应于原始的Hive on MapReduce),生成Spark任务而非MapReduce任务来快速执行查询分析,方便原Hive使用人员从MapReduce到Spark的迁移。Spark自身也发展出SparkSQL。SparkSQL源于Shark,使用了新的SQL引擎,基于Spark框架并且兼容Hive。Hive on Spark大体与SparkSQL结构类似,只是SQL引擎不同,但是计算引擎都是Spark
虽然已经有了HDFS,但是由于高实时性的需求,Apache又开发了HBase,用于满足大数据的实时存储和查询。HBase是谷歌产品BigTable的开源实现,与BigTable基于GFS相同,HBase则基于HDFS。Hbase是面向列的非关系型数据库,也是NoSQL中的一个重要产品。NoSQL数据库与传统的关系型数据库相对应,又可以分为键值型、列族型、文档与图处理四种类型的数据库,代表产品分别有Redis,Hbase/Cassandra,MongoDB,Neo4j等
ElasticSearch是一款全文搜索引擎,也可以用来作为非关系型存储数据库
Sqoop则提供了传统关系型数据库与NoSQL之间的ETL的工具
Kafka是高吞吐量的分布式发布订阅消息系统,可以作为大数据生态架构中的消息枢纽,为不同类型的分布式系统提供统一接入和组件之间的高校数据交换
基于对数据更加实时的需求,又产生了流数据相关的采集、存储和计算工具。flume普遍用于日志的采集,可以处理消费者动作流数据;三大分布式处理框架之一的Storm,以及Spark的Streaming产品,都可以应用于流数据的实时计算
其他还有更多的组件,如Hadoop的Mahout、Spark的MLlib用来做数据挖掘,Pregel和Spark GraphX用来处理图数据...
Zookeeper是为架构中如此多的组件提供分布式任务协调服务的工具
按照数据处理速度的跨度,我们将企业对大数据的处理要求分为以下几类
1. 基于实时数据流的处理,通常的时间跨度在数百毫秒到数秒之间,主要部署Storm/SparkStreaming
2. 基于历史数据的交互式查询,通常时间跨度在数十秒到数分钟之间,主要部署Impala/Hive/Spark SQL
3. 复杂的批量数据处理,通常的时间跨度在几分钟到数小时之间,主要由MapReduce完成
在这样的部署之上,已经可以满足OLAP多维业务分析、数据可视化等数据应用产品与接口了