大数据知识点总结

语文资源 2019-3-24 668

  导语:原始数据要经过一连串收集、提取、清洗、整理等等的预处理过程,才能形成高质量的数据;按照自己的需要,比如要对数据贴标签分类,或者预测,或者想要从大量复杂的数据中提取有价值的且不易发现的信息,下面由小编为您整理出的大数据知识点总结内容,一起来看看吧。

  1、Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

  用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

  2、Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

  3、Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

  4、Hadoop它主要有以下几个优点:

  (a)高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。

  (b)高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

  (c)高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

  (d)高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

  (e)低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。

  5、HDFS

  对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。

  存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。

  6、NameNode

  NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。

  NameNode本身不可避免地具有SPOF(Single Point Of Failure)单点失效的风险,主备模式并不能解决这个问题,通过Hadoop Non-stop namenode才能实现100% uptime可用时间。

  7、DataNode

  DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。

  DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。

  8、集群系统

  Google的数据中心使用廉价的Linux PC机组成集群,在上面运行各种应用。核心组件是3个:

  (a)GFS(Google File System)。一个分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口。Google根据自己的需求对它进行了特别优化,包括:超大文件的访问,读操作比例远超过写操作,PC机极易发生故障造成节点失效等。GFS把文件分成64MB的块,分布在集群的机器上,使用Linux的文件系统存放。同时每块文件至少有3份以上的冗余。中心是一个Master节点,根据文件索引,找寻文件块。详见Google的工程师发布的GFS。

  (b)MapReduce。Google发现大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成最终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上。

  (c)BigTable。一个大型的分布式数据库,这个数据库不是关系式的数据库。像它的名字一样,就是一个巨大的表格,用来存储结构化的数据。

  9、子项目

  (a)HDFS: Hadoop分布式文件系统(Distributed File System)

  (b)MapReduce:MapReduce是处理大量半结构化数据集合的编程模型

  (c)HBase:类似Google BigTable的分布式NoSQL列数据库。

  HBase是一个分布式的,面向列的数据库。它基于Hadoop之上提供了类似BigTable的功能。

  (d)Hive:数据仓库工具。

  Hive是 一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类似SQL一样的查询语言HiveQL来管理这些数据。

  (e)Zookeeper:分布式锁设施,提供类似Google Chubby的功能。

  ZooKeeper是一个针对大型分布式系统的可靠协调系统,提供包括配置维护,名字服务,分布式同步和组服务等功能。 Hadoop的管理就是用的ZooKeeper。

  (f)Avro:新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。

  (g)Pig: 大数据分析平台,为用户提供多种接口。

  Pig是一个基于Hadoop的大数据分析平台,它提供了一个叫PigLatin的高级语言来表达大数据分析程序。

  (h)Ambari:Hadoop管理工具,可以快捷的监控、部署、管理集群。

  对Hadoop集群进行监控和管理的基于Web的系统。目前已经支持HDFS, MapReduce, Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig和Sqoop等组件。

  (i)Sqoop:在HADOOP与传统的数据库间进行数据的传递。

  Sqoop是一个Hadoop和关系型数据库之间的数据转移工具。可将关系型数据库中的数据导入到Hadoop的HDFS中,也可将HDFS中的数据导进到关系型数据库中。

  10、Hadoop1.x与Hadoop2.x的区别:

  Hadoop2.x中有两个重要的变更:

  (a)HDFS的NameNode可以以集群的方式部署,增强了NameNode的水平扩展能力和可用性

  (b)MapReduce将JobTrack中的资源管理及任务生命周期管理(包括定时触发及监控),拆分成两个独立的组件,并更名为YARN

  11、Hadoop2.x解决了Hadoop1.x中的哪些问题

  (a)2.x解决了1.x中的namenode单点故障问题

  (b)解决了namenode内存压力过大难以扩展问题

  (c)解决了JobTrack单点故障问题

  (d)解决了JobTrack访问压力过大问题

  (e)解决了对MapReduce之外的框架支持问题

  12、Zeppelin是一个基于web的可视化的大数据分析工具。主要用来进行交互式的数据分析,它可以跟多种大数据分析组件集成在一起,为这些大数据分析组件提供基于浏览器页面的交互式访问功能。

  13、Zeppelin的主要用途

  1、Data Ingestion(数据摄取)

  2、Data Discovery(数据发现)

  3、Data analytics(数据分析)

  4、Data Visualization & Collaboration(数据可视化和协同开发)

  14、Zeppelin的主要特点

  a、支持多种编程语言

  b、Zeppelin支持的语言取决于跟Zeppelin集成的interpreter. 比如Zeppelin跟Hive集成后,就可以支持HQL。

  c、Zeppelin默认跟Spark,Spark shell支持的语法在Zeppelin都默认支持,并且ZeppelinNotebook对Scala,Python和Spark SQL还实现了语言高亮。

  d、默认支持Spark

  e、通过多种图表的方式,对数据分析提供数据可视化的支持

  f、通过简单的拖拽操作,可以对图表中展示的数据进行多种方式的聚合操作,如sum, count, average, min, max。

  g、支持动态表单,可以在交互中动态修改过滤条件。

  h、使用简单的模板语言来创建form表单, 适用于Markdown, Shell, SparkSQL后台。

  i、通过编程的方式创建form表单,适用于Scala,Python等,调用z(ZeppelinContext)来创建和访问表单。

  j、支持协同开发,Zeppelin的notebook,可以被多人同时使用,任何一个人的改动都会被实时的同步到其他协作者的页面上。

  k、Zeppelin notebook上产生的图表,可以被独立发布,通过iframe,可以嵌入到别的网页上。

  l、100%开源的Apache项目。

  15、Ambari是一个开源的分布式Hadoop集群安装,部署,监控和管理的平台。

  16、Ambari主要由三个部分组成, Ambari Server, Ambari Web和Ambari Agent。

  Ambari Server: AmbariServer是整个Ambari的统一入口,只能运行在集群中的一台机器上。负责管理所有的Ambari Agent。

  Ambari Web: AmbariWeb和Ambari Server运行在同一台机器上,作为Ambari Server的一部分功能存在,提供Web和RestAPI的方式访问AmbariServer。

  AmbariAgent:AmbariAgent需要在集群中的每个节点上都运行一个,负责监控宿主机器的状态信息,执行从Ambari Server上发送过来的操作指令。

  17、Spark是UCBerkeleyAMPlab所开源的类HadoopMapReduce的通用的并行计算框架,Spark基于mapreduce算法实现的分布式计算,拥有HadoopMapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

  18、Spark与Hadoop的对比(Spark的优势)

  1、Spark的中间数据放到内存中,对于迭代运算效率更高

  2、Spark比Hadoop更通用

  3、Spark提供了统一的编程接口

  4、容错性– 在分布式数据集计算时通过checkpoint来实现容错

  5、可用性– Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性

  19、Spark的组件

  1、Spark Streaming:支持高吞吐量、支持容错的实时流数据处理

  2、Spark SQL, Data frames: 结构化数据查询

  3、MLLib:Spark 生态系统里用来解决大数据机器学习问题的模块

  4、GraphX:是构建于Spark上的图计算模型

  5、SparkR:是一个R语言包,它提供了轻量级的方式使得可以在R语言中使用 Spark

  20、DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。

  21、DataFrame与RDD的主要区别在于:

  前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得SparkSQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观RDD,由于无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。

  22、MLlib是spark的可以扩展的机器学习库,由以下部分组成:通用的学习算法和工具类,包括分类,回归,聚类,协同过滤,降维

  23、SparkR实现了分布式的data frame,支持类似查询、过滤以及聚合的操作

  24、RDD,全称为Resilient Distributed Datasets,是个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据。

  25、RDD的特点:

  1. 它是在集群节点上的不可变的、已分区的集合对象。

  2. 通过并行转换的方式来创建如(map, filter, join, etc )。

  3. 失败自动重建。

  4. 可以控制存储级别(内存、磁盘等)来进行重用。

  5. 必须是可序列化的。

  6. 是静态类型的。

  26、RDD核心概念

  Client:客户端进程,负责提交作业到Master。

  Master:Standalone模式中主控节点,负责接收Client提交的作业,管理Worker,并命令Worker启动分配Driver的资源和启动Executor的资源。

  Worker:Standalone模式中slave节点上的守护进程,负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver和Executor。

  Driver: 一个Spark作业运行时包括一个Driver进程,也是作业的主进程,负责作业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。

  Executor:即真正执行作业的地方,一个集群一般包含多个Executor,每个Executor接收Driver的命令Launch Task,一个Executor可以执行一到多个Task。

  27、RDD常见术语

  DAGScheduler: 实现将Spark作业分解成一到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。

  TaskScheduler:实现Task分配到Executor上执行。

  Task:运行在Executor上的工作单元

  Job:SparkContext提交的具体Action操作,常和Action对应

  Stage:每个Job会被拆分很多组任务(task),每组任务被称为Stage,也称TaskSet

  RDD:Resilient Distributed Datasets的简称,弹性分布式数据集,是Spark最核心的模块和类

  Transformation/Action:SparkAPI的两种类型;Transformation返回值还是一个RDD,Action返回值不少一个RDD,而是一个Scala的集合;所有的Transformation都是采用的懒策略,如果只是将Transformation提交是不会执行计算的,计算只有在Action被提交时才会被触发。

  DataFrame: 带有Schema信息的RDD,主要是对结构化数据的高度抽象。

  DataSet:结合了DataFrame和RDD两者的优势,既允许用户很方便的操作领域对象,又具有SQL执行引擎的高效表现。

  28、RDD提供了两种类型的操作:transformation和action

  1,transformation是得到一个新的RDD,方式很多,比如从数据源生成一个新的RDD,从RDD生成一个新的RDD

  2,action是得到一个值,或者一个结果(直接将RDD cache到内存中)

  3,所有的transformation都是采用的懒策略,就是如果只是将transformation提交是不会执行计算的,计算只有在action被提交的时候才被触发

  29、RDD中关于转换(transformation)与动作(action)的区别

  前者会生成新的RDD,而后者只是将RDD上某项操作的结果返回给程序,而不会生成新的RDD;无论执行了多少次transformation操作,RDD都不会真正执行运算(记录lineage),只有当action操作被执行时,运算才会触发。

  30、RDD 与 DSM(distributed shared memory)的最大不同是:

  RDD只能通过粗粒度转换来创建,而DSM则允许对每个内存位置上数据的读和写。在这种定义下,DSM不仅包括了传统的共享内存系统,也包括了像提供了共享 DHT(distributed hash table) 的 Piccolo 以及分布式数据库等。

  31、RDD的优势

  1、高效的容错机制

  2、结点落后问题的缓和 (mitigate straggler) :

  3、批量操作:

  4、优雅降级 (degrade gracefully)

  32、如何获取RDD

  1、从共享的文件系统获取,(如:HDFS)

  2、通过已存在的RDD转换

  3、将已存在scala集合(只要是Seq对象)并行化 ,通过调用SparkContext的parallelize方法实现

  4、改变现有RDD的之久性;RDD是懒散,短暂的。

  33、RDD都需要包含以下四个部分

  a.源数据分割后的数据块,源代码中的splits变量

  b.关于“血统”的信息,源码中的dependencies变量

  c.一个计算函数(该RDD如何通过父RDD计算得到),源码中的iterator(split)和compute函数

  d.一些关于如何分块和数据存放位置的元信息,如源码中的partitioner和preferredLocations

  34、在RDD中将依赖划分成了两种类型:

  窄依赖(narrowdependencies)和宽依赖(widedependencies)。窄依赖是指父RDD的每个分区都只被子RDD的一个分区所使用。相应的,那么宽依赖就是指父RDD的分区被多个子RDD的分区所依赖。例如,map就是一种窄依赖,而join则会导致宽依赖

  依赖关系分类的特性:

  第一,窄依赖可以在某个计算节点上直接通过计算父RDD的某块数据计算得到子RDD对应的某块数据;

  第二,数据丢失时,对于窄依赖只需要重新计算丢失的那一块数据来恢复;

  35、数据分析常见模式:

  1、Iterative Algorithms,

  2、Relational Queries,

  3、MapReduce,

  4、Stream Processing,

  36、Spark Streaming的基本原理是将输入数据流以时间片(秒级)为单位进行拆分,然后以类似批处理的方式处理每个时间片数据

  37、Spark Streaming优劣

  优势:

  1、统一的开发接口

  2、吞吐和容错

  3、多种开发范式混用,Streaming + SQL, Streaming +MLlib

  4、利用Spark内存pipeline计算

  劣势:

  微批处理模式,准实时

  38、Flume是一个分布式的日志收集系统,具有高可靠、高可用、事务管理、失败重启等功能。数据处理速度快,完全可以用于生产环境。

  39、Flume的核心是agent。Agent是一个java进程,运行在日志收集端,通过agent接收日志,然后暂存起来,再发送到目的地。

  Agent里面包含3个核心组件:source、channel、sink。

  Source组件是专用于收集日志的,可以处理各种类型各种格式的日志数据,包括avro、thrift、exec、jms、spoolingdirectory、netcat、sequencegenerator、syslog、http、legacy、自定义。source组件把数据收集来以后,临时存放在channel中。

  Channel组件是在agent中专用于临时存储数据的,可以存放在memory、jdbc、file、自定义。channel中的数据只有在sink发送成功之后才会被删除。

  Sink组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。

  40、ApacheKafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。

  41、Apache Kafka与传统消息系统相比,有以下不同:

  1、它被设计为一个分布式系统,易于向外扩展;

  2、它同时为发布和订阅提供高吞吐量;

  3、它支持多订阅者,当失败时能自动平衡消费者;

  4、它将消息持久化到磁盘,因此可用于批量消费

  42、DataFrame 特性

  1、支持从KB到PB级的数据量

  2、支持多种数据格式和多种存储系统

  3、通过Catalyst优化器进行先进的优化生成代码

  4、通过Spark无缝集成主流大数据工具与基础设施

  5、API支持Python、Java、Scala和R语言

  43、Scala的好处:

  1、面向对象和函数式编程理念加入到静态类型语言中的混合体

  2、Scala的兼容性----能够与Java库无缝的交互

  3、Scala的简洁性----高效,更不容易犯错

  4、Scala的高级抽象

  5、Scala是静态类型----类型推断

  6、Scala是可扩展的语言

  44、搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。

  45、Lucene是一个高性能、可伸缩的信息搜索库,即它不是一个完整的全文检索引擎,而是一个全检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。

  46、Elasticsearch是一个高可扩展的、开源的全文本搜索和分析工具。它允许你以近实时的方式快速存储、搜索、分析大容量的数据。

  Elasticsearch是一个基于ApacheLucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

  47、ElasticSearch 有4种方式来构建数据库,

  最简单的方法是使用indexAPI,将一个Document发送到特定的index,一般通过curltools实现。

  第二第三种方法是通过bulkAPI和UDPbulkAPI。两者的区别仅在于连接方式。

  第四种方式是通过一个插件——river。river运行在ElasticSearch上,并且可以从外部数据库导入数据到ES中。需要注意的是,数据构建仅在分片上进行,而不能在副本上进行。

  48、ELK是一套常用的开源日志监控和分析系统,包括一个分布式索引与搜索服务Elasticsearch,一个管理日志和事件的工具logstash,和一个数据可视化服务Kibana

  logstash                负责日志的收集,处理和储存

  elasticsearch           负责日志检索和分析

  Kibana                  负责日志的可视化

  49、Hive是什么?

  Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质是将HQL转换为MapReduce程序

  50、Hive的设计目标?

  1、Hive的设计目标是使Hadoop上的数据操作与传统SQL相结合,让熟悉SQL编程开发人员能够轻松向Hadoop平台迁移

  2、Hive提供类似SQL的查询语言HQL,HQL在底层被转换为相应的MapReduce操作

  3、Hive在HDFS上构建数据仓库来存储结构化的数据,这些数据一般来源与HDFS上的原始数据,使用Hive可以对这些数据执行查询、分析等操作。

  51、Hive的数据模型

  1、Hive数据库2、内部表3、外部表4、分区5、桶6、Hive的视图

  52、Hive的调用方式

  1、Hive Shell 2、Thrift 3、JDBC 4、ODBC

  53、Hive的运行机制

  1、将sql转换成抽象语法树

  2、将抽象语法树转化成查询块

  3、将查询块转换成逻辑查询计划(操作符树)

  4、将逻辑计划转换成物理计划(MRjobs)

  54、Hive的优势

  1、并行计算

  2、充分利用集群的CPU计算资源、存储资源

  3、处理大规模数据集

  4、使用SQL,学习成本低

  55、Hive应用场景

  1、海量数据处理 2、数据挖掘 3、数据分析 4、SQL是商务智能工具的通用语言,Hive有条件和这些BI产品进行集成

  56、Hive不适用场景

  1、复杂的科学计算 2、不能做到交互式的实时查询

  57、Hive和数据库(RDBMS)的区别

  1、数据存储位置。Hive是建立在Hadoop之上的,所有的Hive的数据都是存储在HDFS中的。而数据库则可以将数据保存在块设备或本地文件系统中。

  2、数据格式。Hive中没有定义专门的数据格式,由用户指定三个属性:列分隔符,行分隔符,以及读取文件数据的方法。数据库中,存储引擎定义了自己的数据格式。所有数据都会按照一定的组织存储。

  3、数据更新。Hive的内容是读多写少的,因此,不支持对数据的改写和删除,数据都在加载的时候中确定好的。数据库中的数据通常是需要经常进行修改。

  4、执行延迟。Hive在查询数据的时候,需要扫描整个表(或分区),因此延迟较高,只有在处理大数据是才有优势。数据库在处理小数据是执行延迟较低。

  5、索引。Hive没有,数据库有

  6、执行。Hive是MapReduce,数据库是Executor

  7、可扩展性。Hive高,数据库低

  8、数据规模。Hive大,数据库小

  58、Hbase 的模块:

  Region

  - Region用于存放表中的行数据

  - 当一个表格很大的时候,数据会存放并共享在多个Region中

  - 每一个Region只存放一个单一的Column Family

  Region Server

  - 一个Region Server包含多个Region

  - 管理表格,以及实现读写操作

  - Client会直接和Region Server通信获取数据

  Master

  - 协调多个Region Server

  - 侦测各个Region Server的状态并平衡它们之间的workload

  - 分配Region给Region Serer

  - 允许多个Master节点,但是只有一个服务,其他是backup

  - 和Zookeeper一起工作实现HA

  Zookeeper

  - Hbase中至关重要的模块

  - 确保有一个Master处于Running的状态

  - 注册Region和Region Server

  - 属于Hbase容错性的一部分

  HDFS

  - Hadoop 的分布式文件系统(Hadoop Distributed File System)

  API

  - Hbase提供Java的Client API

不坑老师小灶资源(限时开启) ¥ 199