最全的Spark基礎知識解答

最全的Spark基礎知識解答

時間: 2016-12-12 12:00:50      閱讀:19      評論:0      收藏:0      [點我收藏] 
原文:http://www.cnblogs.com/sanyuanempire/p/6163732.html
 

一. Spark基礎知識

 

1.Spark是什麼?html

UCBerkeley AMPlab所開源的類HadoopMapReduce的通用的並行計算框架。java

dfsSpark基於mapreduce算法實現的分佈式計算,擁有HadoopMapReduce所具備的優勢;但不一樣於MapReduce的是Job中間輸出和結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的map reduce的算法。算法

 

2.Spark與Hadoop的對比(Spark的優點)sql

一、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 基本操做

常見的聚合操做:

  1. count(*) 全部值不全爲NULL時,加1操做

  2. count(1) 無論有沒有值,只要有這條記錄,值就加1

  3. count(col) col列裏面的值爲null,值不會加1,這個列裏面的值不爲NULL,才加1

 

sum求和

  1. sum(可轉成數字的值) 返回bigint

  2. avg求平均值

  3. avg(可轉成數字的值)返回double

  4. distinct不一樣值個數

  5. 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)

 

spark SQL

技術分享

Spark Streaming優劣

優點:

一、統一的開發接口

二、吞吐和容錯

三、多種開發範式混用,Streaming + SQL, Streaming +MLlib

四、利用Spark內存pipeline計算

劣勢:

微批處理模式,準實時

技術分享技術分享

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

技術分享

Zookeeper

技術分享

HDFS

技術分享

API

技術分享

 

列式存儲格式 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.分類 Classification

2.估計Estimation

3.預測Prediction

4. 關聯規則Association Rules

5. 聚類Cluster

6. 描述與可視化Description and Visualization

 

Q:在數據分析與挖掘中對數據的訪問性要求包括

交互性訪問、批處理訪問_、迭代計算、數據查詢,HADOOP僅僅支持了其中批處理訪問,而Spark則支持全部4種方式。

 

Q:Spark做爲計算框架的優點是什麼?

A:一、Spark的中間數據放到內存中,對於迭代運算效率更高

二、Spark比Hadoop更通用

三、Spark提供了統一的編程接口

四、容錯性– 在分佈式數據集計算時經過checkpoint來實現容錯

五、可用性– Spark經過提供豐富的Scala, Java,Python API及交互式Shell來提升可用性

End.

相關文章
相關標籤/搜索