Hadoop家族的技术,网上资料多如牛毛,但是还是那句老话——好脑瓜不如烂笔头,看的再多也不如自己动手写一写。
Hadoop是一个分布式系统,有两个关键组件——HDFS和MapReduce,HDFS负责分布式文件存储,MapReduce是执行分布式任务的算法。
MapReduce只是一个分布式数据处理算法,简单来说就是,把针对大数据的一个任务分解成若干个小任务,交给若干个计算节点去执行,然后把所有小任务的执行结果汇总起来,得到最终的输出结果。“拆分”叫做Map,“汇总”叫做Reduce。其中还涉及Shuffle等处理过程,暂不细究。
HDFS是一个分布式文件系统,高可靠、可扩展,理论上可以存储任何文件(一般不适合存储大量的微小文件)。HDFS是Hadoop家族最基础最核心的技术。
HDFS是一个通用的文件系统,通用的东西往往未必好用,尤其在特定的使用场景下。所以以HDFS为基础,衍生出了Hive、HBase,这两个技术都是为了处理HDFS中存储的数据。
Hive类似MySQL,是一个结构化数据库,支持常见的SQL操作,这里称作HQL,不同于一般的结构化数据库,Hive在HDFS上存储数据库文件,同时利用MapReduce处理所有SQL操作,充分利用了Hadoop的两项核心技术,但是代价是实时性很差,因为其中涉及到大量的磁盘读写操作。
HBase和Hive很不一样,它采用key-value的方式存储数据,以列族的方式存储(半)结构化数据,这极大的提升了查询效率,尤其适合那些只需要查询个别几列数据的场合。所以HBase适合实时处理,Hive适合做离线统计。
参考资料:
https://www.cnblogs.com/justinzhang/p/4273470.html
https://www.yiibai.com/hbase/