大数据杂谈篇:认识大数据生态(个人心得分享)

内容简介

    • 一、什么是大数据?它可以做什么?
    • 二、走进大数据生态框架
        • 1.Hadoop
        • 2.Spark
        • 3.Hive
        • 4.HBase
        • 5.Kafka
        • 6.Flume
        • 7.Zookeeper
    • 三、初识大数据生态系统
    • 四、总结

一、什么是大数据?它可以做什么?

  • 接触大数据也有一段时间了,从当初什么都不会的纯小白到现在已经基本入门(还是很弱),在学习的道路上跌跌撞撞的,一部分原因是国内大数据的学习资料相比于其他IT技术要少很多,还有一部分原因是大数据涉及的知识比较多,知识点多,相对来说比较复杂,因此今天就想着把自己所学的东西整理一下,纯当是个人的分享,如有错误的地方请大方指出来,大家一起交流学习!
  • 什么是大数据呢?随便百度或者谷歌一下都可以得到很多专业的答案,但是都比较晦涩难懂涉及到很多专业的名词,其实在我看来,抛开依靠大数据实现的功能(预测、推荐)不说,只说大数据本身所做的最基础的最核心事情,归根到底,只做了两件事情,或者说只提供了两个最核心的服务:海量数据的存储和计算。存储和计算是每台计算机都有的服务,这以“知识点多”的大数据似乎没有什么关系,所以重点是“海量”,数据量非常之巨大(数千TB甚至更多),以致于一台计算机无法在短时间内处理甚至无法处理,需要多台计算机并行处理,这就是大数据的核心思想------分而治之,将海量的数据拆分为小块,分配给多台计算机,进行存储或运算。所以高深莫测的“大数据”归根到底就是基于集群(多台计算机)的存储和运算。
  • 大数据可以做什么呢?首先大数据本身的技术是处理海量的数据,因此可以完成各种类型数据的清洗、统计,流量的监控,最典型的例子就是微博热搜,如果你有留意的话,会发现微博搜索框旁边有一小行字“微博热搜 每分钟更新一次”,其实就是在一分钟时间段内统计搜索词的个数倒叙排序,用到了大数据的实时流计算的技术,类似于这种流量监控的还有哦百度热搜等各种热搜,除此之外,还有电商平台的热卖商品、热卖品类等等,大数据技术还可以向上层技术提供基础服务,比如说机器学习,是必须建立在大数据实时流处理基础之上的技术,结合起来可以实现很多的推荐,典型的有网易云音乐的每日歌单推荐,电商平台的商品推荐等等,如果机器学习离开了大数据,那它将无法“学习”了,除此之外还有股票预测,大数据舆情监控品台、大数据反欺诈平台等等,都是大数据的应用。

二、走进大数据生态框架

1.Hadoop

  • Hadoop这应该是我们听得最多的一个大数据框架了,它也绝对是开源的大数据框架的“开山鼻祖”,在整个大数据生态也有着重要的地位,那么Hadoop是什么呢?它是由一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。其实在我看来用“海量数据批处理平台”来形容它更为贴切,因为Hadoop本身即可完成海量数据的存储和计算,Hadoop有三大核心组件:
    (1).分布式文件系统HDFS。
    (2).分布式计算框架MapReduce。
    (3).分布式资源调度框架YARN(Hadoop2.x版本后)。
    分布式文件系统HDFS顾名思义即是协调多台计算机来存储海量的数据,核心思想便是将文件切割,然后存储在多台计算机上,它定义了“如何存储”,提供可靠的数据存储服务;分布式计算框架MapReduce,其实是一种分布式计算的模型,每台计算机会依照这个模型进行计算,它定义了“如何计算”,提供可靠的计算服务;分布式资源调度框架YARN负责调度MapReduce的资源,即调度多台计算机在运算时的资源问题,它定义了“如何调度”,提供可靠的资源调度服务,事实上YARN除了调度自身的MapReduce作业,也可以调用其他作业。所以可以发现Hadoop一个框架已经囊括了“存储和计算”,这也是为什么Hadoop这么有名的原因之一,成为大数据入门必学框架。
  • 附上一张Hadoop可爱的图片:
    大数据杂谈篇:认识大数据生态(个人心得分享)_第1张图片

2.Spark

  • 除了Hadoop这个大数据框架,Spark也是我们经常能听到的有关大数据相关的另一个框架,Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎,Spark与上面提到的MapReduce一样是一个计算引擎,但是Spark比MapReduce要更加的优秀,它出现的原因就是为了解决Hadoop的不足,Spark是基于内存的计算引擎,支持流式计算,这是Hadoop所做不到的,Spark内部同样有着几个核心的部件:
    (1).Spark Core,Spark的核心,它负责向上层服务提供集群的通信,以及定义了RDD(弹性分布式数据集)这个数据结构,以及封装了大量的类比如说SparkContext等和API,以供给上层的服务调用,是Spark最为核心的部件。
    (2).Spark SQL是构建在Spark Core之上的一个部件,是 Spark 处理结构化数据的一个模块,使用简洁得SQL语句即可完成大量复杂的数据工作,并且提供交互式的查询功能。
    (3).Spark Streaming这是构建在Spark Core之上的部件,是Spark实现流式计算的部件,基本的原理是将Stream数据分成小的时间片段(几秒),以类似batch批量处理的方式来处理这小部分数据。
    (4).Spark MLlib是构建在Spark Core之上的机器学习库,里面封装了大量机器学习的算法。
    (5).Spark GraphX是构建在Spark Core之上的用于图计算的库,里面封装了大量图计算的算法。
    Spark的5个部件构成了Spark的技术栈,提供了非常强大的功能,技术人员可以无缝地调用它们,比如说我在使用Spark Core来开发的时候需要读取关系型数据库的数据,那我可以直接使用Spark SQL的API去读取数据库,然后继续将读取的数据来计算,而无论你通过何种方式来读取数据,最终会被转换为底层的RDD来运算。
  • Hadoop与Spark的关系。之前我看到多很多类似的话:Spark是用来取代Hadoop的,这句话不完全对,首先要明确的是,Hadoop是集存储、计算、调度一体化的框架,而Spark仅仅只是一个计算引擎,Spark本身并没有存储的功能,因此,严谨地表述应该是:Spark可以在绝大多数情况下替代MapReduce,而不是替代Hadoop。事实上,Hadoop是与Spark相辅相成,共同完成工作的。
  • 附上Spark技术栈的图:
    大数据杂谈篇:认识大数据生态(个人心得分享)_第2张图片

3.Hive

  • Hive是Apache社区的开源项目,是建立在Hadoop之上的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行,是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive的出现一部分原因在于管理HDFS中的数据,在往Hadoop的分布式文件系统传入的数据中,有很多是类结构化的数据,比如说服务器的日志,如果要定位这些海量日志中的某个字段的值时,如果仅仅通过HDFS效率是很低的,技术人员需要花费时间去编写代码定位数据,但是Hive可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,这就可以使用类SQL(Hive提供的语言叫HQL)语句去查询了,使得不了解大数据的技术人员也可以快速开发,开发效率高很多,其HQL语句底层会转变为MapReduce作业运行在YARN上。其次,Hive也是对MapReduce的封装,在Hive出现之前,技术人员在编写MapReduce处理数据时往往涉及到大量代码的编写,而且容易出错,效率低,Hive出现以后通过编写HQL语句可以处理复杂的业务而无需编写MapReduce作业。
  • 必须要清楚的是,Hive不是关系型数据库,甚至不是数据库,在我看来更明确的描述应该是一个构建在Hadoop之上的数据管理工具,负责对结构化数据的管理,并且提供类SQL语句的查询,底层还是依靠MapReduce去处理数据。

4.HBase

  • HBase是一个分布式的、面向列的建立在Hadoop之上的开源非关系型数据库。分布式说明HBaase是以基于集群来对外提供服务的;面向列的非关系型数据库说明HBase是一个NoSQL,这是因为传统的关系型数据库处理小规模的结构化数据有着绝对的优势:1.提供二维表格模型,对于结构化数据的组织非常适合,且提供大量的索引帮助用户快速定位和修改数据,2.提供完整的事务支持使得数据的读写的安全性得到了有力保障,3.使用SQL语言查询和修改数据,编程便捷。但是如果处理海量不规则的数据时就会显得非常“力不从心”:光是为数据建立索引已经耗尽大量的空间,更别提要快速定位数据,因此出现了HBase;建立在Hadoop之上说明HBase底层的数据存储在Hadoop,Hadoop为HBase提供可靠的数据存储,HBase则提供数据的检索与定位服务。
  • 在我看来,HBase只提供两个最为核心的服务:海量数据的随机定位与实时读写。数据存储在Hadoop的HDFS上,有的人可能觉得奇怪为什么不直接从HDFS上读取数据呢?这是因为从Hadoop的HDFS定位数据是很耗费时间,内部会建立很多的数据流来读取,再加上HDFS的数据分割机制,副本机制所以仅仅直接通过HDFS读取或者定位大量数据是很耗费时间的,而HBase却可以快速定位数据的位置并提供实时读写的服务,大大减少耗费的时间,可以笼统地说,HBase的诞生部分原因是为了解决Hadoop的读写服务慢的问题,因此可以得出一个结论,HDFS最核心的服务是提供可靠的数据存储

5.Kafka

  • Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。Kafka一般不会单独来使用,而是作为大数据实时流处理的中间件来使用,常见的用法是Kafka + Spark Streaming,Kafka + Flink,在实时流处理系统中Kafka的作用很关键,起到一个数据流的缓冲作用,为什么需要缓冲呢?主要原因是数据源产生数据的速度要比处理速度要快很多,如果不加以缓冲则会使实时处理框架存储数据的内存溢出,JVM抛出内存溢出错误使得整个程序被中断,数据被丢失。而Kafka相当于一个分布式的消息队列,它本身也提供了副本机制对数据进行容错,提供了一定的保障,另一方面,它可以对消息流进行缓存(在Kafka中数据即是消息),它提供了生产者和消费者两种抽象,而实时处理框架便是消费者,数据源便是生产者。

6.Flume

  • Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。说明了,Flume就是一个日志收集框架,通常来说,在生产上会有很多台服务器同时对外提供服务,每台服务器都会在每时每刻产生数据,所以在处理数据的时候第一步是先把各个服务器产生的数据收集起来,统一再进行后续的处理,这就是Flume最核心的功能。Flume有三个核心的组件:
    (1).Source:从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等。
    (2).Channel:channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着桥梁的作用。
    (3).Sink:sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.
    所以一个典型的大数据离线批处理系统的流程是,Flume收集若干台服务器产生的日志,即Source是若干台服务器,然后将数据存储在HDFS上,即Sink是HDFS,将数据存储在HDFS上之后再启动MpaReduce或者Hive去跑批量作业,再将结果输出到关系型数据库或者HDFS上。

7.Zookeeper

  • ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。经过以上框架的介绍,你会发现,绝大部分大数据的框架都是分布式的,即集群的组成模式是由一个Master和若干个Slave组成,集群本身提供容错机制,比如说HDFS,即使有某个Slave节点挂掉了,对于整个集群也不会有影响,这是容错机制,但是集群没有容灾机制,即Master节点挂掉之后就整个就群就相当于挂掉了,所以需要有一套服务去监控集群的健康状态,以防止在集群出现不可自我调节的错误后及时恢复。既然每个集群都存在着相同的问题,那为什么不将其单独封装起来同时给多个集群使用呢?这就是Zookeeper诞生的初衷之一,它的功能之一就是会监控集群的监控状态,如果Master挂掉就会立刻启动备份的Master(提前配置好)继续提供服务。
  • 而对于某些大数据框架如HBase、Kafka等,Zookeeper还是其必备的框架,如果没有Zookeeper,这些框架就无法正常地使用,各节点依靠Zookeeper完成元数据的统一。有意思的是,你还可以直接通过Zookeeper这个名字就可以猜到你是做什么的了,在大数据生态中,很多框架的图标是动物:Hadoop是大象,Hive是蜜蜂,HBase是鲨鱼,Flink是松鼠,像个动物园一样,因而必须有一位动物园的管理协调者,就是Zookeeper了。

三、初识大数据生态系统

  • 何为叫大数据生态系统呢?这个说法就揭示了在大数据处理中,并不是仅靠一个框架就能完成复杂的数据处理工作,而是根据需求需要多个框架共同完成,大致数据流的走向:
    大数据杂谈篇:认识大数据生态(个人心得分享)_第3张图片
    可以看到在大数据处理中,主要有实时流处理和离线批处理两种方式,数据源是应用服务器,然后由Flume进行收集,收集后可以直接和Kafka对接,进入缓冲队列,然后由实时流处理框架进行消费,比如Spark Streaming,实时流处理框架把处理后的数据写入关系型数据库MySQL或者HBase中,最后由Web服务将统计数据读取用作其他用途比如数据可视化。另外一条离线批处理则是数据收集后写入HBase中,然后Hadoop的MapReduce框架或者Spark SQL等框架会从中取出数据跑批量处理,并将处理结果写入HDFS供给其他服务调用。
  • 最后附上一张大数据生态的全家福:
    大数据杂谈篇:认识大数据生态(个人心得分享)_第4张图片
    我们之前介绍的框架都在上面。

四、总结

  • 本文纯粹个人心得,分享了本人对于大数据的一些定义和看法,顺带介绍了一些大数据生态中的常用框架,其实除了那些框架,大数据还有其他的框架如Flink、Storm、Sqoop等等,就不一一介绍了,感兴趣的小伙伴可以自行找资料了解了解。感谢你的阅读,如有错误请不吝赐教!
  • 更多内容查看 萧邦主的技术博客导航

你可能感兴趣的:(大数据杂谈)