spark基础知识

1.Spark是什么?

UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架。

dfsSpark基于mapreduce算法实现的分布式计算,拥有HadoopMapReduce所具备的优势;但不一样于MapReduce的是Job中间输出和结果能够保存在内存中,从而再也不须要读写HDFS,所以Spark能更好地适用于数据挖掘与机器学习等须要迭代的map reduce的算法。



2.Spark与Hadoop的对比(Spark的优点)

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

二、Spark比Hadoop更通用

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

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

五、可用性– Spark经过提供丰富的Scala, Java,Python API及交互式Shell来提升可用性



3.Spark有那些组件

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

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

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

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

五、SparkR是一个R语言包,它提供了轻量级的方式使得能够在R语言中使用 Spark



二. DataFrame相关知识点



1.DataFrame是什么?

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



2.DataFrame与RDD的主要区别在于?

DataFrame带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得SparkSQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及做用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提高运行时效率的目标。

反观RDD,因为无从得知所存数据元素的具体内部结构,Spark Core只能在stage层面进行简单、通用的流水线优化。



3.DataFrame 特性

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

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

三、经过Catalyst优化器进行先进的优化生成代码

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

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



三 .RDD相关知识点



1.RDD,全称为?

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



2.RDD的特色?

它是在集群节点上的不可变的、已分区的集合对象。
经过并行转换的方式来建立如(map, filter, join, etc)。
失败自动重建。
能够控制存储级别(内存、磁盘等)来进行重用。
必须是可序列化的。
是静态类型的。


3.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。



4.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执行引擎的高效表现。



5.RDD提供了两种类型的操做:

transformation和action

1,transformation是获得一个新的RDD,方式不少,好比从数据源生成一个新的RDD,从RDD生成一个新的RDD

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

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



6.RDD中关于转换(transformation)与动做(action)的区别

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



7.RDD 与 DSM的最大不一样是?

DSM(distributed shared memory)

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



8.RDD的优点?

一、高效的容错机制

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

三、批量操做

四、优雅降级 (degrade gracefully)



9.如何获取RDD?

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

二、经过已存在的RDD转换

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

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



10.RDD都须要包含如下四个部分

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

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

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

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



11.RDD中将依赖的两种类型

窄依赖(narrowdependencies)和宽依赖(widedependencies)。

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

依赖关系分类的特性:

第一,窄依赖能够在某个计算节点上直接经过计算父RDD的某块数据计算获得子RDD对应的某块数据;

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



Spark Streaming相关知识点



1.Spark Streaming的基本原理

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



RDD 基本操做

常见的聚合操做:

count(*) 全部值不全为NULL时,加1操做
count(1) 无论有没有值,只要有这条记录,值就加1
count(col) col列里面的值为null,值不会加1,这个列里面的值不为NULL,才加1


sum求和

sum(可转成数字的值) 返回bigint
avg求平均值
avg(可转成数字的值)返回double
distinct不一样值个数
count(distinct col)


按照某些字段排序

select col1,other... from table where conditio order by col1,col2 [asc|desc]



Join表链接

join等值链接(内链接),只有某个值在m和n中同时存在时。

left outer join 左外链接,左边表中的值不管是否在b中存在时,都输出;右边表中的值,只有在左边表中存在时才输出。

right outer join 和 left outer join 相反。



Transformation具体内容:

reduceByKey(func, [numTasks]) : 在一个(K,V)对的数据集上使用,返回一个(K,V)对的数据集,key相同的值,都被使用指定的reduce函数聚合到一块儿。和groupbykey相似,任务的个数是能够经过第二个可选参数来配置的。

join(otherDataset, [numTasks]) :在类型为(K,V)和(K,W)类型的数据集上调用,返回一个(K,(V,W))对,每一个key中的全部元素都在一块儿的数据集

groupWith(otherDataset, [numTasks]) : 在类型为(K,V)和(K,W)类型的数据集上调用,返回一个数据集,组成元素为(K, Seq[V], Seq[W]) Tuples。这个操做在其它框架,称为CoGroup

cartesian(otherDataset) : 笛卡尔积。但在数据集T和U上调用时,返回一个(T,U)对的数据集,全部元素交互进行笛卡尔积。

flatMap(func) :相似于map,可是每个输入元素,会被映射为0到多个输出元素(所以,func函数的返回值是一个Seq,而不是单一元素)



Case 1将一个list乘方后输出

val input = sc.parallelize(List(1,2,3,4))

val result = input.map(x => x*x)

println(result.collect().mkString(","))



Case 2 wordcount

val textFile = sc.textFile(args(1))

