2014年9月21日 星期日

[Apache Spark][教學] Spark 單機版安裝教學(for mac)

圖片來源:https://spark.apache.org

        最近SPARK在台灣相當火熱名媛最愛李宗瑞來這撿屍,潮男潮女富二代去的是(http://www.sparktaipei.com.tw),宅宅工程師只能在家玩Spark(https://spark.apache.org).



        隨著數據量越來越大,除了需要更大的儲存空間,更快的存取速度,也需要更快地計算速度,Spark就是在這樣的需求下的產物.因為Spark我也剛開始摸索,所以還無法提供太詳細的心得.只知道spark的計算主要是依賴記憶體空間,同時計算速度是傳統hodoop的N倍以上,而且處理時間不太會隨著處理資料的增加而大幅成長(資料來源:http://www.jdon.com/bigdata/spark.html; 原始論文:http://www.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-82.pdf.照這樣的特性來看,的確相當適合做big data的計算.不過在使用之前總是先要架設環境,雖然我沒有分散是的環境,但是spark也可以架設在單機上,這篇文章主要講的就是部署在單機上的過程.
  1. 下載Spark(http://spark.apache.org/downloads.html),下載後解壓縮在硬碟上.
  2. 下載JAVA JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm.安裝好JDK後,要先設定JAVA和SPARK的環境.
  3. 接著進入spark的目錄,執行$sbt\sbt.cmd assembly,這邊會自動下載和部署環境,時間會花久一點,我自己是跑了1300秒.
  4. 上述步驟結束後,執行spark-shell,應該會出現下列畫面:
  5. 注意中間有個Spark UI的訊息後面會有一串網址,將網址丟到瀏覽器應該會出現
這個畫面出現就表示spark 單機部署成功,可以開始玩了~
如果中間出現錯誤訊息可能有幾個原因:

  1. JAVA JDK沒裝
  2. JAVA 環境變項沒有設定
  3. JAVA環境變項路徑設定錯誤(我就是在這邊卡超久...)
一樣又是一篇血淚教訓給各位參考T_T

2015/01/18 現在你有更好的選擇--使用Docker吧!:[Spark][教學] Spark x Docker x ipython Notebook !(一)-Docker + Spark安裝篇







11 則留言:

  1. Bryan大大您好,我是Big Data的初學者,最近開始研究Spark,現在有個課題是如何把MS SQL資料轉到Spark,但會有一些driver錯誤,不知道大大有沒有相關的研究,謝謝

    回覆刪除
    回覆
    1. 不好意思這個問題有點沒頭沒尾的,很難判斷XD
      請你是怎麼轉的? 聽起來是用JDBC DRIVER?
      有相關的錯誤訊息嗎? 謝謝~

      刪除
    2. 不好意思,若提供的資訊不夠,請再跟我說
      因為在網路上找到的資料試做後,似乎只有JDBC方法可行,若大大有其它方法,也請指教!!

      目前是使用JDBC Driver,使用spark-shell 加入jdbc參數
      指令>> ./bin/spark-shell --jars /tmp/sqljdbc_4.0/cht/sqljdbc4.jar
      設定的URL>> "jdbc:sqlserver://testserver:1433;databaseName=testdb;integratedSecurity=true;"

      產生錯誤訊息:
      ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
      com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication. ClientConnectionId:f06b3867-7653-400b-8425-c0f4d75e178c
      at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)
      at com.microsoft.sqlserver.jdbc.AuthenticationJNI.(AuthenticationJNI.java:60)
      at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2229)
      at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
      at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2220)
      at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
      at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
      at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326)
      at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
      at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
      at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
      at java.sql.DriverManager.getConnection(DriverManager.java:571)
      at java.sql.DriverManager.getConnection(DriverManager.java:215)
      at $line21.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$1.apply(:23)
      at $line21.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$1.apply(:23)
      at org.apache.spark.rdd.JdbcRDD$$anon$1.(JdbcRDD.scala:73)
      at org.apache.spark.rdd.JdbcRDD.compute(JdbcRDD.scala:70)
      at org.apache.spark.rdd.JdbcRDD.compute(JdbcRDD.scala:50)
      at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:262)
      at org.apache.spark.rdd.RDD.iterator(RDD.scala:229)
      at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:62)
      at org.apache.spark.scheduler.Task.run(Task.scala:54)
      at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:178)
      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)
      Caused by: java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.path
      at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
      at java.lang.Runtime.loadLibrary0(Runtime.java:849)
      at java.lang.System.loadLibrary(System.java:1088)
      at com.microsoft.sqlserver.jdbc.AuthenticationJNI.(AuthenticationJNI.java:35)

      刪除
    3. 因為我手邊沒有MYSQL,無法實測。不過從網路上的資料來看,這個錯誤訊息和SPARK無關。問題可能來自一個"sqljdbc_auth.dll"的檔案要放在系統目錄下。
      你可以參考:
      http://scn.sap.com/people/charu.agarwal/blog/2009/07/02/problems-faced-while-connecting-to-sql-server-using-jdbc-adapter-in-pi
      或這個:
      http://stackoverflow.com/questions/6087819/jdbc-sqlserverexception-this-driver-is-not-configured-for-integrated-authentic

      如果可以解決或還是無法解決問題還麻煩您分享一下:)

      刪除
    4. 謝謝大大的提供,因為我是Linux系統,所以還是要另外找相關文章,但找了一下講到此錯誤訊息的解法都是Windows系統,所以我會再花時間解決,若有解再分享出來,謝謝

      刪除
    5. 期待大大分享~ 不過這個問題這樣聽你說起來還滿奇怪的orz...

      刪除
  2. 請問一下,
    [frankieSpark@frankie spark-1.2.1]$ sbt\sbt.cmd assembly
    -bash: sbtsbt.cmd:命令找不到
    [frankieSpark@frankie spark-1.2.1]$
    為什麼會出錯呢?

    謝謝

    回覆刪除
  3. 可以檢查一下sbt的路徑有沒有放到PATH或是 看一下執行路徑對不對
    因為我現在手邊沒有環境,看一下有沒有sbt.cmd這個檔案, 看是不改成 sbt 就可以了

    回覆刪除
  4. 请問這是Linux嘅方法,还是Windows?

    回覆刪除
    回覆
    1. 您好,這是Mac的安裝方式,沒有用過Windows安裝過Spark

      刪除