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
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語言
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對應的某塊數據;
第二,數據丟失時,對於窄依賴只須要從新計算丟失的那一塊數據來恢復;
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)
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 Server
Master
Zookeeper
HDFS
API
Parquet 是面向分析型業務的列式存儲格式,由 Twitter 和 Cloudera 合做開發, 2015 年 5 月從 Apache 的孵化器裏畢業成爲 Apache 頂級項目,最新的版本是 1.8.0 。
列式存儲和行式存儲相比的優點 :
能夠跳過不符合條件的數據,只讀取須要的數據,下降 IO 數據量。
壓縮編碼能夠下降磁盤存儲空間。因爲同一列的數據類型是同樣的,可使用更高效的壓縮編碼(例如 Run Length Encoding 和 DeltaEncoding )進一步節約存儲空間。
只讀取須要的列,支持向量運算,可以獲取更好的掃描性能。
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.