問題タブ [spark-jdbc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
783 参照

hive - SparkSQL JDBC ライターが「ロックを取得できません」というエラーで失敗する

SparkSQL JDBC Writer を使用して、ハイブ テーブルから SQLServer テーブルに 5,000 万行を挿入しようとしています。以下は、データを挿入するために使用しているコード行です。

mdf1.coalesce(4).write.mode(SaveMode.Append).jdbc(connectionString, "dbo.TEST_TABLE", connectionProperties)

以下のエラーで 1,000 万行を処理した後、spark ジョブが失敗する

java.sql.BatchUpdateException: SQL Server データベース エンジンのインスタンスは、現時点で LOCK リソースを取得できません。アクティブなユーザーが少なくなったら、ステートメントを再実行してください。データベース管理者に依頼して、このインスタンスのロックとメモリの構成を確認するか、実行時間の長いトランザクションを確認してください。

しかし、以下のコード行を使用すると、同じジョブが成功します。

mdf1.coalesce(1).write.mode(SaveMode.Append).jdbc(connectionString, "dbo.TEST_TABLE", connectionProperties)

パフォーマンスを最適化するために、SQLServer への 4 つの並列接続を開こうとしています。しかし、1000万行を処理した後、ジョブは「ロックを取得できません」というエラーで失敗し続けます。また、データフレームを数百万行(1000万未満)に制限すると、4つの並列接続でもジョブは成功します

SparkSQL を使用して膨大な量のデータを RDBMS にエクスポートできるかどうか、また SQL サーバー テーブルの構成を変更する必要があるかどうか、誰か教えてください。

前もって感謝します。

0 投票する
1 に答える
17210 参照

apache-spark - Spark: read.jdbc(..numPartitions..) と repartition(..numPartitions..) の numPartitions の違い

numPartitions次のメソッドのパラメーターの動作に戸惑っています。

  1. DataFrameReader.jdbc
  2. Dataset.repartition

パラメータに関する次の公式ドキュメントDataFrameReader.jdbcnumPartitions

numPartitions : パーティションの数。これは、lowerBound (含む)、upperBound (含まない) とともに、列 columnName を均等に分割するために使用される、生成された WHERE 句式のパーティション ストライドを形成します。

そして言うの公式ドキュメントDataset.repartition

numPartitions正確に分割された新しいデータセットを返します。


私の現在の理解:

  1. メソッドのnumPartitionパラメーターは、データベースからデータを読み取る際の並列処理の度合いを制御しますDataFrameReader.jdbc
  2. numPartitionパラメーターは、これがディスクに書き込まれるときに生成される出力ファイルDataset.repartitionの数を制御しますDataFrame

私の質問:

  1. (メソッドを呼び出さずに)読み取っDataFrameてからディスクに書き込むと、呼び出した後にディスクに書き出す場合と同じ数のファイルが出力に残りますか?DataFrameReader.jdbcrepartitionDataFramerepartition
  2. 上記の質問に対する答えが次の場合:
    • はい: それでは、メソッド (パラメーター付き)を使用して読み取らrepartitionれた上でメソッドを呼び出すのは冗長ですか?DataFrameDataFrameReader.jdbcnumPartitions
    • いいえ: それでは、私の理解の誤りを訂正してください。また、その場合、メソッドのnumPartitionsパラメーターは「並列処理」などと呼ばれるべきではありませんか?DataFrameReader.jdbc