-
1.Spark是什麼?
UCBerkeley AMPlab所開源的類HadoopMapReduce的通用的并行計算架構。
dfsSpark基于mapreduce算法實作的分布式計算,擁有HadoopMapReduce所具有的優點;但不同于MapReduce的是Job中間輸出和結果可以儲存在記憶體中,進而不再需要讀寫HDFS,是以Spark能更好地适用于資料挖掘與機器學習等需要疊代的map reduce的算法。
2.Spark與Hadoop的對比(Spark的優勢)
1、Spark的中間資料放到記憶體中,對于疊代運算效率更高
2、Spark比Hadoop更通用
3、Spark提供了統一的程式設計接口
4、容錯性– 在分布式資料集計算時通過checkpoint來實作容錯
5、可用性– Spark通過提供豐富的Scala, Java,Python API及互動式Shell來提高可用性
3.Spark有那些元件
1、Spark Streaming:支援高吞吐量、支援容錯的實時流資料處理
2、Spark SQL, Data frames: 結構化資料查詢
3、MLLib:Spark 生态系統裡用來解決大資料機器學習問題的子產品
4、GraphX是建構于Spark上的圖計算模型
5、SparkR是一個R語言包,它提供了輕量級的方式使得可以在R語言中使用 Spark
二. DataFrame相關知識點
1.DataFrame是什麼?
DataFrame是一種以RDD為基礎的分布式資料集,類似于傳統資料庫中的二維表格。
2.DataFrame與RDD的主要差別在于?
DataFrame帶有schema元資訊,即DataFrame所表示的二維表資料集的每一列都帶有名稱和類型。這使得SparkSQL得以洞察更多的結構資訊,進而對藏于DataFrame背後的資料源以及作用于DataFrame之上的變換進行了針對性的優化,最終達到大幅提升運作時效率的目标。
反觀RDD,由于無從得知所存資料元素的具體内部結構,Spark Core隻能在stage層面進行簡單、通用的流水線優化。
3.DataFrame 特性
1、支援從KB到PB級的資料量
2、支援多種資料格式和多種存儲系統
3、通過Catalyst優化器進行先進的優化生成代碼
4、通過Spark無縫內建主流大資料工具與基礎設施
5、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的優勢?
1、高效的容錯機制
2、結點落後問題的緩和 (mitigate straggler)
3、批量操作
4、優雅降級 (degrade gracefully)
9.如何擷取RDD?
1、從共享的檔案系統擷取,(如:HDFS)
2、通過已存在的RDD轉換
3、将已存在scala集合(隻要是Seq對象)并行化 ,通過調用SparkContext的parallelize方法實作
4、改變現有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(_ + _)
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基礎知識 Spark Streaming優劣
優勢:
1、統一的開發接口
2、吞吐和容錯
3、多種開發範式混用,Streaming + SQL, Streaming +MLlib
4、利用Spark記憶體pipeline計算
劣勢:
微批處理模式,準實時
spark基礎知識 Storm結構:spark基礎知識 spark基礎知識 DStream
1.将流式計算分解成一系列确定并且較小的批處理作業
2.将失敗或者執行較慢的任務在其它節點上并行執行,執行的最小單元為RDD的partition
3.較強的容錯能力
spark stream example code
spark基礎知識 四. 日志系統
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與傳統消息系統相比,有以下不同:
1、它被設計為一個分布式系統,易于向外擴充;
2、它同時為釋出和訂閱提供高吞吐量;
3、它支援多訂閱者,當失敗時能自動平衡消費者;
4、它将消息持久化到磁盤,是以可用于批量消費
五. 分布式搜尋
搜尋引擎是什麼?
搜尋引擎是指根據一定的政策、運用特定的計算機程式從網際網路上搜集資訊,在對資訊進行組織和處理後,為使用者提供檢索服務,将使用者檢索相關的資訊展示給使用者的系統。搜尋引擎包括全文索引、目錄索引、元搜尋引擎、垂直搜尋引擎、集合式搜尋引擎、門戶搜尋引擎與免費連結清單等。
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的設計目标?
1、Hive的設計目标是使Hadoop上的資料操作與傳統SQL相結合,讓熟悉SQL程式設計開發人員能夠輕松向Hadoop平台遷移
2、Hive提供類似SQL的查詢語言HQL,HQL在底層被轉換為相應的MapReduce操作
3、Hive在HDFS上建構資料倉庫來存儲結構化的資料,這些資料一般來源與HDFS上的原始資料,使用Hive可以對這些資料執行查詢、分析等操作。
3.Hive的資料模型
Hive資料庫
内部表
外部表
分區
桶
Hive的視圖
Hive在建立内部表時,會将資料移動到資料倉庫指向的路徑,若建立外部表,僅記錄資料所在的路徑,不對資料位置做任何改變,在删除表的時候,内部表的中繼資料和資料會被一起删除,外部表隻會删除中繼資料,不删除資料。這樣來說,外部表要比内部表安全,資料組織液更加靈活,友善共享源資料。
4.Hive的調用方式
1、Hive Shell
2、Thrift
3、JDBC
4、ODBC
5.Hive的運作機制
1、将sql轉換成抽象文法樹
2、将抽象文法樹轉化成查詢塊
3、将查詢塊轉換成邏輯查詢計劃(操作符樹)
4、将邏輯計劃轉換成實體計劃(M\Rjobs)
6.Hive的優勢
1、并行計算
2、充分利用叢集的CPU計算資源、存儲資源
3、處理大規模資料集
4、使用SQL,學習成本低
7.Hive應用場景
1、海量資料處理
2、資料挖掘
3、資料分析
4、SQL是商務智能工具的通用語言,Hive有條件和這些BI産品進行內建
8.Hive不适用場景
1、複雜的科學計算
2、不能做到互動式的實時查詢
9.Hive和資料庫(RDBMS)的差別
1、資料存儲位置。Hive是建立在Hadoop之上的,所有的Hive的資料都是存儲在HDFS中的。而資料庫則可以将資料儲存在塊裝置或本地檔案系統中。
2、資料格式。Hive中沒有定義專門的資料格式,由使用者指定,需要指定三個屬性:列分隔符,行分隔符,以及讀取檔案資料的方法。資料庫中,存儲引擎定義了自己的資料格式。所有資料都會按照一定的組織存儲。
3、資料更新。Hive的内容是讀多寫少的,是以,不支援對資料的改寫和删除,資料都在加載的時候中确定好的。資料庫中的資料通常是需要經常進行修改。
4、執行延遲。Hive在查詢資料的時候,需要掃描整個表(或分區),是以延遲較高,隻有在處理大資料是才有優勢。資料庫在處理小資料是執行延遲較低。
5、索引。Hive沒有,資料庫有
6、執行。Hive是MapReduce,資料庫是Executor
7、可擴充性。Hive高,資料庫低
8、資料規模。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;
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常見操作
spark基礎知識 Hbase 的子產品:
原子性(是指不會被線程排程機制打斷的操作,這種操作一旦開始,就一直運作到結束,中間不會有任何contextswitch(切換到領一個線程)),一緻性,隔離性,持久性
spark基礎知識 Region- Region用于存放表中的行資料
Region Server
Masterspark基礎知識 spark基礎知識 Zookeeper
HDFS
列式存儲格式 Parquet
Parquet 是面向分析型業務的列式存儲格式,由 Twitter 和 Cloudera 合作開發, 2015 年 5 月從 Apache 的孵化器裡畢業成為 Apache 頂級項目,最新的版本是 1.8.0 。
列式存儲和行式存儲相比的優勢 :
可以跳過不符合條件的資料,隻讀取需要的資料,降低 IO 資料量。
壓縮編碼可以降低磁盤存儲空間。由于同一列的資料類型是一樣的,可以使用更高效的壓縮編碼(例如 Run Length Encoding 和 DeltaEncoding )進一步節約存儲空間。
隻讀取需要的列,支援向量運算,能夠擷取更好的掃描性能。
Hive操作
Hive
spark基礎知識
歡迎關注微信公衆号:大資料從業者