大数据复习
- 大数据复习上
- 第一章
- 第二章
- 第三章
- 第四章
- 第五章
- 第七章
- 第八章
- 大数据复习下
- 1、大数据概念
- 2、Spark架构有哪些(分别都是什么)问答题(Spark的基本架构)
- 3、Spark和Hadoop的对比
- 4、Spark开发用什么语言:
- 5、为什么Spark要采用Scala语言?
- 6、
- 7、编程范式
- 8、Scala容器有哪些?适合干什么
- 9、
- 10、什么是特质
- 11、函数式编程命名方式,什么是函数式编程
- 12、对容器的操作
- 13、Spark的主要特点(大题)
- 14、什么是RDD(大题)
- 15、RDD工作方式是什么(大题)
- 16、RDD操作类型
- 17、解释宽依赖和窄依赖
- 18、Stage相关的 分析图
- 19、解释DataFrame以及和RDD有什么区别
- 20、Sql 数据库和nosql 数据库有什么区别(关系型数据库和非关系型数据库)
- 21、streaming数据的一些特点
- 22、Spark是怎么处理streaming数据的
- 23、机器学习流水线有哪些构件
大数据复习上
第一章
1、
信息化浪潮 | 标志 | 解决的问题 |
第一次浪潮 | 个人计算机 | 信息处理 |
第二次浪潮 | 互联网 | 信息传输 |
第三次浪潮 | 物联网、云计算和大数据 | 信息爆炸 |
2、人类社会的数据产生方式大概经历了3个阶段:运营式阶段、==用户原创内容阶段==和**感知式系统阶段**
3、大数据的4个“V”,或者说是大数据的4个特点:数据量大、数据类型繁多、处理速度快、价值密度低
4、四种范式:实验科学、理论科学、计算科学、数据密集型科学。
5、大数据时代最大的转变就是思维方式的3种转变:全样而非抽样、效率而非精确、相关而非因果
6、MapReduce是大数据计算模式种的一种,它代表了针对大规模数据的批量处理技术,大数据计算模式:批处理计算、流计算、图计算、查询分析计算。
7、大数据、云计算、物联网的区别:
- 大数据侧重于对海量数据的存储、处理与分析,从海量数据中发现价值,服务于生产和生活;
- 云计算本质上旨在整合和优化各种IT资源,并通过网络以服务的方式廉价地提供给用户;
- 物联网的发展目标是实现物物相连,应用创新是物联网发展的核心
8、大数据、云计算、物联网的联系:从整体上看,大数据、云计算和物联网这三者是相辅相成的。
- 云计算为大数据提供了技术基础,大数据为云计算提供用武之地
- 云计算为物联网提供海量数据存储能力,物联网为云计算技术提供了广阔的应用空间
- 物联网是大数据的重要来源,大数据技术为物联网数据分析提供支撑
第二章
1、Hadoop是Apache软件基金会旗下的一个**开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。Hadoop的核心是分布式文件系统(hdfs)和MapReduce**。
2、Hadoop生态系统
- HDFS:分布式文件系统
- YARN:资源调度和管理框架
- MapReduce:分布式计算框架
- Hive:数据仓库
- Pig:数据流处理
- Mahout:数据挖掘库
- Zookeeper:分布式协作服务
- HBase:分布式数据库
- Flume:日志收集
- Sqoop:数据库ETL
- Ambari:安装、部署、配置和管理工具
第三章
1、HDFS默认的一个块大小是**64MB**
2、名称节点(NameNode)和数据节点(DataNode)是干什么的?
名称节点:名称节点负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系。(因此客户端只有访问名称节点才能找到请求的文件块所在的位置,进而到相应位置读取所需文件块)
数据节点:数据节点负责数据的存储和读取。(在存储时,由名称节点分配存储位置,然后由客户端把数据直接写入相应数据节点;在读取时,客户端从名称节点获得数据节点和文件块的映射关系,然后就可以到相应位置访问文件块。数据节点也要根据名称节点的命令创建、删除数据块和冗余复制)
3、第二名称节点(SecondaryNameNode)的功能:
- 可以完成EditLog与FsImage的合并操作,减少EditLog文件的大小,缩短名称节点重启时间。
- 可以作为名称节点的“检查点”,保存名称节点中的元数据信息。
4、HDFS采用多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上。
5、HDFS默认的冗余复制因子是3,每一个文件会被同时保存到3个地方,其中有两份副本放在同一个机架的不同机器上,第三个副本放在不同机架的机器上。
第四章
1、用户在表中存储数据,每一行都有一个可排列的行键和任意多的列。表在水平方向由一个或多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起。
2、HBase是一个稀疏、多维、持久化的映射表,它采用行键、列族、列限定符和时间戳进行索引,每个值都是未经解释的字节数组byte[]。
3、面向行的存储和面向列的存储的区别(行式数据库和列式数据库的区别)
- 行式数据库使用NSM存储模型,一个元组(或行)会被连续地存储在磁盘页中。如果每个元组只有少量属性的值对于查询是有用的,那么NSM就会浪费许多磁盘空间和内存带宽。
列式数据库采用DSM存储模型,DSM对关系进行垂直分解,并为每个属性分配一个子关系。 - 行式数据库主要适合于小批量地数据处理。列式数据库主要适合于批量数据处理和即席查询
- 列式数据库的优点:降低I/O开销,支持大量并发用户查询。缺点是:执行连接操作时需要昂贵的元组重构代价。
第五章
1、NoSQL与关系数据库的比较
- 关系数据库的突出优势在于,以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持;其劣势在于,可扩展性较差,无法较好地支持海量数据存储,数据模板过于死板,无法较好地支持Web2.0应用,事务机制影响了系统地整体性能。
- NoSQL数据库地明显优势在于,可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0应用,具有强大地横向扩展能力等;其劣势在于,缺乏数学理论基础,复杂查询性能不高,一般都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等。
2、NoSQL四大类型数据库以及代表:
- 键值数据库 Redis
- 列族数据库 HBase
- 文档数据库 MongoDB
- 图数据库 Neo4J
第七章
1、MapReduce原理:在MapReduce中,一个存储在分布式文件系统中的大规模数据集会被切分成许多独立的小数据块,这些小数据块可以被多个Map任务并行执行。
2、MapReduce设计理念:计算向数据靠拢
3、Map、Shuffle、Reduce。理解下图过程,中间转化过程。给定字符串能写出每一阶段的结果。
第八章
1、HDFS HA解决了什么问题?怎么解决的?
- 为了解决单点故障问题,HDFS2.0采用了HA架构。
- 在一个典型的HA集群中,一般设置两个名称节点,其中一个名称节点处于活跃状态,另一个处于待命状态。处于活跃状态的名称节点负责对外处理所有客户端的请求,而处于待命状态的名称节点则作为备用节点,保存了足够多的系统元数据,当名称节点出现故障时提供快速恢复能力。也就是说,在HDFS HA中,处于待命状态的名称节点提供了“热备份”,一旦活跃名称节点出现故障,就可以立即切换到待命名称节点不会影响到系统的正常对外服务。
2、HDFS联邦解决了HDFS1.0中的什么问题?怎么解决的?
解决了HDFS1.0中的可拓展性、性能和隔离性等问题。
- 在HDFS联邦中,设计了多个相互独立的名称节点,使得HDFS的命名服务能够水平扩展,这些名称节点分别进行各自命名空间和块的管理,相互之间式联邦关系,不需要彼此协调。
- HDFS联邦中的名称节点提供了命名空间和块管理功能。在HDFS联邦中,所有名称节点都会共享底层的数据节点存储资源。
- HDFS联邦中拥有多个独立的命名空间,其中,每一个命名空间管理属于自己的一组块,这些属于同一个命名空间的块构成一个“块池”(Block Pool)。每个数据节点会为多个块池提供块的存储。
大数据复习下
1、大数据概念
大数据不仅仅是数据的“大量化”,而是包含“快速化”、“多样化”和“价值化”等多重属性
2、Spark架构有哪些(分别都是什么)问答题(Spark的基本架构)
Spark Core、SparkSql、Spark Streaming、MLlib、GraphX
3、Spark和Hadoop的对比
1、Hadoop存在如下一些缺点:
- 表达能力有限
- 磁盘IO开销大
- 延迟高
- 任务之间的衔接涉及IO开销
- 在前一个任务执行完成之前,其他任务就无法开始,难以胜任复杂、多阶段的计算任务
2、Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题,相比于Hadoop MapReduce,Spark主要具有如下优点:
- Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比Hadoop MapReduce更灵活
- Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高
- Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制
4、Spark开发用什么语言:
可以采用Scala、Python、Java和R等语言
5、为什么Spark要采用Scala语言?
首选语言是Scala,因为Spark这个软件本身就是使用Scala语言开发的,采用Scala语言编写Spark应用程序,可以获得最好的性能。
(1)Java代码太繁琐。在大数据应用场景中,不太适合使用Java,因为,完成同样的任务,Scala只需要一行代码,而Java则可能需要10行代码;而且,Scala语言可以支持交互式编程,大大提高了程序开发效率,而Java则不支持交互式执行,必须编译以后运行。
(2)Python语言并发性能不好。在并发性能方面,Scala要明显优于Python,而且,Scala是静态类型,可以在编译阶段就抛出错误,便于开发大型大数据项目,此外,Scala兼容Java,运行在JVM上,可以直接使用Java中的Hadoop API来和Hadoop进行交互,但是,Python与Hadoop之间的交互非常糟糕,通常都需要第三方库(比如hadoopy)。
6、
λ演算被视为最小的通用程序设计语言
我们现在采用的是冯诺依曼计算机体系结构
7、编程范式
编程范式是指计算机编程的基本风格或典范模式。常见的编程范式主要包括==命令式编程和函数式编程==。面向对象编程就属于命令式编程,比如C++、Java等
8、Scala容器有哪些?适合干什么
Scala容器(collection)库,包括序列(Sequence)、集合(Set)、映射(Map)等
序列,集合,映射之间的区别和适用范围以及优点缺点?
- 序列(Sequence): 元素可以按照特定的顺序访问的容器。序列中每个元素均带有一个从0开始计数的固定索引位置。
序列容器的根是collection.Seq特质。其具有两个子特质 LinearSeq和IndexedSeq。LinearSeq序列具有高效的 head 和 tail 操作,而IndexedSeq序列具有高效的随机存储操作
实现了特质LinearSeq的常用序列有列表(List)和队列(Queue)。实现了特质IndexedSeq的常用序列有可变数组(ArrayBuffer)和向量(Vector) - 集合(set):不重复元素的容器(collection)
- 映射(Map):一系列键值对的容器。键是唯一的,但值不一定是唯一的。可以根据键来对值进行快速的检索
9、
- 在Scala里面所有的变量都分为==可变和不可变的==,方法参数前不能加上val或var,所有的方法参数都是不可变类型
- 单例对象用**object**关键字来表示
当一个单例对象和它的同名类一起出现时,这时的单例对象被称为这个同名类的“伴生对象”(companion object)。相应的类被称为这个单例对象的“伴生类”。
没有同名类的单例对象,被称为孤立对象(standalone object)。一般情况下,Scala程序的入口点main方法就是定义在一个孤立对象里
10、什么是特质
- Java中提供了接口,允许一个类实现任意数量的接口
- Scala中没有接口的概念,而是提供了“特质(trait)”,它不仅实现了接口的功能,还具备了很多其他的特性
- Scala的特质是代码重用的基本单元,可以同时拥有抽象方法和具体方法
- Scala中,一个类只能继承自一个超类,却可以实现多个特质,从而重用特质中的方法和字段,实现了多重继承
- 特质既可以包含抽象成员,也可以包含非抽象成员。包含抽象成员时,不需要abstract关键字。
- 特质可以使用extends继承其它的特质
11、函数式编程命名方式,什么是函数式编程
函数式编程的命名方式 def 方法名(参数列表):结果类型={方法体}
什么是函数式编程
- 函数字面量可以体现函数式编程的核心理念
- 在函数式编程中,函数是“头等公民”,可以像任何其他数据类型一样被传递和操作,也就是说,函数的使用方式和其他数据类型的使用方式完全一致了。这时,我们就可以像定义变量那样去定义一个函数,由此导致的结果是,函数也会和其他变量一样,开始有“值”
- 就像变量的“类型”和“值”是分开的两个概念一样,函数式编程中,函数的“类型”和“值”也成为两个分开的概念,函数的“值”,就是“函数字面量”
12、对容器的操作
遍历操作,映射操作,过滤操作,规约操作
13、Spark的主要特点(大题)
- 运行速度快:使用DAG执行引擎以支持循环数据流与内存计算
- 容易使用:支持使用Scala、Java、Python和R语言进行编程,可以通过Spark Shell进行交互式编程
- 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件
- 运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源
14、什么是RDD(大题)
RDD:是Resilient Distributed Dataset(弹性分布式数据集)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
15、RDD工作方式是什么(大题)
Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task
应用(Application):用户编写的Spark应用程序
任务( Task ):运行在Executor上的工作单元
作业( Job ):一个作业包含多个RDD及作用于相应RDD上的各种操作
阶段( Stage ):是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为阶段,或者也被称为任务集合,代表了一组关联的、相互之间没有Shuffle依赖关系的任务组成的任务集
16、RDD操作类型
RDD提供了一组丰富的操作以支持常见的数据运算,分为“动作”(Action)和“转换”(Transformation)两种类型
动作(Action)操作:foreach、collect、count、first等
转换(Transformation)操作:map、filter、flatMap、groupByKey、join等
17、解释宽依赖和窄依赖
- 窄依赖表现为一个父RDD的分区对应于一个子RDD的分区或多个父RDD的分区对应于一个子RDD的分区
- 宽依赖则表现为存在一个父RDD的一个分区对应一个子RDD的多个分区
窄依赖可以实现“流水线”优化。宽依赖无法实现“流水线”优化
18、Stage相关的 分析图
上图:被分成三个Stage,在Stage2中,从map到union都是窄依赖,这两步操作可以形成一个流水线操作
流水线操作实例:
分区7通过map操作生成的分区9,可以不用等待分区8到分区10这个map操作的计算结束,而是继续进行union操作,得到分区13,这样流水线执行大大提高了计算的效率
19、解释DataFrame以及和RDD有什么区别
DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能
Spark能够轻松实现从MySQL到DataFrame的转化,并且支持SQL查询
RDD是分布式的 Java对象的集合,但是,对象内部结构对于RDD而言却是不可知的
DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息
20、Sql 数据库和nosql 数据库有什么区别(关系型数据库和非关系型数据库)
关系数据库 | NoSQL数据库 |
- 数据关系模型基于关系模型,结构化存储,完整性约束。 - 基于二维表及其之间的联系,需要连接、并、交、差、除等数据操作。 - 采用结构化的查询语言(SQL)做数据读写。 - 操作需要数据的一致性,需要事务甚至是强一致性。 | - 非结构化的存储。 - 基于多维关系模型 - 具有特有的使用场景。 |
- 保持数据的一致性(事务处理) - 可以进行join等复杂查询。 - 通用化,技术成熟。 | - 高并发,大数据下读写能力较强。 - 基本支持分布式,易于扩展,可伸缩。 - 简单,弱结构化存储。 |
- 数据读写必须经过sql解析,大量数据、高并发下读写性能不足。 - 对数据做读写,或修改数据结构时需要加锁,影响并发操作。 - 无法适应非结构化存储。 - 扩展困难。 - 昂贵、复杂。 | - join等复杂操作能力较弱。 - 事务支持较弱。 - 通用性差。 - 无完整约束复杂业务场景支持较差 |
21、streaming数据的一些特点
1.数据快速持续到达,潜在大小也许是无穷无尽的
2.数据来源众多,格式复杂
3.数据量大,但是不十分关注存储,一旦经过处理,要么被丢弃,要么被归档存储
4.注重数据的整体价值,不过分关注个别数据
5.数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序
22、Spark是怎么处理streaming数据的
Spark Streaming的基本原理是将实时输入数据流以时间片(秒级)为单位进行拆分,然后经Spark引擎以类似批处理的方式处理每个时间片数据
图 Spark Streaming执行流程
23、机器学习流水线有哪些构件
1.DataFrame:使用Spark SQL中的DataFrame作为数据集,它可以容纳各种数据类型。较之RDD,DataFrame包含了schema 信息,更类似传统数据库中的二维表格。
它被ML Pipeline用来存储源数据。例如,DataFrame中的列可以是存储的文 本、特征向量、真实标签和预测的标签等
2.Transformer:翻译成转换器,是一种可以将一个DataFrame转换为另一个 DataFrame的算法。比如一个模型就是一个 Transformer。它可以把一个不包 含预测标签的测试数据集 DataFrame 打上标签,转化成另一个包含预测标 签的 DataFrame。
技术上,Transformer实现了一个方法transform(),它通过附加一个或多个列 将一个DataFrame转换为另一个DataFrame
3.Estimator:翻译成估计器或评估器,它是学习算法或在训练数据上的训练方法的 概念抽象。在 Pipeline 里通常是被用来操作 DataFrame 数据并生成一个 Transformer。从技术上讲,Estimator实现了一个方法fit(),它接受一个 DataFrame并产生一个转换器。比如,一个随机森林算法就是一个 Estimator, 它可以调用fit(),通过训练特征数据而得到一个随机森林模型。
4.Parameter:Parameter 被用来设置 Transformer 或者 Estimator 的参数。现在, 所有转换器和估计器可共享用于指定参数的公共API。ParamMap是一组(参 数,值)对
5.PipeLine:翻译为流水线或者管道。流水线将多个工作流阶段(转换器和估计器)连接在一起,形成机器学习的工作流,并获得结果输出