1. 程式人生 > >零基礎跑spark應用

零基礎跑spark應用

1、下載一個Intellij IDEA安裝包,安裝scala和sbt外掛。然後重啟。

    新建一個scala-sbt專案


方便起見,我們直接使用spark安裝包下的example中的例子來跑。

2、下載spark的安裝檔案,spark-2.0.0-bin-hadoop2.7.tgz.gz,解壓縮後的目錄為spark-2.0.0-bin-hadoop2.7

在新工程中建立一個lib資料夾。

copy   spark-2.0.0-bin-hadoop2.7\jars下的所有jar包到工程lib目錄下。

選中所有jar包,右鍵add as library。

這樣就添加了所有依賴,肯定存在多餘的jar包,但是這樣比較方便,不怕少jar包了就。

copy spark-2.0.0-bin-hadoop2.7\examples\src\main\scala\org\apache\spark\examples下的SparkPi.scala到新工程的scala目錄下面。

object SparkPi {
  def main(args: Array[String]) {
    val spark = SparkSession
      .builder.master("local[4]")
      .appName("Spark Pi")
      .getOrCreate()
    val slices = if (args.length > 0) args(0).toInt else 2
    val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow
    val count = spark.sparkContext.parallelize(1 until n, slices).map { i =>
      val x = random * 2 - 1
      val y = random * 2 - 1
      if (x*x + y*y < 1) 1 else 0
    }.reduce(_ + _)
    println("Pi is roughly " + 4.0 * count / (n - 1))
    spark.stop()
  }
}


在類上右鍵=》Run 'SparkPi'即可執行程式。

java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

遇到上述異常則需要到點選開啟連結下載zip資料夾,具體步驟參見(http://blog.csdn.net/lanwenbing/article/details/40783335)

 在環境變數中新增HADOOP_HOME=D:\hadoop\hadoop-common-2.2.0-bin-master,path中新增%HADOOP_HOME%\bin


至此程式已經可以在IDEA上正常運行了,那麼怎麼打包進行釋出呢?

3、在環境變數中新增SPARK_HOME=spark-2.0.0-bin-hadoop2.7所在目錄,path中新增%SPARK_HOME%\bin;

此步的作用是可以在cmd中直接使用spark-submit命令來提交spark應用程式。

4、spark-submit --master local[4] --class com.netease.lede.SparkPi D:\spark\ideafirstdemo.jar

藉助spark-submit進行spark應用的提交,本地模式執行,提供4個CPU,main函式所在的class為com.netease.lede.SparkPi ,jar包路徑為D:\spark\ideafirstdemo.jar

Exception in thread "main" java.lang.SecurityException: Invalid signature file d
igest for Manifest main attributes

遇到此異常是由於工程打包的數字簽名不匹配,jar包被認為是不安全的。

要解決此問題,目前來看比較土的辦法就是使用winrar開啟jar,刪除META-INF下面除MAVEN   .MF  .RSA以外的所有檔案即可解決。

如果是在linux環境下,執行如下命令據說也可以解決該異常

zip -d yourjar.jar 'META-INF/.SF''META-INF/.RSA''META-INF/*SF'
未親測,含義就是刪除
yourjar.jar裡面的sf rsa *sf檔案等。