val result = textFile.flatMap(line => line.split("\\s+")).map(word => (word, 1)).reduceByKey(_ + _)

println(result.collect().mkString(","))

result.saveAsTextFile(args(2))



Case 3 打印rdd的元素

rdd.foreach(println) 或者 rdd.map(println).

rdd.collect().foreach(println)

rdd.take(100).foreach(println)java

 

spark SQL算法

Spark Streaming优劣

优点:

一、统一的开发接口

二、吞吐和容错

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

四、利用Spark内存pipeline计算

劣势:

微批处理模式,准实时sql

Storm结构:数据库

DStream

1.将流式计算分解成一系列肯定而且较小的批处理做业

2.将失败或者执行较慢的任务在其它节点上并行执行,执行的最小单元为RDD的partition

3.较强的容错能力



spark stream example code编程

四. 日志系统



1.Flume

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

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、自定义。

Apache Kafka是分布式发布-订阅消息系统。

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

Apache Kafka与传统消息系统相比,有如下不一样:

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

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

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

四、它将消息持久化到磁盘,所以可用于批量消费



五. 分布式搜索



搜索引擎是什么?

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



Lucene是什么?

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



Elasticsearch是什么?

Elasticsearch一个高可扩展的开源的全文本搜索和分析工具。

它容许你以近实时的方式快速存储、搜索、分析大容量的数据。Elasticsearch是一个基于ApacheLucene(TM)的开源搜索引擎。不管在开源仍是专有领域,Lucene能够被认为是迄今为止最早进、性能最好的、功能最全的搜索引擎库。



ElasticSearch 有4中方式来构建数据库

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

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

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



ELK是一套经常使用的开源日志监控和分析系统

包括一个分布式索引与搜索服务Elasticsearch,一个管理日志和事件的工具logstash,和一个数据可视化服务Kibana,logstash 负责日志的收集,处理和储存,elasticsearch 负责日志检索和分析,Kibana 负责日志的可视化。



六. 分布式数据库



1.Hive是什么?

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



2.Hive的设计目标?

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

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

三、Hive在HDFS上构建数据仓库来存储结构化的数据,这些数据通常来源与HDFS上的原始数据,使用Hive能够对这些数据执行查询、分析等操做。



3.Hive的数据模型

Hive数据库
内部表
外部表
分区

Hive的视图
Hive在建立内部表时,会将数据移动到数据仓库指向的路径,若建立外部表,仅记录数据所在的路径,不对数据位置作任何改变,在删除表的时候,内部表的元数据和数据会被一块儿删除,外部表只会删除元数据,不删除数据。这样来讲,外部表要比内部表安全,数据组织液更加灵活,方便共享源数据。



4.Hive的调用方式

一、Hive Shell

二、Thrift

三、JDBC

四、ODBC



5.Hive的运行机制

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

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

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

四、将逻辑计划转换成物理计划(M\Rjobs)



6.Hive的优点

一、并行计算

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

三、处理大规模数据集

四、使用SQL,学习成本低



7.Hive应用场景

一、海量数据处理

二、数据挖掘

三、数据分析

四、SQL是商务智能工具的通用语言,Hive有条件和这些BI产品进行集成



8.Hive不适用场景

一、复杂的科学计算

二、不能作到交互式的实时查询



9.Hive和数据库(RDBMS)的区别

一、数据存储位置。Hive是创建在Hadoop之上的,全部的Hive的数据都是存储在HDFS中的。而数据库则能够将数据保存在块设备或本地文件系统中。

二、数据格式。Hive中没有定义专门的数据格式,由用户指定,须要指定三个属性:列分隔符,行分隔符,以及读取文件数据的方法。数据库中,存储引擎定义了本身的数据格式。全部数据都会按照必定的组织存储。

三、数据更新。Hive的内容是读多写少的,所以,不支持对数据的改写和删除,数据都在加载的时候中肯定好的。数据库中的数据一般是须要常常进行修改。

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

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

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

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

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



hive代码简单例子:

建立一个名为”test“的table

create table students (name string,age int,city string,class string) row format delimited fields terminated by ',';

load data local inpath "/opt/students.txt" into table students;

create EXTERNAL table IF NOT EXISTS studentX (name string,age int,city string,class string) partitioned by (grade string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

alter table studentX add partition (grade='excellent') location '/testM/excellent/';

alter table studentX add partition (grade='good') location '/testM/good/';

alter table studentX add partition (grade='moderate') location '/testM/moderate/';

#加载数据

load data inpath "/testtry/studentsm.txt" into table studentX partition (grade='excellent');

load data inpath "/testtry/students.txt" into table studentX partition (grade='good');

show partitions studentX;

select * from studentX where grade='excellent';

表删除操做:drop table students;

建立一个名为”test“的table

create table students (name string,age int,city string,class string) row format delimited fields terminated by ',';

load data local inpath "/bin/students.txt" into table students;

###

练习:建立外部表,指定数据存放位置

create EXTERNAL table IF NOT EXISTS studentX (name string,age int,city string,class string) partitioned by (class string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

alter table test add partition (class='one') location '/testmore/one';

对表进行查询

Select * from students;

分区表操做

hive>create table students (name string,age int,city string,class string) partitioned by (class string) row format delimited fields terminated by ',';

hive>load data local inpath "students.txt" into table students partition (class='one');

hive>show partitions students;

hive>select * from students where grade='two';

查询操做

group by、 order by、 join 、 distribute by、 sort by、 clusrer by、 union all



hive常见操做安全

Hbase 的模块:

原子性(是指不会被线程调度机制打断的操做,这种操做一旦开始,就一直运行到结束,中间不会有任何contextswitch(切换到领一个线程)),一致性,隔离性,持久性数据结构

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



Region Server架构

Master框架

Zookeepercurl

HDFS

 

列式存储格式 Parquet

Parquet 是面向分析型业务的列式存储格式,由 Twitter 和 Cloudera 合做开发, 2015 年 5 月从 Apache 的孵化器里毕业成为 Apache 顶级项目,最新的版本是 1.8.0 。

列式存储和行式存储相比的优点 :

能够跳过不符合条件的数据,只读取须要的数据,下降 IO 数据量。
压缩编码能够下降磁盘存储空间。因为同一列的数据类型是同样的,可使用更高效的压缩编码(例如 Run Length Encoding 和 DeltaEncoding )进一步节约存储空间。
只读取须要的列,支持向量运算,可以获取更好的扫描性能。

 

Hive操做

Hive

其余知识点

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

数据分析常见模式:

一、Iterative Algorithms,

二、Relational Queries,

三、MapReduce,

四、Stream Processing

Scala的好处:

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

二、Scala的兼容性—-可以与Java库无缝的交互

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

四、Scala的高级抽象

五、Scala是静态类型—-类型推断

六、Scala是可扩展的语言

ElasticSearch 基础代码:

基础问答题Q:你理解的Hive和传统数据库有什么不一样?各有什么试用场景。A:一、数据存储位置。Hive是创建在Hadoop之上的,全部的Hive的数据都是存储在HDFS中的。而数据库则能够将数据保存在块设备或本地文件系统中。二、数据格式。Hive中没有定义专门的数据格式,由用户指定,须要指定三个属性:列分隔符,行分隔符,以及读取文件数据的方法。数据库中,存储引擎定义了本身的数据格式。全部数据都会按照必定的组织存储。三、数据更新。Hive的内容是读多写少的,所以,不支持对数据的改写和删除,数据都在加载的时候中肯定好的。数据库中的数据一般是须要常常进行修改。四、执行延迟。Hive在查询数据的时候,须要扫描整个表(或分区),所以延迟较高,只有在处理大数据是才有优点。数据库在处理小数据是执行延迟较低。五、索引。Hive没有,数据库有六、执行。Hive是MapReduce,数据库是Executor七、可扩展性。Hive高,数据库低八、数据规模。Hive大,数据库小Q:Hive的实用场景A:一、Data Ingestion (数据摄取)二、Data Discovery(数据发现)三、Data analytics(数据分析)四、Data Visualization & Collaboration(数据可视化和协同开发)Q:大数据分析与挖掘方法论被称为CRISP-DM方法是以数据为中心迭代循环进行的六步活动A:它们分别是:商业理解、数据理解、数据准备、创建模型_、模型评估、结果部署_。Q:数据分析挖掘方法大体包含 ( ):A:1.分类 Classification2.估计Estimation3.预测Prediction4. 关联规则Association Rules5. 聚类Cluster6. 描述与可视化Description and VisualizationQ:在数据分析与挖掘中对数据的访问性要求包括交互性访问、批处理访问_、迭代计算、数据查询,HADOOP仅仅支持了其中批处理访问,而Spark则支持全部4种方式。Q:Spark做为计算框架的优点是什么?A:一、Spark的中间数据放到内存中,对于迭代运算效率更高二、Spark比Hadoop更通用三、Spark提供了统一的编程接口四、容错性– 在分布式数据集计算时经过checkpoint来实现容错五、可用性– Spark经过提供丰富的Scala, Java,Python API及交互式Shell来提升可用性

相关文章
相关标签/搜索