Spark學習

Spark學習

一、Spark簡介

  • 1.Hadoop中Map-Reduce計算框架的替代品
  • 2.運行在HDFS上,可以與Yarn配合
  • 3.將中間結(jié)果保存在內(nèi)存而不是磁盤中
  • 4.提供了比Map、Reduce更多的高階函數(shù)
  • 5.提供了Scala、Python、Java的API以及Scala和Python的shell

二、Spark內(nèi)置庫

  • 1.Spark Streaming 流式數(shù)據(jù)
  • 2.SparkSQL JDBC API
  • 3.MLlib 機器學習
  • 4.GraphX 圖

三、RDD

  • 彈性分布式數(shù)據(jù)集
  • transform RDD集合 -> RDD集合 變換函數(shù)
  • action RDD集合 -> 單個值 行動操作

四、使用Spark的方式

  • 1.私人機器上安裝
    • (1) standalone
    • (2) with Mesos
    • (3) with Yarn
  • 2.使用cloudera等公司的虛擬機鏡像
  • 3.DataBricks
  • 4.使用官網(wǎng)提供的腳本在AWS的EC2上構(gòu)建Spark環(huán)境
  • *.這里可以下載python2.7,包含大多數(shù)常用的科學計算和數(shù)據(jù)分析庫,330M

五、配置Spark環(huán)境

軟件 版本
操作系統(tǒng) Mint-16-64bit
Hadoop 2.6.0
Spark 1.4.0
Scala 2.11.6
模式 Spark on Yarn [Cluster]
  • 1.下載Spark,并解壓到目錄下
$ tar -xzvf spark-1.4.0.tar.gz
$ sudo chmod 777 -R spark-1.4.0/
$ sudo mv spark-1.4.0/ /usr/
  • 2.添加環(huán)境變量
$ sudo vi /etc/profile

#添加以下三行
export HADOOP_CONF_DIR=$HADOP_HOME/etc/hadoop
export SPARK_HOME=/usr/spark-1.4.0/
export PATH="$PATH:$SPARK_HOME"
  • 3.修改配置文件
$ cd /usr/spark-1.4.0/conf

$ sudo vi slaves
#添加worker節(jié)點
node

$ sudo cp log4j.properties.template log4j.properties

$ sudo cp spark-defaults.conf.template spark-defaults.conf
$ sudo vi spark-defaults.conf
#添加以下幾行
[
spark.yarn.am.waitTime 10
spark.yarn.submit.file.replication 0
spark.yarn.preserve.staging.files false
spark.yarn.scheduler.heartbeat.interval-ms 5000 spark.yarn.max.executor.failures 6
spark.yarn.historyServer.address node:10020
spark.yarn.executor.memoryOverhead 512
spark.yarn.driver.memoryOverhead 512
]


$ sudo cp spark-env.sh.template spark-env.sh
$ sudo vi spark-env.sh
#添加以下幾行
[
export SCALA_HOME=/usr/scala-2.11.6
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

#standalone
SPARK_MASTER_IP=node
SPARK_WORKER_MEMORY=512M

#yarn
export HADOOP_HOME=/usr/hadoop-2.6.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_EXECUTOR_INSTANCES=1
SPARK_EXECUTOR_CORES=1
SPARK_EXECUTOR_MEMORY=256M
SPARK_DRIVER_MEMORY=256M
SPARK_YARN_APP_NAME="Spark 1.4.0"
]
  • 4.啟動Spark

確認Hadoop已經(jīng)在運行

$ cd /usr/spark-1.4.0/sbin
$ ./start-all.sh

運行后執(zhí)行jps命令,應該出現(xiàn)master和worker兩個進程


jps
  • 5.測試

(1) 運行示例程序

$ cd /usr/spark-1.4.0/bin
$ run-example SparkPi

(2) 以Yarn-Client模型運行示例程序

$ cd /usr/spark-1.4.0/bin 

#yarn-cluster模式
spark-submit --class org.apache.spark.examples.JavaSparkPi --master yarn-cluster --driver-memory 256m  --executor-memory 256m --executor-cores 1 ../lib/spark-examples-1.4.0-hadoop2.6.0.jar 10

#standalone模式
spark-submit --class org.apache.spark.examples.SparkPi --master local --driver-memory 128m --executor-memory 128m --executor-cores 1 /usr/spark-1.4.0/lib/spark-examples-1.4.0-hadoop2.6.0.jar 10
運行結(jié)果
運行結(jié)果

