Java 是否可以从代码运行spark纱线簇?
我有一个MapReduce任务,我想从java代码在Spark纱线集群上运行它。我还想在java代码中检索reduce结果(字符串和数字对,元组)。比如:Java 是否可以从代码运行spark纱线簇?,java,apache-spark,yarn,Java,Apache Spark,Yarn,我有一个MapReduce任务,我想从java代码在Spark纱线集群上运行它。我还想在java代码中检索reduce结果(字符串和数字对,元组)。比如: // I know, it's wrong setMaster("YARN"), but just to describe what I want. // I want to execute job ob the cluster. SparkConf sparkConf = new SparkConf().setAppName("Test")
// I know, it's wrong setMaster("YARN"), but just to describe what I want.
// I want to execute job ob the cluster.
SparkConf sparkConf = new SparkConf().setAppName("Test").setMaster("YARN");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
JavaRDD<Integer> input = sc.parallelize(list);
// map
JavaPairRDD<String, Integer> results = input.mapToPair(new MapToPairExample());
// reduce
String max = results.max(new MyResultsComparator())._1();
//我知道,这是错误的setMaster(“纱线”),但只是为了描述我想要的。
//我想在集群中执行作业ob。
SparkConf SparkConf=新SparkConf().setAppName(“测试”).setMaster(“纱线”);
JavaSparkContext sc=新的JavaSparkContext(sparkConf);
JavaRDD input=sc.parallelize(列表);
//地图
javapairrdresults=input.mapToPair(新的MapToPairExample());
//减少
字符串max=results.max(新的MyResultsComparator())。\u 1();
如果我将master设置为local、local[]或spark://master:7707.
所以问题是:我能用纱线簇做同样的事情吗?你需要用spark submit来做。Spark submit为您处理许多事情,从将依赖项传送到集群,到设置正确的类路径等等。 当您以本地模式将其作为主java程序运行时,您的IDE负责类路径(因为驱动程序/执行程序在同一jvm中运行) 如果希望驱动程序在机器上运行,也可以使用
“纱线客户端”
模式
对于纱线簇模式,请使用
.setMaster(“纱线簇”)
通常,当将主控作为纱线传递和部署模式作为簇传递时,spark submit命令的工作方式如下(来源:):
欢迎对此进行任何更正 想向您介绍一些相关的类,这些类可以帮助您完成从代码到纱线的spark提交 基本上,您可以从org.apache.spark:spark-spirn库创建一个纱线部署客户端。 有一个名为:org.apache.spark.deploy.warn的包 它有一个客户机类 棘手的部分是,您应该向该类传递一个sparkConf,spark conf应该有您的hadoopConf(您尝试部署到的集群的hadoopConf) 例如,您可以尝试以下内容(scala):
def rawHadoopConf(集群:字符串):配置={
val hadoopConfig=新配置(false)
hadoopConfig.addResource(新URL)http://hadoop-$cluster.com:50070/conf”).openStream()
hadoopConfig.set(“fs.defaultFS”,s“hdfs://$cluster/”)
hadoopConfig
}
我在应用程序中使用sparkConf.setMaster(“纱线簇”)运行了一个Spark作业(不是通过Spark submit),它按预期运行。驱动程序在其中一个Hadoop节点和指定的几个其他执行器上启动。
但是,如果您想从另一个应用程序中启动Spark作业,可以尝试传递SparkConf和HadoopConf,如上所述。.setMaster(“纱线簇”)#或纱线客户端
/spark submit--master warn cluster
您可以在master:8088
上检查您的状态,然后单击运行应用程序的应用程序master
。