Hadoop
-
MapReduce屬于Hadoop生态體系之一,Spark屬于BDAS生态體系之一。
目前Hadoop有兩種版本:Apache和CDH版本。
一、優缺點
- Apache版本
- CDH版本
Kafka和flume對比
- kafka和flume都是日志系統。kafka是分布式消息中間件,自帶存儲。flume分為agent(資料采集器),collector(資料簡單處理和寫入),storage(存儲器)三部分,每一部分都是可以定制的。
- kafka做日志緩存應該是更為合适的,但是flume的資料采集部分做的很好,可以定制很多資料源,減少開發量。是以比較流行flume+kafka模式,如果為了利用flume寫hdfs的能力,也可以采用kafka+flume的方式。
-
Flume:Flume 是管道流方式,提供了很多的預設實作,讓使用者通過參數部署,及擴充API。
Kafka:Kafka是一個可持久化的分布式的消息隊列。
-
典型用法:
線上資料->flume->kafka->hdfs->MR離線計算
Spark
Spark算子
- Value資料類型的Transformation算子。
- Key-Value資料類型的Transformation算子。
- Action算子。
Spark子產品
- Spark core // 核心子產品
- Spark SQL // SQL
- Spark Streaming // 流計算
- Spark NLlib // 機器學習
- Spark graph // 圖計算
Spark Streaming
Spark Streaming是核心Spark API的擴充。
- 資料可以從Kafka、Flume、TCP Socekts等許多資源中擷取。可以使用複雜的算法處理。最後,可以将處理過的資料推送到檔案系統。
- 離散流或DStream是有Spark Streaming提供的基本抽象。DStream由一組連續的RDDs表示。
-
DStream時間視窗。
時間視窗運作Spark Streaming消費過去一段時間(多個批次)内的資料。
Spark SQL和DataFrame
- Spark SQL是執行使用基本SQL文法或HiveQL編寫的SQL查詢。Spark SQL可以從現有的Hive安裝中讀取資料。
- DataFrame是一個分布式資料集,相當于關系資料庫中一張表。
DataFrame和RDD的差別
- RDD是分布式Java對象的集合。
- DataFrame是一種以RDD為基礎的分布式資料集,也就是分布式Row對象的集合(每個Row對象代表一行記錄)。
加載json資料轉為DataFrame算子:
scala> val df=sqlContext.read.json("路徑/name.json")
scala> df.show()
并行: 叢集計算并行計算
并行: 線程,并發執行