爲某企業作的培訓,完整文檔見:http://gudaoxuri.github.io/bd-lab/ html
此主題介紹Spark的安裝、配置及基礎使用。java
Spark介紹
http://www.ibm.com/developerworks/cn/opensource/os-spark/mysql
— ibm.comgit
Spark基本信息github
官網:http://spark.apache.org/ 官方教程:http://spark.apache.org/docs/latest/programming-guide.html
# 切換到工做空間 cd /opt/workspaces # 建立Spark數據目錄 mkdir data/spark # 建立Spark日誌目錄 mkdir logs/spark
官方教程sql http://spark.apache.org/docs/latest/spark-standalone.html |
wget http://mirrors.hust.edu.cn/apache/spark/spark-1.6.1/spark-1.6.1-bin-hadoop2.6.tgz tar -zxf spark-1.6.1-bin-hadoop2.6.tgz rm -rf spark-1.6.1-bin-hadoop2.6.tgz mv spark-1.6.1-bin-hadoop2.6 ./frameworks/spark
vi ./frameworks/spark/conf/spark-env.shshell
export SPARK_MASTER_IP=bd export SPARK_MASTER_PORT=7077 export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT} # 指定Spark數據目錄 export SPARK_LOCAL_DIRS=/opt/workspaces/data/spark/ # 指定Spark日誌目錄 export SPARK_LOG_DIR=/opt/workspaces/logs/spark/ # 指定JDK目錄 export JAVA_HOME=/opt/env/java # 指定Scala目錄 export SCALA_HOME=/opt/env/scala
./frameworks/spark/sbin/start-all.sh
# 執行圓周率計算示例 ./frameworks/spark/bin/run-example org.apache.spark.examples.SparkPi ./frameworks/spark/bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://bd:6066\ --deploy-mode cluster \ --driver-memory 512M \ --executor-memory 256M \ #若是運行出錯請改大些 ./frameworks/spark/lib/spark-examples-1.6.1-hadoop2.6.0.jar \ 1000
http://spark.apache.org/docs/latest/quick-start.html |
Word Countapache
./frameworks/spark/bin/spark-shell // 基礎版 val textFile = sc.textFile("./frameworks/spark/README.md") val words = textFile.flatMap(line => line.split(" ")) val exchangeVal = words.map(word => (word,1)) val count = exchangeVal.reduceByKey((a,b) => a + b) count.collect // 優化版 sc.textFile("./frameworks/spark/README.md").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect // 帶排序 sc.textFile("./frameworks/spark/README.md").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).map(_.swap).sortByKey(false).map(_.swap).collect // 最終版 val wordR="""\w+""".r sc.textFile("./frameworks/spark/README.md").flatMap(_.split(" ")).filter(wordR.pattern.matcher(_).matches).map((_,1)).reduceByKey(_ + _).map(_.swap).sortByKey(false).map(_.swap).saveAsTextFile("hdfs://bd:9000/wordcount")
能夠訪問 http://<host>:8080 查看做業 |
在哪配置:架構
Spark properties (Spark屬性)在應用程序中經過SparkConf
對象設置,或經過Java系統屬性設置。
Environment variables (環境變量)指定各節點的設置,如IP地址、端口,配置文件在conf/spark-env.sh中。
Logging (日誌)能夠經過log4j.properties配置日誌。app
Spark properties
在代碼中指定配置
val conf = new SparkConf() // 指定使用2個本地線程來運行,本地模式下,咱們可使用n個線程(n >= 1),但在像Spark Streaming這樣的場景下,咱們可能須要多個線程 .setMaster("local[2]") .setAppName("CountingSheep") val sc = new SparkContext(conf)
在腳本中指定配置
./bin/spark-submit --name "My app" --master local[4] --conf spark.eventLog.enabled=false --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar
Table 1. 經常使用配置
屬性名稱 | 默認值 | 說明 |
---|---|---|
spark.app.name |
Spark應用的名字 |
|
spark.driver.cores |
1 |
在cluster模式下運行driver進程的核數 |
spark.driver.memory |
1g |
driver進程能夠用的內存總量(如:1g,2g),client模式下無效果,必需要在命令行裏用 –driver-memory 或者在默認屬性配置文件裏設置 |
spark.executor.memory |
1g |
單個executor使用的內存總量(如,2g,8g) |
spark.master |
集羣管理器URL |
Environment variables
環境變量在${SPARK_HOME}/conf/spark-env.sh腳本中設置
Table 2. 經常使用配置
模式 | 屬性名稱 | 默認值 | 說明 |
---|---|---|---|
JAVA_HOME |
Java安裝目錄 |
||
SCALA_HOME |
Scala安裝目錄 |
||
SPARK_LOCAL_IP |
本地綁定的IP |
||
SPARK_LOG_DIR |
${SPARK_HOME}/logs |
日誌目錄 |
|
standalone |
SPARK_MASTER_IP |
(當前IP) |
Master IP |
standalone |
SPARK_MASTER_PORT |
7077(6066) |
Master 端口 |
standalone |
MASTER |
默認Master URL |
|
standalone |
SPARK_WORKER_CORES |
全部 |
每一個節點使用的CPU core上限 |
standalone |
SPARK_WORKER_MEMORY |
本節點全部內存減去1GB |
每一個節點使用的內存上限 |
standalone |
SPARK_WORKER_INSTANCES |
1 |
每一個節點啓動的worker實例個數 |
standalone |
SPARK_WORKER_PORT |
隨機 |
Worker綁定的端口 |
若是你的slave節點性能很是強勁,能夠把SPARK_WORKER_INSTANCES 設爲大於1;相應的,須要設置SPARK_WORKER_CORES參數限制每一個worker實例使用的CPU個數,不然每一個worker實例都會使用全部的CPU。 |
Logging
日誌在${SPARK_HOME}/conf/log4j.properties中設置
Hadoop集羣配置
使用HDFS時須要從Hadoop中複製hdfs-site.xml、 core-site.xml
到Spark的classpath中
http://spark.apache.org/docs/latest/configuration.html |
standalone目前只支持簡單的先進先出(FIFO)調度器。這個調度器能夠支持多用戶,你能夠控制每一個應用所使用的最大資源。默認狀況下,Spark應用會申請集羣中全部的CPU。
在代碼中限制資源
val conf = new SparkConf() .setMaster(...) .setAppName(...) .set("spark.cores.max", "10") val sc = new SparkContext(conf)
在配置文件 spark-env.sh
中限制資源
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=<value>"
http://spark.apache.org/docs/latest/tuning.html |
每一個節點:
* 4-8塊磁盤
* 8G以上內存
* 千兆網卡
* 8-16核CPU
至少3個節點
http://spark.apache.org/docs/latest/hardware-provisioning.html |
在spark-env.sh
中添加配置項
# Hive目錄 export HIVE_HOME=$HIVE_HOME
SPARK_CLASSPATH 有些教程中說要添加 |
複製Hive的幾個配置文件
cp ./frameworks/hive/conf/hive-site.xml ./frameworks/spark/conf cp ./frameworks/hive/conf/hive-log4j.properties ./frameworks/spark/conf
啓動thriftserver,用於對外提供JDBC服務
./frameworks/spark/sbin/start-thriftserver.sh
測試鏈接
./frameworks/spark/bin/beeline !connect jdbc:hive2://bd:10000 show tables;
.Spark 架構設計 |
http://spark-internals.books.yourtion.com/index.html + 此文寫得挺詳細,因爲撰寫時間較早,與新版本有出入(好比Shuffle Manager如今默認是Sort-based),但不影響對Spark的總體理解。