Spark 執行模式
bin/spark-shell
預設情況下,表示執行在local mode,在本地啟動一個JVM Process,在裡面執行一些執行緒進行資料處理,每個執行緒執行一個Task任務。
每個JVM Process中執行多少個執行緒Thread。可以通過 bin/spark-shell --master local 指定。
- bin/spark-shell --master local 在JVM中執行單個執行緒
- bin/spark-shell --master local[k] k:表示執行k個Thread
- bin/spark-shell --master local[*] *表示的是當前機器CPU CORE為多少個就執行多少個Thread。
Spark Appplication 與 MapReduce Application 有點不一樣
spark-shell 執行的是一個Spark Application 在本地模式下
在一個SparkApplication下會有多個Job
對於MapReduce程式執行來說,
一個Application就是一個Job
重要一點:無論是MR還是SPark對資料分析處理,都是分而治之的思想,處理每一份資料,每個資料都是一個Task進行處理。
MR: MapTask和ReduceTask -> JVM process
Spark: Task -> Thread
每個Task執行的時候,僅僅需要一個CPU CORE即可
Spark框架 最重要的一點,就是一個對資料分析處理的抽象
RDD: Resilient Distributed Datasets
資料結構:集合,類比於SCALA語言中集合類的List
將要處理的資料封裝放到一個集合RRD中,然後呼叫集合RDD中的函式(高階函式)進行處理分析。
-處理資料三步策略
第一步、讀取資料
將要處理的資料轉換為RDD(記憶體,將資料放在集合中)
第二步、分析資料
呼叫RDD中的高階函式,處理後的資料結構為RDD
RDD#func -> RDD
第三步、輸出資料
將處理資料的結果RDD輸出到外部儲存系統(HDFS或者資料庫中)
RDD#func -> 不是RDD
Spark Local Mode安裝
-1. 安裝軟體框架
JDK、SCALA、HDFS(偽分散式環境,啟動NameNode和DataNode)
-2. 配置SPARK環境指令碼
$ cd ${SPARK_HOME}/conf
$ mv spark-env.sh.template spark-env.sh
增加配置:
JAVA_HOME=/opt/modules/jdk1.7.0_67
SCALA_HOME=/opt/modules/scala-2.10.4
HADOOP_CONF_DIR=/opt/chd-5.3.6/hadoop-2.5.0-cdh5./etc/hadoop
-3.啟動那個spark-shell
在local mode 下
$ bin/spark-shell
從HDFS讀取資料命令
val rdd = sc.textFile("/datas/README.md")
/**
讀取HDFS上的資料 textFile(),其實底層呼叫的是MapReduce中的InputFormat方法
讀取資料一行一行的讀取資料,並且每一行作為
一個(key,value)形式,此處僅獲取value的值
*/