2016-07-08 89 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提到的差异。