Почему Spark Query (загрузка) из Oracle выполняется так медленно по сравнению с SQOOP?

#oracle #apache-spark #apache-spark-sql #spark-dataframe

#Oracle #apache-spark #apache-spark-sql

Вопрос:

Мы обнаружили, что загрузка данных с помощью API Spark из баз данных Oracle всегда была медленной, начиная с Spark 1.3 и заканчивая текущим Spark 2.0.1. Типичный код на Java выглядит следующим образом:

         Map<String, String> options = new HashMap<String, String>();
        options.put("url", ORACLE_CONNECTION_URL);
        options.put("dbtable", dbTable);
        options.put("batchsize", "100000");
        options.put("driver", "oracle.jdbc.OracleDriver");

        Dataset<Row> jdbcDF = sparkSession.read().options(options)
                .format("jdbc")
                .load().cache();
        jdbcDF.createTempView("my");

        //= sparkSession.sql(dbTable);
        jdbcDF.printSchema();
        jdbcDF.show();

        System.out.println(jdbcDF.count());
  

Один из наших участников когда-либо пытался настроить эту часть, и он значительно улучшился в то время (Spark 1.3.0). Но какая-то часть кода ядра Spark стала внутренней для Spark, поэтому ее нельзя использовать после версии. Кроме того, мы видим, что SQOOP от HADOOP намного быстрее, чем Spark для этой части (но он записывает в HDFS, что потребует много работы для преобразования в Dataset для использования Spark). Запись в Oracle с использованием метода записи набора данных Spark, похоже, подходит для нас. Непонятно, почему это происходит!

Комментарии:

1. Есть решение: options.put(«batchsize», «100000») следует заменить options.put(«fetchsize», «100000»).

2. @PauZWu: добавить в качестве решения, которого оно заслуживает

3. Пожалуйста, сделайте @PauZWu, я хочу наградить награду 🙂

Ответ №1:

Что ж, @Pau Z Wu уже ответил на вопрос в комментариях, но проблема заключалась options.put("batchsize", "100000"); в том, что это было необходимо options.put("fetchsize", "100000"); , поскольку размер выборки связан с ограничением количества строк, извлекаемых из базы данных за раз, и в конечном итоге ускорит время загрузки.

Более подробную информацию можно найти здесь: https://docs.oracle.com/cd/A87860_01/doc/java.817/a83724/resltse5.htm

Комментарии:

1. Поскольку Pau Z Wu, похоже, не заинтересован в ответе, щедрость ваша.