programing

오라클의 스파크 쿼리(로드)가 SQOOP에 비해 매우 느린 이유는 무엇입니까?

mailnote 2023. 10. 18. 22:58
반응형

오라클의 스파크 쿼리(로드)가 SQOOP에 비해 매우 느린 이유는 무엇입니까?

Oracle 데이터베이스에서 Spark의 API로 데이터를 로드하는 작업이 Spark 1.3 이후 현재 Spark 2.0.1까지 항상 느리다는 것을 발견했습니다.일반적인 코드는 자바에서 다음과 같은 것입니다.

        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).하지만 스파크 코어 코드의 일부가 스파크 내부가 되어 버전 이후에는 사용할 수 없습니다.또한 HADOOP의 SQOOP은 이 부분의 경우 Spark보다 훨씬 빠릅니다(하지만 HDFS에 쓰기 때문에 Spark 용도의 Dataset으로 변환하려면 많은 작업이 필요합니다).Spark의 Dataset 쓰기 방법을 사용하여 Oracle에 쓰는 것이 우리에게 좋을 것 같습니다.왜 이런 일이 생기는지 헷갈리네요!

음 @PauZ Wu는 이미 댓글로 질문에 답했지만 문제는options.put("batchsize", "100000");이것은 필요했습니다.options.put("fetchsize", "100000");fetch size는 한 번에 데이터베이스에서 검색되는 행의 양을 제한하는 것을 다루기 때문에 로드 시간이 더 빨라집니다.

자세한 정보는 여기에서 확인할 수 있습니다: https://docs.oracle.com/cd/A87860_01/doc/java.817/a83724/resltse5.htm

언급URL : https://stackoverflow.com/questions/40007997/why-does-spark-query-load-from-oracle-is-so-slow-comparing-to-sqoop

반응형