大數據實驗室(大數據基礎培訓)——Spark的安裝、配置及基礎使用

爲某企業作的培訓,完整文檔見:http://gudaoxuri.github.io/bd-lab/ html

7. Spark

此主題介紹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

 

7.1. 環境準備

# 切換到工做空間
cd /opt/workspaces
# 建立Spark數據目錄
mkdir data/spark
# 建立Spark日誌目錄
mkdir logs/spark

官方教程sql

http://spark.apache.org/docs/latest/spark-standalone.html

7.2. 安裝

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

7.3. 配置(僞分佈式)

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

7.4. 啓動與中止

./frameworks/spark/sbin/start-all.sh

7.5. 測試

# 執行圓周率計算示例
./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

7.6. Word Count

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 查看做業

7.7. 參數說明

  • 在哪配置:架構

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

7.8. 資源調度

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>"

7.9. 性能調優

http://spark.apache.org/docs/latest/tuning.html

7.10. 硬件配置

每一個節點:
* 4-8塊磁盤
* 8G以上內存
* 千兆網卡
* 8-16核CPU

至少3個節點

http://spark.apache.org/docs/latest/hardware-provisioning.html

7.11. 整合Hive

  • spark-env.sh中添加配置項

    # Hive目錄
    export HIVE_HOME=$HIVE_HOME

         

SPARK_CLASSPATH

有些教程中說要添加
export SPARK_CLASSPATH=$HIVE_HOME/lib/mysql-connector-java-x.jar:$SPARK_CLASSPATH
但目前版本不須要此配置,而且添加上去會致使zeppelin運行出錯:
org.apache.spark.SparkException: Found both spark.driver.extraClassPath and SPARK_CLASSPATH. Use only the former.

  • 複製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的總體理解。
相關文章
相關標籤/搜索