当前位置: 首页 > 知识库问答 >
问题:

无法在spark应用程序中设置System属性[在客户端和群集模式中]

陈刚洁
2023-03-14

要设置system.setproperty(“oracle.net.tns_admin”,path_of_ora),我尝试了以下方法。

方法1:使用broadcast变量将tns.ora文件复制到所有执行程序sparksession.sparkcontext()。broadcast(“/tmp/conf/”,classTagTest)

方法2:在spark submit命令中使用--files参数传递tns.ora文件,并设置--conf spark.executor.extrajavaoptions=-doracle.net.tns_admin=tnsnames.ora

方法3:使用sparksession.addfile(“tnsnames.ora”)集--conf spark.executor.extrajavaoptions=-doracle.net.tns_admin=tnsnames.ora

根据我们的分析,我们发现当运行spark应用程序时,系统属性被设置为master为local[*],模式为client。

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

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

spark-submit--类demo1-master local[*]--deploy-mode client--驱动程序--内存5G--执行器--内存10G--执行器--核心5--num-executors 36--JAR OJDBC15-11.1.0.6.jar--文件/tmp/tnsnames.ora--conf spark.executor.extrajavaoptions=-doracle.net.tns_admin=tnsnames.ora--驱动程序-java-options-doracle.net.tns_admin=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 ");
}

User类引发异常:java.sql.sqlexception:Io异常:无法解析连接标识符“xxxxx”

共有1个答案

臧令
2023-03-14

这是我所做的。我在Spark配置文件中将它设置为一个属性,然后在代码中将它设置为一个系统属性。属性名以“spark.”开头是很重要的,所以如下所示:

System.setProperty("oracle.net.tns_admin",conf.get("spark.your.property.name"));
 类似资料:
  • 一直在努力解决使用Spark YARN处理多个配置文件以及在集群和客户端模式之间切换的问题。 在我的应用程序中,我需要加载两个配置文件: 应用程序配置 环境配置 示例-application.conf: env.conf: 代码: 有什么建议如何设置,以便我可以轻松地交换集群和客户端模式? 谢谢!

  • 我有一个项目连接到独立的redis,客户端创建为: 用于绝地武士和spring data redis的库版本为: 现在我需要移动到集群redis,并将客户端创建更改为 通过此代码更改,我在群集中找不到可访问的节点,如下所示: } 由于spark-2.1.3中运行了spark应用程序,由于版本依赖性,我需要使用相同的spring data redis。如果没有jedis和spring data re

  • 有两种部署模式可用于在YARN上启动Spark应用程序。在yarn-cluster模式下,Spark驱动程序在集群上由YARN管理的应用程序主进程中运行,客户端可以在启动应用程序后离开。在yarn-client模式下,驱动程序在客户端进程中运行,而应用程序主进程仅用于向YARN请求资源。 在此,我只能理解的区别是哪个地方的驱动程序在运行,但我无法理解哪个运行得更快。莫尔沃弗: 在运行Spark-s

  • 问题内容: 我正在使用Spark 1.6(Cloudera 5.8.2),并尝试了以下方法来配置ORC属性。但这不会影响输出。 以下是我尝试过的代码段。 除此之外,我还尝试了在hive-site.xml和hiveContext对象中设置的这些属性。 hive –orcfiledump在输出中确认未应用配置。以下是Orcfiledump代码段。 问题答案: 您在这里犯了两个不同的错误。我不怪你 我去

  • 我的工作是这样的: https://spark.apache.org/docs/latest/running-on-kubernetes.html 下面是驱动程序用于引导集群的代码: