先从Hadoop说起
经常看到有大咖在语录中提及:有了Spark,就永远不要Hadoop了,真有大咖这么说的,不信百度能看见。
仔细想下,有点道理:如果只是作为业务层面的开发者,对于大数据技术而言,确实只学Spark就可以了,但是如果是系统架构师的话,hadoop还是要学的,因为作为大数据的系统架构师,没办法回避hadoop。
Hadoop的三个概念组件,
spark在这里主要替代的是MapReduce,
YARN和HDFS还没有发现其他东西能替代。
YARN以初学者的理解,就是NodeManager,负责管理分布式文件系统各个节点的。
说白了,玩大数据是离不开hadoop的hdfs的,只是hadoop管的挺好,不用系统开发的人操心分布式文件系统的事了。
说Hadoop,就有必要提下Hive这个东西,Hive是一个数据仓库软件,不是数据仓库,也就是说它不负责数据存储,只是提供一种机制去映射HDFS上的数据,并且可以通过比较通俗易懂的类SQL语言进行一些数据操作
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每行数据的列可以是不同的,名字不同、个数也不同,至于这样存储的好处,相信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等
好了以上就是初学者如何正确看待大数据这件事,虽然是转载的,但是笔者感觉写的很好,希望能帮助初学者正确理解!
作者:A尚学堂Nancy老师
链接:https://www.jianshu.com/p/afef0b91a63b