专栏目录
(1)大数据和应用场景介绍
(2)大数据技术综述总结
(3)HDFS原理与高可用技术原理介绍
(4)Yarn架构、资源管理原理和运维技术介绍
(5)Kafka原理和高可用介绍
1.技术发展综述
(1)两大重要事件
- 大数据技术发展的基础:03和04年Google开源了GFS以及MapReduce这两篇论文。其中, GFS (Google File System)提供了相对于传统存储方案,更加高效、海量的一种 数据存储方案分布式文件系统。 MapReduce是对于海量数据的高效的 分布式计算框架。
- 大数据落地标志:之后Doug Cutting基于这这两篇文论通过Java做了开源实现, GFS对应于开源的HDFS,MapReduce名称不变,HDFS、MapReduce构成了Hadoop。并且,在2008年年初Hadoop正式成为了Apache基金会的顶级项目,自此开始Hadoop在各大公司及领域迅猛推广。
(2)Hadoop体系成熟
- 代表性Hadoop商业公司:如2008年Cloudera公司推出了 CDH发行版,在其平台上将各个主流技术做了整合等。
- Hadoop体系成熟:Hadoop扩大促进了——① 易用性方面SQL框架的支持Hive、② 高可用性NameNode HA、③资源扩展性管理Yarn等方面。但是随着时间推移Hadoop也暴露出不足之处——④如MapReduce在性能、以及像迭代计算等方面不足。所以 Spark推出了内存计算的思路,2014年代替MapReduce成为运行于Hadoop之上的核心项目。
- 星环大数据平台,区别于CDH,开源整合+自主研发。例如: 1. 底层引擎方面选择了Spark ,而非MapReduce ; 提供一套丰富的SQL接口,而非Java、Python、Scala等方式, 3.在项目迁移、开发成本、项目管控等上边优势显而易见; 插件的方式方便的整合在平台上稳定运行。
(3)以星环科技为代表介绍商业化大数据平台(给老东家打波广告)
大数据技术体系最核心部分包含 有数据采集、存储、资源管理、计算引擎、数据分析等内容,其中红色标识的为星环自主研发的企业级核心技术产品、其他为开源技术。此外,数据源类型多种多样,例如:电商、社交网络、智能硬件等等,数据可视化(展示)部分也支持多种技术,例如:Echarts、D3、Cboard等。
2.大数据体系代表性开源产品
(1)HDFS (Hadoop Distributed Filesystem)
主 要背景是传统的磁带、或者磁盘介质存储以及读写的性能都非常差,单独一块盘的容量、性能都非常差、所以迫切希望分布式方案去解决。 分布式需要解决问题如下:
- 错误检测和快速自动恢复: 分布式方案可以选择多台低配的服务器,而不是单台超高配的服务器,但低配设备故障概率可能会提高,如何有一个好的错误检测以及快速恢复机制,显得很重要,否则数据丢失是一件非常严重的问题;
- 实时访问 :文件系统的存储只是一方面,还要解决 保证数据快速的、流式的高效访问;
- 可扩展性:单台服务器磁盘接满后无法扩容,HDFS分布式框架必须提供更灵活的扩容方案;
- 一致性模型: 一次写入、多次读写;以及对于数据分析这方面, 移动计算比移动数据更便宜(这就是后来的计算向数据靠拢理论)。 如何做到数据存放结点直接计算而不去直接拷贝数据给计算的服务器是个需要考虑的问题,例如Mysql扫表1000W行数据不到1s,而通过jdbc发送则要1分钟左右)
现在HDFS给出了解决方案:
- 高可靠性以及容错性:有副本策略以及故障检测的机制提供(见后),保证构建在低成本的服务器上,以及在Hadoop 2.X之后提出的高可用机制,都是HDFS高可靠性以及容错性的体现。
- 可扩展性:在可靠性及容错性保证下,HDFS集群的构建成本可以非常低,在比较廉价的商用机器上运行完全没有问题,结点个数也非常之多, 10K节点规模没有问题,集群规模如此之大,数据量支持也没有问题PB级别完全可以应对。
- 并发性:支持高并发的访问,批量读取数据,关注数据吞吐量, 对于批处理的支持非常好(如MapReduce分布式批处理计算框架)
(2)MapReduce(两大核心设计理念)
①何为分布式,分而治之?
10TB数据存储在一个N台服务器组件的集群中,并不是像以前直接将10TB数据存储在一台服务器上,而是 将这10TB数据split切分之后,将不同的文件片段及备份均匀的放在N台服务器上,这就是简单的一个分布式存储。存储的分布式,也带了计算的分布式实现,例如在计算这10TB数据时, 可以在N台服务器同时、并发的进行计算。
②第二、移动计算,而非移动数据。
第一台服务器上的数据就应该由第一台服务器来完成计算,如果他去计算其他服务器数据、或者他上边的数据交给其他服务器去做计算,那么这样子相当于整个计算过程中我要都添加一个数据由第一台移动到另外一台的环境,涉及到数据的移动,那么网络以及磁盘IO等等开销会额外增加很多。所以MapReduce第二个核心思想,移动计算、而非移动数据, 即数据存在哪个结点,则有哪个结点完成上面数据的计算。
(3)Yarn
资源管理和作业调度工作。 Yarn在 1.x的Hadoop中, 其实是在MapReduce内置实现的,2.x才单独抽取出来。
这样独立出来最大的好处是:
- 兼容性好:1.x中 除MapReduce以外的计算框架要对于HDFS数据进行分析时, 都需要自身单独实现资源底层的一系列管理。但是推出Yarn之后第三方如,Spark就不需要再去实现资源管理,整合得简单不如1.x繁杂。
- 高可扩展性:提供了高可用的支持,并且作为分布式组件也同样具有高扩展性。
(4)Spark
特点如下:
- 内存计算:MapReduce计算时有很多 内存磁盘交互浪费资源。但Spark计算时, 数据全部在内存中完成、不同结点若需要数据,则全部通过网络传输来走(相当于内存和网络异步操作,避免了某些磁盘IO阻塞场景),这样很大程度上提高了计算的效率。 Spark实现中将内存抽象为RDD介质。
- 基于DAG优化任务流程。
- 易于部署,丰富API支持。
- 通用易用性。Spark针对不同的场景都有针对性的组件,不管是批处理、流处理、交互式计算还是机器学习、图计算,都可以使用Spark来完成。并且Spark提供的 各种RDD算子以及Scala提供的 链式编程等,使得Spark也具有良好的易用性。
- 多种运行模式。包括 Local( 在本地运行,只有一个工作进程,无并行计算能力 )、Standalone(类似于HDFS/Yarn集群模式,也分master和slave主从模式)、YARN( 客户端直接连接Yarn,无需构建spark集群 )、Mesos ( 客户端直接连接Mesos无需构建spark集群 )
(5)Hive
结构化海量数据。注意: Hive本身定义是数据仓库而非数据库, 虽然他提供了SQL,但主要是借助于这种SQL方式对于平台之上的数据做更加简单有效的分析。
【数据仓库VS数据库区别】
主要区别可理解 为数据库一般存储数据主要用来提供业务系统使用、 大部分数据都为在线数据,而数据仓库的设计主要是为了分析、大部分数据皆为历史数据。 Hive做分析,可以对于HDFS、HBase上的数据进行分析, 但Hive本质并不执行分析、他本质仅仅只是将SQL语句转换为MapReduce程序,真正执行分析还是在Hadoop基础之上来进行!!!
【Hive的特点】
- 提供SQL查询语言 ;
- 针对海量数据的高性能查询和分析系统;
- 用户接口丰富: cli( 控制命令行接口 )、Beeline、jdbc都支持;
- 提供灵活的扩展性,支持复杂类型数据、自定义UDF支持、脚本等。
【Hive应用场景】
1. 日志分析:日志分析可以优化操作系统,获知用户行为,也可以获知数据的统计信息;
2. 数据挖掘:通过结构化数据的挖掘,能够获得原先使用者没有意识的信息;
3. 文档索引:可以对一系列文档进行分析,并形成文档的索引结构, 不一定是完整的排序表,也可能是关联信息的索引;
4. 商业智能信息处理:可以对商业信息进行查询分析,从中可以获得一些只能决策的信息;
5. 及时查询以及数据验证:数据分析人员可能临时需要验证数据的特性,需要查询引擎迅速进行数据分析。
(6)HBase
HBase和Hadoop一样基于Google(bigtable)开源论文实现。 HBase是一个分布式的、面向列的开源数据库。分布式数据库,也是一个非关系型数据库,采用HDFS作为文件存储系统。
HBase分布式数据库意味着也一种集群方式、并且支持动态扩容等等特点,非常善于海量数据存储。
【行式与列式数据库主要区别】
本质是一个列式数据库,区别于我们平时开发所使用的MySQL、DB2、Oracle等,这些都是数据库。 举例说明:大家工作中肯定会对人员信息设计表去存储其信息,当需求确定之后将表设计号之后,假如: 像以上两条人员信息,张三只具有姓名、年龄两个字段的值,李四则具有年龄、性别、身高这三个字段的值,像地址、爱好这些字段都没有数据录入,这种情况在我们开发当中经常会遇到, 实际在行式数据库虽然某些字段为空,但也是会浪费一定的存储空间,我们最直接的想法如果要节省这部分存储空间,如果张三只有年龄字段、那么可以只存年龄字段,也就是说根据具体每行数据、字段可以动态来添加,但是 对于行式数据库来说、一旦表结构定义好之后,如果要修改所有行都会受影响。 而HBase使用过程中,建表时并不需要指定具体表中字段或者列名,而是当用户写入数据时,根据实际情况动态来添加,这样对比行式数据库可以很大程度上节省存储空间。
【HBase特点】
- 高性能:海量数据存储查询性能肯定不是问题;
- 可扩展,分布式集群、动态扩容也不会有问题;
- 高可用,HBase架构本身有高可用机制支持、并且用到的文件系统为HDFS、HDFS本身容错能力就非常之好。
(7) ElasticSearch
ElasticSearch是基于 Lucene实现的开源分布式全文检索引擎。作为一个分布式全文检索引擎,ES具有较强的扩展性,并且能处理PB级别以上的大数据集,是大数据领域首选的分布式搜索引擎。
【全文检索VS精确查找】
例如平时我们在SQL开发过程中where colum like %% 或者=这些情况是精确查找。 全文检索,首先会根据提供的内容进行分词、然后再根据分词结果去查找。例如: 数据集如下: 搜索“北京618”,精确查找只能找到的第三条,但是全文搜索三条都可以查找的到(或者利用NLP预训练模型Bert编码文本向量,Elasticsearch计算文本相似性搜索)。全文检索相关,Lucene、Solr等,其中Solr对比起ElasticSearch来说,建立索引时搜索效率会有影响,对于实时搜索引擎来说效率并不好,Solr对于传统的项目来说支持还可以,但并不适用与海量数据实时检索。
3.大数据产品分布
以星环科技为例,一些商业化大数据产品总是以平台形式进行集成设计。
如图所示, 数据中心作为最底层操作系统层支持, 目前主要是以Docker、Kubernates等容器化技术为核心的云计算平台; 中间层为核心的企业级大数据平台,著名的有星环自主研发的大数据平台TDH、Cloudera的商用发行版CDH等等;大数据 上层一般为数据分析以及人工智能平台,例如:星环人工智能平台Sophon。