(3) spark-shell測試HDFS和Scala

$ cd /usr/spark-1.4.0/bin
$ spark-shell

# Wordcount for spark
val file=sc.textFile("hdfs://node:8020/tmp/2.txt")
val count=file.flatMap(line=>line.split(" ")).map(word=>(word,1)).reduceByKey(_+_)
count.collect()
count.saveAsTextFile("hdfs://node:8020/output")

(4) 出現(xiàn)的問題

  • 1.spark-shell進程經(jīng)常死掉

錯誤信息:
./spark-shell: 行 54: 5564 已殺死 "$FWDIR"/bin/spark-submit --class org.apache.spark.repl.Main "$@"

六、配置和使用Spark開發(fā)環(huán)境

  • 1.下載Intellij IDEA14
  • 2.下載Scala[插件]for intellij(https://confluence.jetbrains.com/display/SCA/)
  • 3.開發(fā)環(huán)境下安裝Scala
  • 4.打開Intellij,新建Scala工程,對于依賴包比較簡單的工程,選擇Non-SBT類型;在工程中建立[Scala class]->[Object],添加Scala.jar和Spark-assembly-hadoop-*.jar包依賴
  • 5.確認開發(fā)環(huán)境所使用的JDK版本與Spark集群相兼容
  • 6.打開工程設置,新建[artifact]->[jar from dependencies],選擇artifact使用的類,這里可以不將依賴包包含在jar文件中,前提是在Spark集群中設置依賴包的Classpath
  • 7.build,并將jar包傳輸?shù)絊park集群中
  • 8.執(zhí)行
#輸入以下命令:standalone模式運行
spark-submit --class Your.Class --master local --driver-memory 128m  --executor-memory 128m --executor-cores 1 /path-to/Your.jar

七、Spark讀取二進制文件

使用SparkContext的binaryFiles方法讀取二進制文件:
源碼位于testSpark/loadBinary/loadBinary.java,輸入以下命令

#輸入以下命令
spark-submit --class main.Scala.loadBinary.loadBinary --master local --driver-memory 128m  --executor-memory 128m --executor-cores 1 /home/zhy/spark-app/testSpark.jar

八、Spark + Kafka + Stream

軟件 版本
Kafka 0.8.2.1-scala-2.11
Zookeeper 3.4.6
  • 1.配置Zookeeper
$ tar -zxvf zookeeper-3.4.6.tar.gz 
$ sudo mv zookeeper-3.4.6/ /usr/
$ cd /usr/zookeeper-3.4.6/conf
$ cp zoo_sample.cfg zoo.cfg
$ cd /usr/zookeeper-3.4.6/bin
$ ./zkServer.sh start
  • 2.配置Kafka
$ tar -zxvf kafka-0.8.2.1.tgz
$ sudo mv kafka-0.8.2.1/ /usr/
$ cd /usr/kafka-0.8.2.1
$ bin/kafka-server-start.sh config/server.properties &
運行Kafka后進程
  • 3.連接Spark與Kafka

編譯后執(zhí)行下面的們命令:

spark-submit  --master local --driver-memory 128m  --executor-memory 128m --executor-cores 1 --jars /home/zhy/spark-lib/zkclient-0.5.jar /home/zhy/spark-app/testSpark.jar

錯誤信息:

 ERROR ReceiverTracker: Deregistered receiver for stream 0: Error starting receiver 0 - java.lang.NoSuchMe                                          thodError: scala.Predef$.ArrowAssoc(Ljava/lang/Object;)Ljava/lang/Object;
        at kafka.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:107)
        at kafka.consumer.ZookeeperConsumerConnector.<init>(ZookeeperConsumerConnector.scala:143)
        at kafka.consumer.Consumer$.create(ConsumerConnector.scala:94)
        at org.apache.spark.streaming.kafka.KafkaReceiver.onStart(KafkaInputDStream.scala:100)
        at org.apache.spark.streaming.receiver.ReceiverSupervisor.startReceiver(ReceiverSupervisor.scala:125)
        at org.apache.spark.streaming.receiver.ReceiverSupervisor.start(ReceiverSupervisor.scala:109)
        at org.apache.spark.streaming.scheduler.ReceiverTracker$ReceiverLauncher$$anonfun$8.apply(ReceiverTracker.scala:308                                          )
        at org.apache.spark.streaming.scheduler.ReceiverTracker$ReceiverLauncher$$anonfun$8.apply(ReceiverTracker.scala:300                                          )
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1765)
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1765)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:63)
        at org.apache.spark.scheduler.Task.run(Task.scala:70)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:213)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)

錯誤信息分析:可能是由于開源組件版本的兼容性問題引起的

九、Spark + Streaming

十、啟動Hadoop與Spark集群

  • 1.打開虛擬機,并確定虛擬機和主機能夠Ping通,主要用來確認虛擬機OS獲得了有效的IP地址,其次也保證了主機能夠通過SSh登錄虛擬機
#1.在虛擬機中輸入下面一行命令,以獲取虛擬機IP地址
$ ifconfig

#2.在windows中打開Cmd命令行,輸入下面一行命令,其中yourIPAddress為ifconfig命令顯示的IP地址
$ ping yourIPAddress

#3.確認能夠ping通
  • 2.使用如下命令修改虛擬機hosts文件與當前IP地址對應
$ ifconfig
$ sudo vi /etc/hosts
#修改172.20.10.4 node這一行為下面引號內(nèi)的內(nèi)容(不含引號),其中yourIPAddress為ifconfig命令顯示的與主機能夠相互ping通的IP地址:
"yourIPAddress node"
  • 3.使用如下命令啟動Hadoop:
$ cd /usr/hadoop-2.*.*/sbin
$ ./start-all.sh
  • 4.使用如下命令啟動Spark:
$ cd /usr/spark-1.4.0/sbin
$ ./start-all.sh
  • 5.使用jps命令確認HadoopSpark啟動成功:

    jps

  • 6.使用Spark示例確認Spark集群能夠工作

#運行示例程序
$ cd /usr/spark-1.4.0/bin
$ run-example SparkPi

#通過spark-submit運行示例程序
$ cd /usr/spark-1.4.0/bin
$ spark-submit --class org.apache.spark.examples.SparkPi --master local --driver-memory 128m --executor-memory 128m --executor-cores 1 /usr/spark-1.4.0/lib/spark-examples-1.4.0-hadoop2.*.*.jar 10
  • 7.提交jar命令格式
$ cd /usr/spark-1.4.0/bin
# --class  指定運行的類 
# --master 指定運行方式
# --driver-memory 指定為該task分配的driver內(nèi)存
# --executor-memory 指定為該task分配的executor內(nèi)存
# --executor-cores 指定為該task分配的executor運行核數(shù)
# ***.jar 最后一個參數(shù)是jar包的位置,之后的參數(shù)都作為task的參數(shù)傳入
# arg0 arg1 可選 task的參數(shù)

$ spark-submit --class YourClass --master local --driver-memory 128m --executor-memory 128m --executor-cores 1 ***.jar arg0 arg1

十一、Client 遠程執(zhí)行Spark任務

對于Windows開發(fā)環(huán)境,遠程執(zhí)行Spark任務需要以下步驟:

  • 1.下載SSH客戶端

下載一個Windows的SSH客戶端,這里選擇的是MobaXterm,其便攜版下載地址如下:

[下載地址] -> http://mobaxterm.mobatek.net/MobaXterm_v7.7.zip

下載后解壓即可使用,界面是這樣的:

mobaxterm
mobaxterm
  • 2.連接Spark集群的Master節(jié)點

(1) 在MobaXterm軟件中點擊左邊的Session側(cè)邊欄,在"Saved Session"文字上點擊右鍵,在彈出菜單中點擊"New Session",進入如下界面:

mobaxterm2
mobaxterm2

(2) 點擊SSH,在Remote Host中填入節(jié)點的IP地址,勾選"specify usernam"并填入用戶名,點擊"OK"即可。

mobaxterm3
mobaxterm3

此時會自動嘗試SSH連接,輸入密碼即可連接成功。下圖左邊為MobaXterm自帶的可視化ftp工具,右邊為SSH命令行:

mobaxterm4
mobaxterm4
  • 3.上傳任務所需Jar包

進入ftp中希望上傳的文件夾,點擊下圖紅框中的按鈕即可選擇要上傳的文件并上傳:

mobaxterm5
mobaxterm5
  • 4.執(zhí)行Jar任務

在右邊命令行中以類似如下命令格式執(zhí)行Spark任務:

$ spark-submit --class YourClass --master local --driver-memory 128m --executor-memory 128m --executor-cores 1 ***.jar arg0 arg1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容