gpt4 book ai didi

java - 无法在 Spark 应用程序中设置系统属性 [在客户端和集群模式下]

转载 作者:行者123 更新时间:2023-12-02 01:25:38 25 4
gpt4 key购买 nike

要设置System.setProperty("oracle.net.tns_admin",path_of_ora),我尝试了以下方法。

Approach 1: Used broadcast variable to copy tns.ora file to all executors sparkSession.sparkContext().broadcast("/tmp/conf/”,classTagTest)

这种方法的问题是“/tmp/conf/”被视为字符串变量而不是路径

Approach 2: Used --files parameter in spark submit command to pass tns.ora file and set --conf spark.executor.extraJavaOptions=-Doracle.net.tns_admin=tnsnames.ora

Approach 3: Used sparkSession.addFile(“tnsnames.ora”) set --conf spark.executor.extraJavaOptions=-Doracle.net.tns_admin=tnsnames.ora

根据我们的分析,我们发现当 Spark 应用程序以 master 作为本地[*] 和模式客户端运行时,系统属性被设置。

即使在客户端模式下,也只能识别本地路径,当我们尝试使用 hdfs 路径设置 systemProperty 时,它不会被识别。

但要求是设置系统属性并以集群模式运行。

spark-submit --class Demo1 --master local[*] --deploy-mode client --driver-memory 5g --executor-memory 10g --executor-cores 5 --num-executors 36 --jars ojdbc15-11.1.0.6.jar --files /tmp/tnsnames.ora --conf spark.executor.extraJavaOptions=-Doracle.net.tns_admin=tnsnames.ora --driver-java-options -Doracle.net.tns_admin=tnsnames.ora test.jar tnsnames.ora

SparkConf sparkConf = new SparkConf()
// .setMaster("local[*]")
.setAppName("Iden");

SparkSession sparkSession = SparkSession.builder()
.config(sparkConf).getOrCreate();

String username = "etldevapp";
String password = "etldevappstg";
String thinConn = "jdbc:oracle:thin:" + username + "/" + password + "@xxxxxxx";

System.setProperty("oracle.net.tns_admin","/tmp/");

try {
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(thinConn, username, password);

PreparedStatement st = conn.prepareStatement("select * from xxxx where rownum < 10");

final ResultSet rs = st.executeQuery();
System.out.println(rs.getFetchSize());
} catch (Exception e) {
System.out.println("Exception from try1 ");
}

用户类抛出异常:java.sql.SQLException:Io异常:无法解析连接标识符“xxxxx”

最佳答案

这就是我所做的。我将其设置为 Spark 配置文件中的属性,然后在代码中将其设置为系统属性。属性名称以“spark”开头很重要,所以像这样:

System.setProperty("oracle.net.tns_admin",conf.get("spark.your.property.name"));

关于java - 无法在 Spark 应用程序中设置系统属性 [在客户端和集群模式下],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57588659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com