如何在本地使用scala或python運行Spark程序


如何在本地使用scala或python運行Spark程序
 
包含兩個部分:
  1. 本地scala語言編寫程序,並編譯打包成jar,在本地運行。
  2. 本地使用python語言編寫程序,直接調用spark的接口,並在本地運行。
 
 
一,scala在本地能成功調用並運行spark接口的主要原理:
  1. spark發布版會將spark所有能力,和依賴包一起打包成spark-assembly.jar,並能夠在單機模式下運行spark的local模式。
  2. spark發布版提供spark-submit等工具來提交jar和啟動local模式
  3. scala程序可以很方便地使用sbt工具編譯打包成jar
 
 
二、scala的編譯與打包運行
  1. 下載intelij idea , 安裝scala, 以及scala語言plugin 和 sbt plugin
  2. 下載spark 發布包,注意要含Hadoop(可選) 、spark-assembly.jar 、py4j(可選) 、 pyspark(可選) 。(spark-1.5.2-bin-hadoop2.3.tgz)
  3. 創建scala項目,F4項目設置dependency: scala和spark-assembly.jar的依賴。如果要支持sql hive 還需提供
    1. datanucleus-api-jdo-3.2.6.jar         
    2.  datanucleus-core-3.2.10.jar           
    3.  datanucleus-rdbms-3.2.9.jar           
    4.  spark-1.5.2-yarn-shuffle.jar         
    5.  spark-assembly-1.5.2-hadoop2.3.0.jar 
    6.  spark-examples-1.5.2-hadoop2.3.0.jar 
  4. 創建build artificial id, 只需要manifest(main classs) 和 compile output即可。
  5. 編譯打包后,生成的jar包,使用以下命令提交:  spark-submit --class weather --conf spark.dynamicAllocation.enabled=true  --conf spark.shuffle.service.enabled=true  /home/mobile/rf_test.jar
  6. 主程序的依賴包 運行法(--driver-library-path 與--jars 指令合用): spark-submit --class EntropyWeights  --jars scopt_2.10-3.5.0.jar --driver-library-path  scopt_2.10-3.5.0.jar  --conf spark.dynamicAllocation.enabled=true  --conf spark.shuffle.service.enabled=true  /home/mart_mobile/fdy/EntropyWeights.jar
    1. 上述案例是冗余的寫法: --jars可以指定driver和executor都需要的依賴,--driver-library-path 為driver程序中依賴的命令行參數解析 jar包,但是excutor中並不需要。
    2. executor需要則:  --spark.executor.extraClassPath to augment the executor classpath
    3. 參考: http://stackoverflow.com/questions/37132559/add-jars-to-a-spark-job-spark-submit
    4. spark-submit --class EntropyWeights  --jars scopt_2.10-3.5.0.jar --driver-library-path  scopt_2.10-3.5.0.jar  --conf spark.dynamicAllocation.enabled=true  --conf spark.shuffle.service.enabled=true  /home/mart_mobile/fdy/EntropyWeights.jar -t app.app_celebrity_properties_4rank_da -d author_id1,author_pin --colweights commission=1.0,pv=1.0,uv=1.0,upvote_num=1.0,comment_num=1.0,share_num=1.0,enter_detail_pv=1.0,enter_detail_uv=1.0,ordnum_inby_5thevent=1.0,ordsum_inby_5thevent=1.0,ordnum_in_direct=1.0,ordsum_in_direct=1.0,ordnum_in_indirect=1.0,ordsum_in_indirect=1.0,detail_ratio=1.0,import_ratio=1.0,fans_num=1.0,rank=1.0,open_rate=1.0,  -o app.app_celebrity_rank_da
    5. 新的集群出現 org.apache.commons.math jar 包(多 jar 包依賴的制定方法, 分隔符):   spark-submit --class EntropyWeights  --jars ./scopt_2.10-3.5.0.jar,./commons-math-2.1.jar --driver-library-path  ./scopt_2.10-3.5.0.jar:./commons-math-2.1.jar  --conf spark.dynamicAllocation.enabled=true  --conf spark.shuffle.service.enabled=true  ./EntropyWeights.jar -i app.app_celebrity_properties_4rank_da -d author_id1,author_pin --colweights commission=1.0,pv=1.0,uv=1.0,upvote_num=1.0,comment_num=1.0,share_num=1.0,enter_detail_pv=1.0,enter_detail_uv=1.0,ordnum_inby_5thevent=1.0,ordsum_inby_5thevent=1.0,ordnum_in_direct=1.0,ordsum_in_direct=1.0,ordnum_in_indirect=1.0,ordsum_in_indirect=1.0,detail_ratio=1.0,import_ratio=1.0,fans_num=1.0,rank=1.0,open_rate=1.0,  -o app.app_celebrity_rank_da -s 5.0 -t norm  
  7.  
 
 
三、python在本地能成功調用並運行spark接口的主要原理如下,
首先,依賴以下幾個環境:
  1. 編譯好的spark發布包,包含Hadoop和spark-assembly.jar 
  2. spark項目提供的py4j程序,讓python可以訪問運行在jvm上的spark。
  3. spark項目提供的pyspark接口,在本地調起spark-assembly.jar,並在py4j的幫助下,方便python語言通過py4j來調用運行在jvm上的spark提供的接口。
 
 
四、本地python調spark的配置和啟動方法
  1. 下載spark發布包,注意要含Hadoop、spark-assembly.jar 、py4j 、 pyspark。(spark-1.5.2-bin-hadoop2.3.tgz)
  2. 將該包下python目錄下的py4j與pyspark放入到本機python安裝第三方庫的site-packages目錄下
  3. 環境變量的修改:
    1. SPARK_HOME環境變量: os.environ["SPARK_HOME"]='D:\software_bak\spark\spark-1.5.2-bin-hadoop2.3'
    2. Hadoop_home環境變量: os.environ["HADOOP_HOME"]='E:\\hadoop-2.4.1'
  4. 執行。
    1. 可以使用spark的example目錄下的wordcount.py與數據people.txt。
    2. 修改該文件的源代碼,加入3中所述的兩個環境變量。
    3. 運行: python wordcount.py people.txt 即可。
    4. 或者使用 spark-submit 提交 Python 編寫的 spark 任務:
      1. 比如 提交的任務中有依賴的 Python 基礎庫文件:  spark-submit --py-files spark_etl_tools.py  --num-executors 4 --executor-cores 8 --executor-memory 4G --driver-memory 10G --conf spark.driver.maxResultSize=6G   migration_03_welcome_calls.py
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM