先从Hadoop说起。


  经常看到有大咖在语录中提及:有了Spark,就永远不要Hadoop了,真有大咖这么说的,不信百度能看见。


  仔细想下,有点道理:如果只是作为业务层面的开发者,对于大数据技术而言,确实只学Spark就可以了,但是如果是系统架构师的话,hadoop还是要学的,因为作为大数据的系统架构师,没办法回避hadoop。



Hadoop的三个概念组件,

spark在这里主要替代的是MapReduce,

YARN和HDFS还没有发现其他东西能替代。


YARN以初学者的理解,就是NodeManager,负责管理分布式文件系统各个节点的。


HDFS-

Hadoop Distributed File System 的架构图挺好看的,给像我这样的小白们再留念一下


  说白了,玩大数据是离不开hadoop的hdfs的,只是hadoop管的挺好,不用系统开发的人操心分布式文件系统的事了。


  说Hadoop,就有必要提下Hive这个东西,Hive是一个数据仓库软件不是数据仓库,也就是说它不负责数据存储,只是提供一种机制去映射HDFS上的数据,并且可以通过比较通俗易懂的类SQL语言进行一些数据操作,关于Hive与Hadoop的关系,有副好图


  Spark的Spark SQL也可以取代Hive SQL


  好了,分割线---------------------


  接下来说 Data Serialization数据序列化,其实没啥可说的,作为初学者,只是认为:如果HDFS是数据库的话,数据序列化就是Hibernate的Entity,只是这个Entity更适合用于网络传输。


  几种数据序列化的框架需要了解下,要不出门被人骗:


  Avro ..... 百度吧,不说了

  Apache Thrift.... 这个牛掰,貌似用的最多,百度吧,不说了

  Protocol Buffers....Google开发的,牛

  SequenceFile....百度


  好了,分割线---------------------


  接下来说下 Columnar Storage 列式存储,这个主要是对应行式存储说的,行式存储就是我们最常见的关系型数据库,数据记录是一条一条的。

  列式存储和行式存储有啥区别呢:

  列式存储的keyspace概念,相当于关系型数据库的schema;column family概念相当于关系型数据的table


column family里的数据的格式是这样的:

column family里的详细数据就像这样:

column family每行数据的列可以是不同的,名字不同、个数也不同,至于这样存储的好处,相信DBA们一眼就可以看出来,分库、扩展,都方便很多,而且数据更容易压缩,对于数据的载入和查询,效率会更高。


  说这么多,一个大数据系统,要列式存储干嘛啊?

  大数据架构一直流行Lambda架构,Lambda架构把大数据系统分成三层,批处理层、服务层和速度层,分这么多层干嘛,因为大数据的查询速度慢啊,高延迟,所以Lambda架构在批处理层做查询的预处理,就是先在HDFS查出一个批处理视图,然后把批处理视图存储到更快的更方便查询的介质上,以便更快的响应查询,这个更快的更方便查询的介质,就是列式存储的文件格式了。


  至于Lambda架构,也有kappa架构与之对应,孰优孰劣,下次再谈吧。


好了,分割线---------------------


  接下来说下NoSQL, NoSQL 不是No SQL!的意思,是Not Only SQL的意思,NoSQL数据库可谓已经百花齐放了。


  《大数据系统构建》这本书作者是Lambda架构的提出者,他在该书上说,“在很多方面,选择使用NoSQL数据库,就像在程序中,在HashMap、SortedMap、LinkedList或者Vector之间选择使用数据结构一样。你事先要知道自己想做什么,然后恰当的进行选择”。


  这样就可以了,不必把自己局限在选择哪一种数据库上,用的时候,直接用就可以了,因为每种NoSQL数据库确实是为了解决某一方面的问题而存在的。


  现在的NoSQL数据库大概可分为三类:列式存储的、面向文档的和图形化的。


  列式存储的NoSQL数据库主要面向大数据,包括Cassandra、HBase等。


  面向文档的NoSQL数据库包括:MongoDB、CouchDB等


  图形化NoSQL数据库主要是描述关系的,包括Neo4J、GraphDB等。


  至于各种NoSQL数据库的对比,下次再谈吧。


好了,分割线---------------------


  还有最后一个要介绍的:Distributed SQL Query Engine 分布式SQL查询引擎,分布式SQL查询引擎的大部分是为了取代MapReduce而存在的,有的支持更多,比如支持NoSQL数据库的查询,甚至支持JDBC/ODBC接口,包括:

  Impala

  Presto

  Apache Drill 等


  以上就是一个初学者看到的大数据生态圈,更深入的,以后我们一起探索吧。

 

敬请扫码关注盲点技术号,我们将持续努力与您一起学习探讨开发技术

  




Logo

开源、云原生的融合云平台

更多推荐