学习和使用hadoop有一年了,这里主要分享一下对hadoop整体上的理解,分门别类的介绍一下相关组件,最后提供了建议的学习路线,希望对hadoop的初学者有参考作用。
1. Hadoop核心件组有哪些? 广义hadoop指什么?
- 核心组件有:Hdfs、Yarn、MapReduce;
- 广义上指一个生态圈,泛指大数据技术相关的开源组件或产品,如hdfs、yarn、hbase、hive、spark、pig、zookeeper、kafka、flume、phoenix、sqoop。
2. Spark与hadoop之间有什么联系
- Spark也是一个生态圈,发展非很快,在计算方面比mapreduce要快很多倍,供了一个简单而丰富的编程模型,支持多种应用,包括ETL、机器学习、数据流处理、图形计算;
- Hadoop和Spark在某些方面有重叠,但组件之间都可以很好的协同作战。
3. 分门别类介绍其中详细组件
为了方便理解以下按照功能进行了分类,并且把较为流行的排在了前面介绍,列表如下:
分类 |
相关产品 |
文件系统 |
HDFS,目前大量采用的分布式文件系统,是整个大数据应用场景的基础通用文件存储组件 S3, Simple Storage Service简单存储服务,更好的可扩展性,内置的持久性,以及较低的价格 |
资源调度 |
YARN,分布式资源调度,可以接收计算的任务把它分配到集群各节点处理,相当于大数据操作系统,通用性好,生态支持好; Mesos,同YARN类似,偏向于资源的抽象和管理 |
计算框架 |
Spark序列,有流计算、图计算、机器学习; Flink,支持计算数据不断变化,即增量计算; Storm,专注于流式计算,功能强大; Mapreduce, 分布式计算基本计算框架,编程难度高,执行效率低 |
数据库 |
Hbase,一种NoSQL列簇数据库,支持数十亿行数百万列大型数据储存和访问,尤其是写数据的性能非常好,数据读取实时性较好,提供一套API,不支持SQL操作,数据存储采用HDFS; Cassandra,对大型表格和 Dynamo支持得最好; Redis,运行异常快,还可应用于分布式缓存场景 |
SQL支持 |
Spark SQL,由Shark、Hive发展而来的,以SQL方式访问数据源(如hdfs、hbase、S3、redis甚至关系统数据库等,下同); Phoenix,一套专注于SQL方式访问hbase的JDBC驱动,支持绝大部分SQL语法,支持二级索引,支持事务,低延时; Hive,通过HQL(类似SQL)来统计分析生成查询结果,通过解析HQL生成可以Mapreduce上执行的任务,典型的应用场景是与hbase集成; 其它:impala、pig等,都实现了类似的功能,解决了直接写map/reduce分析数据的复杂性,降低了数据分析工作者或开发人员使用大数据的门槛 |
其它工具 |
分布式协作zookeeper,可以理解为一个小型高性能的数据库,为生态圈中与很多组件提供发布订阅的功能,还可以监测节点是否失效(心跳检测),如HBase、Kafka中利用zookeeper存放了主从节点信息; Kafka, 是一种分布式的,基于发布/订阅的消息系统,类似于消息对列的功能,可以接收生产者(如webservice、文件、hdfs、hbase等)的数据,本身可以缓存起来,然后可以发送给消费者(同上),起到缓冲和适配的作; Flume,分布式的海量日志采集、聚合和传输的系统,主要作用是数据的收集和传输,也支持非常多的输入输出数据源; Sqoop,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中 |
4. 典型的组合使用场景
Hadoop、Spark生态圈的组件是相互配合使用的,每个组件都有自己“用武之地”,组合起来完成即可以满足各种系统业务需求,下面列举两个例子:
(1)数据采集、存储、分析场景
该场景下完成了整个数据的采集、存储、分析,并输出结果,组件搭配如下:
Flume + kafka(zookeeper)+ Hdfs + Spark/Storm/Hive + Hbase (Zookeeper、Hdfs) /Redis
说明如下:
- Flume用来从种渠道(如http、exec、文件、kafka , …)收集数据,并发送到kaffka(当然也可以存放到hdfs、hbase、file、…)
- Kafka可以缓存数据,与flume一样也支持各种协议的输入和输出,由于kafka需要zookeeper来完成负载均衡和HA,所以需要zookeeper来支持
- 开始计算,这里有三种选择,Spark/Storm/Hive,各有优势,相对Hive目前仍使用广泛,该技术出现的较早;Storm专注于流式处理,延迟非常低; Spark最有前景的计算工具;不管用什么,最终都是对数据的清理、统计,把得到的结果输出
- 展示结果数据存储,可以使用Hbase kafka(zookeeper) /Redis或mysql等,看使用场景(数据量大小等因素),由于处理之后的结果数据一般比较少可以直接放到Redis,然后就可以采用常规的技术展示出报表或其它消费方式使用这些计算后的结果数据
(2)数据存储和实时访问
这种场景非常类似常规应用开发场景,即通过java的JDBC来访问大数据集群,组件搭配:
Jdbc + Solr + Phoenix/Spark sql + Hbase kafka(zookeeper) + Hdfs
说明如下:
- Jdbc是通用的java操作数据库的方式,使用的是sql语句
- Solr为全文检索,完成站点分词搜索功能
- Phoenix/Spark sql方便以jdbc方式访问Hbase数据库
- Hdfs最终完成数据的物理存储
5. 建议的学习线路
仅凭个人经验,大概的分了三个阶段,如下: