1. 程式人生 > >scala編寫的Spark程式遠端提交到伺服器叢集上執行

scala編寫的Spark程式遠端提交到伺服器叢集上執行

一.需要的軟體:

  • eclipse
  • 相應版本的scalaIDE
  • 與叢集一樣的spark安裝包,主要是要用到spark中的jar包
  • 與叢集一樣的hadoop安裝包
  • 與hadoop版本對應的winutil.exe,hadoop.dll(只要版本差距不大不一樣也沒關係)

二.步驟
(一)在eclipse中安裝對應版本的ScalaIDE,具體安裝見網上。

(二)複製winutil.exe,hadoop.dll到hadoop的bin檔案下,並設定hadoop的環境變數,具體設定方法也可以在網上找到。

(三)在eclipse中建立scala工程,與java工程類似,在src下建立package和相應的scala object檔案。

程式碼示例:

import org.apache.spark.SparkContext._
import org.apache.spark.{SparkConf,SparkContext}

object RemoteDebug {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Spark Pi").setMaster("spark://your-hadoop-master:7077")
      .setJars(List("file:///E:/scalatest.jar"))
      System.setProperty("hadoop.home.dir"
, "D:/Program Files/hadoop-2.6.5"); val spark = new SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 val n = 100000 * slices val count = spark.parallelize(1 to n, slices).map { i => val x = Math.random * 2 - 1 val y = Math.random * 2 - 1 if (x * x + y * y < 1
) 1 else 0 }.reduce(_ + _) println("Pi is roughly " + 4.0 * count / n) spark.stop() } }

(四)build path

將spark安裝包下的jars資料夾下的jar包匯入scala project中。

(五)run as Scala Application

執行結果:

這裡寫圖片描述

(六)出現的錯誤:

錯誤一:

Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 0.0 failed 4 times, most recent failure: Lost task 1.3 in stage 0.0 (TID 5, 222.31.67.83): java.io.IOException: No FileSystem for scheme: E
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2630)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
    at org.apache.spark.util.Utils$.getHadoopFileSystem(Utils.scala:1822)
    at org.apache.spark.util.Utils$.doFetchFile(Utils.scala:665)
    at org.apache.spark.util.Utils$.fetchFile(Utils.scala:449)
    at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor$Executor$$updateDependencies$5.apply(Executor.scala:488)
    at org.apache.spark.executor.Executor$$anonfun$org$apache$spark$executor$Executor$$updateDependencies$5.apply(Executor.scala:480)
    at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99)
	at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99)
    at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230)
    at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40)
    at scala.collection.mutable.HashMap.foreach(HashMap.scala:99)
    at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
    at org.apache.spark.executor.Executor.org$apache$spark$executor$Executor$$updateDependencies(Executor.scala:480)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:252)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

原因:使用file:///指定為本地路徑

錯誤二:

17/01/05 22:16:00 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 222.31.67.133): java.lang.RuntimeException: Stream '/jars/scalatest.jar' was not found.
    at org.apache.spark.network.client.TransportResponseHandler.handle(TransportResponseHandler.java:222)
    at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:121)
    at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:51)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at org.apache.spark.network.util.TransportFrameDecoder.channelRead(TransportFrameDecoder.java:85)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111)
    at java.lang.Thread.run(Thread.java:745)

原因:找不到jar包,是因為在執行之前沒有把我們的專案先導成jar包放到我們指定的路徑下。因此,只需要匯出jar包就可以了。

錯誤三:

系統變數設定了HADOOP_HOME也不行,找不到winutil.exe。

可以在程式中直接設定環境變數

  System.setProperty("hadoop.home.dir", "D:/Program Files/hadoop-2.6.5");

相關推薦

編寫Spark程式提交叢集執行

編寫Spark應用程式 使用SCALA IDE,新建一個SCALA PROJECT,在專案下新建一個lib的資料夾,把spark的JAR包放進去,並且build path裡新增一下JAR包引用,然後新增一個SCALA類SparkRowCount,這個Spark

scala編寫Spark程式遠端提交伺服器叢集執行

