HDFS
HDFS的设计本质是为了大量的数据横跨成百上千台机器,用户看到的是一个文件系统,而不是很多的文件系统。
例如我们引用一个路径中的数据/home/user/hdfs/file,我们引用的是一个路径,但是实际的数据存放在很多不同的机器上。HDFS就用来管理存储在不同机器上的数据。
计算引擎
- Mareduce是第一代计算引擎,采用了很简化的计算模型,只有Map和Reduce两个计算过程(中间用Shuffle串联)。例如我们要统计在HDFS中存放的一个很大的文本文件中各个词出现的频率,我们首先会启动一个MapReduce程序,Map阶段会有很多机器读取文件的各个部分,分别把各自读到部分统计出词频;Reduce阶段同样会有很多机器从Mapper机器收到按照Hash分类的词的统计结果,Reducer会汇总相同词的词频,最终会得到整个文件的词频结果。MapReduce的模型比较简单,但是比较笨重。
- 第二代计算引擎Tez/Spark除了有内存、cache之类的新特性,还让Map和Reduce之间的界限模糊,数据交换更加灵活,更少的磁盘读写,更高的吞吐量。
- Pig用接近脚本的方式描述MapReduce,Hive用SQL描述MapReduce,他们用脚本的SQL语言翻印MapReduce程序,然后让计算引擎去计算。
- Hive是Hadoop的数据仓,严格来说不算是数据库,主要用于解决数据处理和计算问题,使用SQL来计算和处理HDFS上的结构化数据,适用于离线的批量数据计算。
- Hbase是面向列的NoSQL数据库,用于快速读/写大量的数据,主要解决实时数据查询问题,应用场景多是海量数据的随机实时查询。
- Storm是最流行的流计算平台,它的计算思路是:在数据流进来的是后就开始统计,好处是无延迟,但是短处是不灵活,要预先知道要统计的东西,毕竟数据流流过后就没有了。