Проблема с подключением Informix в Spark - PullRequest
0 голосов
/ 25 февраля 2019

Создание соединения Informix с использованием приведенного ниже URL-адреса прекрасно работает с автономной программой Java, но создает проблему при запросе данных с помощью Apache Spark.

    String INFORMIX_DRIVER = "com.informix.jdbc.IfxDriver";
    SparkConf sparkConf = new SparkConf()
            .setAppName("BuyerConnet-Pre-Final-SQ-Item-Export")
            .set("spark.cores.max", "64")
            .set("spark.executor.instances", "32")
            .set("spark.default.parallelism", "256")
            .set("spark.executor.memory", "1g")
            .set("hive.exec.dynamic.partition", "true")
            .set("hive.exec.dynamic.partition.mode", "nonstrict");

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

        String url = "jdbc:informix-sqli:DATABASE=imdct6;INFORMIXSERVER=importsp_redir;SQLH_TYPE=FILE;SQLH_FILE=/tmp/sqlhosts;DELIMIDENT=Y";

        Dataset<Row> dataSet =
            sparkSession.read().format("jdbc")
            .option("url", url)
            .option("dbtable", "( select * from table where table_status_code = 1000 ) AS TEST_DATA")    
            .option("user", "sample")
            .option("password", "sample")
            .option("driver", INFORMIX_DRIVER).load();

        dataSet.printSchema();

Файл sqlhosts находится в нужном месте.В нем есть правильные записи, которые были протестированы.

След ошибки стека, наблюдаемый ниже.

Caused by: java.sql.SQLException: com.informix.asf.IfxASFException: Invalid ASF API input parameters.
    at com.informix.jdbc.IfxSqliConnect.<init>(IfxSqliConnect.java:1691)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.informix.jdbc.IfxDriver.connect(IfxDriver.java:206)
    at org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper.connect(DriverWrapper.scala:45)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:61)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:52)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD.compute(JDBCRDD.scala:286)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:96)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:53)
    at org.apache.spark.scheduler.Task.run(Task.scala:108)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:335)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Любые предложения о том, в чем может быть проблема или как ее можно исправить?

...