hadoop是apache基金会旗下的一个开源的分布式存储和分析的计算平台,使用java语言开发,有很好的跨平台性,可以运行在商用(廉价)硬件上,用户不需要了解费不是底层细节,就可以开发分布式程序,充分使用集群的高速计算和存储
谷歌三篇论文
2003年的<GFS>
硬盘不够大数据储存单份的安全隐患问题,提出分布式文件系统存储的理论思想
解决如何存储大数据集的问题
2004年的<MapReduce>
基于分布式的计算分析编程框架模型,移动计算而非移动数据,分而治之
解决了如何快速分析大数据集的问题
2006年的<BigTable>
针对传统型的数据库不适合存储非结构化数据的缺点,提出 了另一种适合存储大数据集的解决方案
hadoop组成部分
hadoop2.0以后的四个模块
- hadoop Common:hadoop模块的通用组件
- hadoop distributed file system:分布式文件管理系统
- haddop YARN:作业调度和资源管理框架
- hadoop MapReduce:基于YARN的大型数据集并行处理计算框架
hadoop3.0新扩展的的两个模块:
- hadoop Ozone:hadoop的对象存储机制
- hadoop submarine:hadoop的机器学习引擎
hadoop生态系统
hbase :
可扩展的分布式数据库,支持大型的表格的结构化数据存储
适用于非结构数据存储
存储基于列,而不是基于行
hive :
提供数据汇总和临时查询,将结构化数据文件映射为一张数据库表,提供简单的sql查询
可以将sql语句转化为MapReduce任务运行
saprk :
hadoop数据的快速和通用的计算引擎
spark提供了简单富有表现力的引擎,支持但不限于 ETL(Extract-Transform-Load),机器学习,流处理,图计算
zookeeper :
面向分布式应用程序的高性能协调工具,是hadoop和hbase的重要组件
提供功能:
配置维护,域名服务,分布式同步,组服务
Sqoop(数据etl/同步工具) :(已经停止维护了)
sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和hadoop之间传输数据
数据的导入导出本质上是mapreduce程序,充分利用了MR的并行化和容错性
Flume(日志收集工具) :
Cloudera开源的日志收集系统,具有分布式,高可靠,高容错,易于制定和扩展的特点
他将数据从产生,传输,处理并写入目标路径抽象为数据流
数据源支持在flume中定制发送方(http,file等),能够收集各种不同协议的数据
提供简单的处理功能,过滤和格式转换等
Kafka(分布式消息队列)
主要用于处理活跃的流式数据:
网站的pv(页面刷新),用户的访问内容,搜索内容
把这些数据用日志记录,隔一段时间进行一次处理
Ambari
用于供应,管理和监控Apache Hadoop集群基于web的工具
支持但不限于 HDFS,MapReduce,Hive,Pig,Hbase,Zookeeper,Sqoop,Hcatalog
提供一个用于查看集群健康状况的仪表板:
用于可视化查看或诊断如:热图,MapReduce,pig,Hive等应用程序
Avro
数据序列化系统
可以将数据结构或对象转换为便于存储和传输的格式,设计的目标是支持数据密集型的应用,适合大规模的存储和交换
提供了丰富的数据结构,快速可压缩的的二进制格式,储存持久数据的文件集,远程调用rpc和简单的动态语言集成
Cassandra:
可扩展的多主题数据库没有单点故障(是指系统中一点失效,就会让整个系统无法运作的部件):
是一套开源的分布式NoSQL数据库系统
Chukwa:
管理大型分布系统的数据收集系统(2000+节点,系统产生的监控数据量在T级别)
构建于Hadoop的HDFS和MapReduce基础上,集成的hadoop的可伸缩型和鲁棒性
有强大和灵活的工具集,提供数据的生成,收集,去重,排序,分析,展示等功能
Mahout:
apache旗下的开源项目,可扩展的机器学习和数据挖掘库
Pig:
用于并行计算的高级数据流语言和执行框架,
使用haddop进行数据分析的要求,提供了高层次,面向领域的抽象语言:Pig Latin
Tez:
基于Hadoop YARN的通用数据流编程框架
提供了一个强大而灵活的引擎,可执任何DAG(有向无环图)任务,处理批处理和交互式用例的数据
Oozie(工作流调度器):
一个可扩展的工作体系,继承hadoop的堆栈,用于协调多个mapreduce作业的执行
能管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现
Pig(ad-hoc脚本)
有雅虎开源,提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具,通常用于进行离线分析
定义了一种数据流语言-Pig Latin,是MapReduce编程的复杂性的抽象