1.Spark的特點
Spark的設計遵循“一個軟件棧滿足不同應用場景”的理念,逐漸形成了一套完整的生態系統,既能夠提供內存計算框架,也可以支持SQL即席查詢、實時流式計算、機器學習和圖計算等。
運行速度快,易使用,強大的技術棧,集成性好
2.Spark與Hive
Hive的缺點
表達能力有限,磁盤IO開銷大,延遲高,
3.Spark-streaming與Flink
微批處理,準實時系統
4.Spark的運行架構
Driver向集群管理器申請資源,啟動Executor,并向Executor發送程序代碼和文件,在Executor上執行任務,執行結果返回任務控制節點或寫到HDFS和其他數據庫
5.hive on spark和spark on hive
前者只有計算引擎是Spark,前期解析,轉換,優化等步驟都是Hive完成。
后者只有元數據用了Hive,對SQL的解析,轉換,優化等都是Spark完成。
6.寬窄依賴之間的區別
窄依賴表現為一個父RDD的分區對應于一個子RDD的分區,或多個父RDD的分區對應于一個子RDD的分區
寬依賴則表現為存在一個父RDD的一個分區對應一個子RDD的多個分區
7.RDD運行過程
(1)創建RDD對象;
(2)SparkContext負責計算RDD之間的依賴關系,構建DAG;
(3)DAGScheduler負責把DAG圖分解成多個階段,每個階段中包含了多個任務,每個任務會被任務調度器分發給各個工作節點(Worker Node)上的Executor去執行。
8.Spark三種部署方式
包括standalone、Spark on Mesos和Spark on YARN
9.廣播變量和累加器
Spark中的兩個重要抽象是RDD和共享變量
廣播變量允許開發人員在每個機器上緩存一個只讀的變量,而不是為每個機器的每個任務都生成一個副本
val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar.value
10.轉換算子和行動算子
轉換:map,filter,groupByKey,reduceByKey
行動:collect,foreach,count,reduce
鍵值對:groupByKey,reduceByKey,sortByKey,keys,values,mapValues,join
11.自定義udf和udaf
udf 直接spark.udf.register(“”,函數)
udaf 需繼承UserDefinedAggregateFunction 實現父類的8個方法
12.RDD與DataFrame的區別
RDD是分布式的 Java對象的集合
DataFrame是一種以RDD為基礎的分布式數據集,也就是分布式的Row對象的集合(每個Row對象代表一行記錄)