2016-07-08 83 views
2

1.My火花(單機)集羣:spmaster,spslave1,spslave2爲什麼我在Eclipse中運行應用程序火花的情況下直接火花提交

2.對於我的簡單的火花應用程序,它從MySQL選擇一些記錄。

public static void main(String[] args) { 
    SparkConf conf = new SparkConf() 
      .setMaster("spark://spmaster:7077") 
      .setAppName("SparkApp") 
      .set("spark.driver.extraClassPath","/usr/lib/spark-1.6.1-bin-hadoop2.6/lib/mysql-connector-java-5.1.24.jar") //the driver jar was uploaded to all nodes 
      .set("spark.executor.extraClassPath","/usr/lib/spark-1.6.1-bin-hadoop2.6/lib/mysql-connector-java-5.1.24.jar"); 
    JavaSparkContext sc = new JavaSparkContext(conf); 
    SQLContext sqlContext = new SQLContext(sc); 
    String url = "jdbc:mysql://192.168.31.43:3306/mytest"; 
    Map<String, String> options = new HashMap<String, String>(); 
    options.put("url", url); 
    options.put("dbtable", "mytable"); 
    options.put("user", "root"); 
    options.put("password", "password"); 
    DataFrame jdbcDF = sqlContext.read().format("jdbc").options(options) 
      .load(); 
    jdbcDF.registerTempTable("c_picrecord"); 
    DataFrame sql = sqlContext.sql("select * from mytable limit 10"); 
    sql.show(); // **show the result on eclipse console** 
    sc.close(); 
} 

3.My問題:當我right click - >run as 'Java Application',它的工作原理成功,我可以找到WEBUI <spark://spmaster:7077>。我的工作不undersatand它是如何工作的,什麼是使用之間的不同spark-submit.sh

回答

3

當我們使用spark-submit.sh來提交應用程序時,spark-submit已經創建了Spark Context(默認爲驅動程序)。

但是,當我們使用Java API(JavaSparkContext)連接主設備時,Java應用程序將變爲驅動程序。通過使用這個驅動程序,所有的應用程序/作業都會提交給主人。

+0

非常感謝!根據我的理解,不同之處在於如何創建驅動程序以及驅動程序將最終發送給每個工作人員。 –

+0

@陳志明司機會把工作交給師父,師傅會把工作分配給可用的工人。 – Sheel

0

spark-submit.sh腳本只是圍繞$ {JAVA_HOME} /斌/ java的執行命令的包裝。它建立了環境的詳細信息,然後運行是這樣的:當你點擊運行爲「Java應用程序」你也引發的java執行命令,但沒有完成所有的環境設置

${JAVA_HOME}/bin/java -Xmx128m -cp "$LAUNCH_CLASSPATH" org.apache.spark.launcher.Main "[email protected]" 

spark-submit.sh和@Sheel提到的差異。