1. 发展简要
Hadoop包含了HDFS(用于分布式储存)和Map-Reduce(用于并行计算)。Hadoop主要分为两个大版本,1.0和2.0
1.0版本
- Map-Reduce不仅负责并行计算,还用来整合底层CPU、内存等资源,把计算内容分配到这些资源上去。这种框架导致了Map-Reduce需要管理的太多,运行效率低下
- HDFS可扩展性不够好,且只有一个NameNode,单点失效后,整个系统都会不可用
2.0版本
- 将Map-Reduce的资源调度管理部分专门抽离,做成了Yarn,而Map-Reduce只负责并行计算的部分。同时Yarn还可以支持其它并行计算的框架,如Storm(流计算)和Spark(同样运用了Map-Reduce思想,但主要是将计算放在内存中,不同MapReduce在硬盘中,速度更快)
- HDFS引入NameNode Federation(多个NameNode共同管理数据)和High Avalability(对NameNode做热备份,保证容灾)
2. Hadoop项目结构
- Tez会将MapReduce作业进行分析优化,并构建一个有向无环图,提高任务处理效率
- 因MapReduce的计算是在硬盘中,所以现在主要进行一些实时性不高的离线计算和大量数据的批处理
- Hive将SQL语句转化为MapReduce作业,方便使用。主要提供批量处理
- Pig提供流数据处理
Hive和Pig是构建于MapReduce上的,因MapReduce虽然已经封装屏蔽了很多复杂操作,但是其编程仍然复杂。一个简单的作业需要编写较多内容
- Hbase支持随机和实时读写的非关系型数据库,NoSQL
- Sqoop将以前的关系数据库中的数据快速导入到HDFS和Hbase这些里面
1) HDFS
HDFS: Hadoop Distributed File System
2) HBase
HBase:Hadoop DataBase
主要用于存储非结构化和半结构化的松散数据
- 因Hadoop主要用于解决大规模数据离线批量处理,而无法满足大数据实时处理的需求。
- 传统关系型数据库扩展能力有限,难以应对大规模数据存储要求
- 大数据背景下,数据零散且价值密度小,导致很多数据结构会经常性变化,而关系数据库的结构模式一旦确定后变更较难,甚至需要暂停整个数据库来完成变更操作
以上原因以及其他,促使了HBase的诞生
与关系数据库比较
- 数据类型:关系数据库采用非常经典的关系数据模型,具备text、LongText、char等,而HBase中只有一种数据类型(Bytes),所有数据均储存为未经解释的字符串
- 数据操作:关系数据库中的操作很多,如查询、更新、删除等
- 存储模式:关系数据库是基于行模式储存,HBase基于列模式
- 数据索引:关系数据库大于大规模(涉及多表)查询时,需要构建出非常复杂的索引。HBase中的数据经常就存储在一张表中,所以在查询时无需跨表,查询速度快
- 数据维护:关系数据在进行数据更新操作时,实际上旧的值会被新的值覆盖掉。而HBase中的所有值都会被存储,只有超过了设定的超时时间后,旧的数据才会被自动清除
- 可伸缩性:关系数据水平很难扩展,只能在纵向扩展。而HBase中的数据可以水平扩展