一.需要的軟體: eclipse 相應版本的scalaIDE 與叢集一樣的spark安裝包,主要是要用到spark中的jar包 與叢集一樣的hadoop安裝包 與hadoop版本對應的winutil.exe,hadoop.dll(只要版本差距不大不一樣也沒關

Spark(七)在叢集執行Spark

7、在叢集上執行Spark Spark的執行模式: 1、Local 本地模式 常用於本地開發測試,本地還分為local單執行緒和local-cluster多執行緒。2、Standalone 叢集模式 典型的Mater/slave模式,不過也能看出Master是有單點故障的

java編寫WordCound的Spark程式Scala編寫wordCound程式

1、建立一個maven專案,專案的相關資訊如下: <groupId>cn.toto.spark</groupId> <artifactId>bigdata</artifactId> <version>1.0-S

叢集執行python編寫spark應用程式(過程記錄)

啟動hadoop[email protected]:/usr/local/hadoop-2.7.5/sbin#./start-all.sh This script is Deprecated. Instead use start-dfs.shand start-ya

如何讓程式在linux伺服器下一直執行(關閉遠端連線後仍然繼續執行

一、為什麼要使程式在後臺執行 最近剛剛入手在做一個遠端通訊的專案,利用套接字實現長連線通訊。那麼問題來了,我的服務端程式怎麼才能一直在伺服器上執行以達到隨時監測使用者請求的目的呢?查了幾篇部落格,解決了,記一下筆記。程式在後臺跑有以下2個好處: 1:我們遠端連線的之一端並不影響伺服器服務

使用java和scala編寫spark-WordCount示例

前言:     最近博主在學習spark相關知識,感覺是個挺不錯的框架,它的分散式處理大資料集的思想還是值得我們好好學習的。     個人感覺以後java開發肯定不僅僅是SSM這一套東西了,當資料量越來越大時,我們需要學習使用這些大資料工具。

idea打包spark程式叢集執行過程(1)

第一步: 第二步: 第三步: 第四步: 第五步: spark-submit --master yarn --deploy-mode cluster --driver-memory 4G --executor-memory 5g --num

java編寫spark程式

importjava.net.URI; import java.util.Arrays; import java.io.*; import org.apache.hadoop.io.*; import org.apache.hadoop.conf.Configuration; import org.

用java編寫spark程式,簡單示例及執行

最近因為工作需要,研究了下spark,因為scala還不熟,所以先學習了java的spark程式寫法,下面是我的簡單測試程式的程式碼,大部分函式的用法已在註釋裡面註明。 我的環境:hadoop 2.2.0                    spark-0.9.0  

如何使用PyCharm編寫Spark程式(pyspark)

import os import sys # Path for spark source folder os.environ['SPARK_HOME'] = "/Users/dustinchen/Do

spark叢集搭建與叢集執行wordcount程式

Spark 配置 1、master 機器 Spark 配置 進入 Spark 安裝目錄下的 conf 目錄, 拷貝 spark-env.sh.template 到 spark-env.sh。 cp spark-env.sh.template spark-e

編寫Spark程式的幾個優化點

雖然spark已經提供了大量簡單易用的API,但要想編寫出高效能的spark應用,必須要對整體框架有一定的瞭解,對於Spark初學者來說是比較困難的。 針對這個這個問題,其實在spark1.6中,已經加入了dataset,官方已經對其進行了一系列

使用idea和maven開發和打包scalaspark程式

使用idea構建maven管理的scala和spark程式,預設已經裝好了idea、scala並在idea中安裝了scala外掛。一、新建Maven專案開啟idea,點選File—New—Project,彈出如下介面,選擇Maven專案,檢視是否是正確的JDK配置項正常來說這

SparkSubmit.main()方法提交外部引數,遠端提交standalone叢集任務

一、官方文件描述 二、引入pom【注意版本問題】  <dependency>            <groupId>org.apache.spark</groupId>            <artifactId>s

好程式設計師大資料教程:SparkShell和IDEA中編寫Spark程式

好程式設計師大資料教程:SparkShell和IDEA中編寫Spark程式,spark-shell是Spark自帶的互動式Shel

第7章 在叢集執行Spark

7.1 簡介 7.2 Spark執行時架構 分散式環境下,Spark叢集採用的是主/從結構。 驅動器節點:負責中央協調 執行器節點:工作節點 Spark應用通過一個叫做叢集管理器的外部服務在叢集中的機器

【解決】自己編寫Wordcount程式碼叢集執行時報錯:Exception in thread "main" java.lang.ClassNotFoundException: WordCount

報錯資訊:ClassNotFoundException: WordCount [[email protected] fs_testdir]# hadoop jar /fs_testdir/my

spark streaming應用提交到yarn一直處於ACCEPTED狀態,也未報錯

原因已經找到,這裡做個記錄,防止下次再犯類似的錯誤。實際上是因為程式碼中將執行模式設定為本地模式,在提交到yarn上後driver端的程式碼正常執行,並且也正常運行了很多批次。但由於是本地模式,所以driver不會向resourcemanager申請資源,所以也就不會向rm註

MyEclipse 打包到hadoop叢集執行MR程式提示ClassNotFoundException的兩種原因

今天寫MR程式,原來用TextInputFormat改為用KeyValueTextInputFormat類提交到hadoop上一直提示ClassNotFoundException的異常。 百思不得其解,後來檢視原始碼時發現沒有KeyValueTextInputFormat的