Hadoop、Spark生态圈主要介绍
Hadoop核心组件有哪些?广义Hadoop指什么?
- 核心组件有:Hdfs、Yarn、MapReduce
- 广义上指一个生态圈,泛指大数据技术相关的开源组件或产品,如hdfs、yarn、hbase、hive、spark、pig、zookeeper、kafka、flume、phoenix、sqoop、...,以后将进行详细说明
- 特点是开源(Apache协议)、分布式、大容量、可扩展、HA等,应用中可灵活组合使用
Spark与Hadoop之间有什么联系
- Spark也是一个生态圈,发展非常快,在计算方面比MapReduce要快并且编程更简单,除计算还包括ETL、机器学习、流处理、图计算等组件
- Hadoop和Spark在某些方面重叠,但他们之前可以很好的协同作战
生态圈中常用组件或产品详细介绍
文件系统:
- 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甚至关系型数据库等,下同)
- Phonenix,一套专注于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、pstgresql...)间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中
- Solr,提供全文搜索服务,基于Lucene的全文搜索服务器
典型的组合使用场景
Flume → kaffa → Hdfs → Spark/Storm/Hive → Hbase/Redis/Mysql → Phoenix/Spark sql/Hive (大数据组件)
→ Jdbc → Hibernate/Mybatis/Jfinal → Struts2/Spring MVC/Jfinal → Echarts/Html (常规的编程、前端展示组件)
- Flume从各种渠道收集数据发送到Kafka
- Kafka可以缓存数据,并将原始数据存放到hdfs
- Spark/Storm/Hive从hdfs中取出数据进行清洗、统计等计算操作,并把统计结果存放到Hbase/Redis/Mysql
- Phoenix/Spark sql/Hive提供了标准Jdbc方式的访问接口,调用程序只需向Jdbc接口编程,即可读取Hbase/Redis/Mysql中的数据
- Jdbc获取到数据后通过ORM组件(Hibernate/Mybatis/Jfinal),将数据集合转换为对象集合,一般为List<T>形式,发送到控制层Struts2/Spring MVC/Jfinal
- 控制层把数据发给view层,最终使用Echarts来绘制图形报表展示给用户