Apache Spark 是專為大規模數據處理而設計的快速通用的計算引擎。它產生于 UC Berkeley AMP Lab,繼承了 MapReduce 的優點,但是不同于 MapReduce 的是,Spark 可以將結果保存在內存中,一直迭代計算下去,除非遇到 shuffle 。因此 Spark 能更好的適用于數據挖掘與機器學習等要迭代的算法。值得注意的是,官網說的 Spark 是 MR 計算速度的 100 倍。僅僅適用于邏輯回歸等這樣的迭代計算。
2 Spark 的運行模式
Local 模式:多用于本機編寫、測試代碼。 Standalone 模式:這是 Spark 自帶的資源調度框架,它支持完全分布式。 Yarn 模式:這是 hadoop 里面的一個資源調度框架,Spark 同樣也可以使用。 Mesos 模式:為應用程序(如Hadoop、Spark、Kafka、ElasticSearch)提供API的整個數據中心和云環境中的資源管理和調度。
下面分別介紹一下 Standalone 和 Yarn 模式下任務流程。
Standalone-client 提交方式
提交命令如下:以官方給的計算 PI 的代碼為例。
./spark-submit --master spark://node1:7077 --class org.apache.spark.example.SaprkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 1000
執行流程圖以及原理:
Standalone-cluster 提交方式
提交命令如下:以官方給的計算 PI 的代碼為例。
./spark-submit --master spark://node1:7077 --deploy-mode cluster --class org.apache.spark.example.SaprkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 1000
執行流程圖以及原理:
Yarn-cluster 提交方式
提交命令如下:以官方給的計算 PI 的代碼為例。
./spark-submit --master yarn --deploy-mode client --class org.apache.spark.example.SaprkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 1000
執行流程圖以及原理:
Yarn-cluster 提交方式
提交命令如下:以官方給的計算 PI 的代碼為例。
./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.example.SaprkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 1000
執行流程圖以及原理:
3 RDD
Spark core 最核心的就是 Resilient Distributed Dataset (RDD) 了,RDD 比較抽象了。源碼中 RDD.scala 中對 RDD 進行了一段描述。最主要的是下面的五個方面;
/** * Internally, each RDD is characterized by five main properties: * * - A list of partitions * - A function for computing each split * - A list of dependencies on other RDDs * - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned) * - Optionally, a list of preferred locations to compute each split on (e.g. block locations for * an HDFS file) * * All of the scheduling and execution in Spark is done based on these methods, allowing each RDD * to implement its own way of computing itself. Indeed, users can implement custom RDDs (e.g. for * reading data from a new storage system) by overriding these functions. */
RDD 的五大特性:
RDD 是由一系列的 Partition 組成的。 函數作用在每一個 split 上。 RDD 之間有一系列依賴關系。 分區器是作用在 K,V 格式的 RDD 上。 RDD 提供一系列最佳的位置
先記住這五個特性,之后的學習會慢慢體會到這樣設計的好處。下面是理解 RDD 的邏輯圖;
看這個圖再回頭理解一下上面的五個 RDD 的特性。