为 Apache Spark 指定外部配置文件
2022-09-04 06:49:53
我想在配置文件中指定 Spark 的所有属性,然后在运行时加载该配置文件。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
事实证明,我对如何做到这一点感到非常困惑。忽略这个问题的其余部分。要查看有关如何将 .properties 文件加载到 spark 集群中的简单解决方案(在 Java Spark 中),请参阅下面的答案。
以下原始问题仅供参考。
~~~~~~~~~~~~~~~~~~~~~~~~
我想要
- 根据环境(本地、aws)的不同配置文件
- 我想指定特定于应用程序的参数
举个简单的例子,让我们想象一下,我想根据字符串过滤日志文件中的行。下面我有一个简单的Java Spark程序,它从文件中读取数据并根据用户定义的字符串进行过滤。程序采用一个参数,即输入源文件。
Java Spark Code
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
public class SimpleSpark {
public static void main(String[] args) {
String inputFile = args[0]; // Should be some file on your system
SparkConf conf = new SparkConf();// .setAppName("Simple Application");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> logData = sc.textFile(inputFile).cache();
final String filterString = conf.get("filterstr");
long numberLines = logData.filter(new Function<String, Boolean>() {
public Boolean call(String s) {
return s.contains(filterString);
}
}).count();
System.out.println("Line count: " + numberLines);
}
}
配置文件
配置文件基于 https://spark.apache.org/docs/1.3.0/configuration.html,如下所示:
spark.app.name test_app
spark.executor.memory 2g
spark.master local
simplespark.filterstr a
问题
我使用以下参数执行应用程序:
/path/to/inputtext.txt --conf /path/to/configfile.config
但是,这不起作用,因为异常
Exception in thread "main" org.apache.spark.SparkException: A master URL must be set in your configuration
被抛出。对我来说,这意味着配置文件没有被加载。
我的问题是:
- 我的设置有什么问题?
- 在 spark 配置文件中指定应用程序特定的参数是否适合?