問題タブ [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.
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 サーバー テーブルの構成を変更する必要があるかどうか、誰か教えてください。
前もって感謝します。
apache-spark - Spark: read.jdbc(..numPartitions..) と repartition(..numPartitions..) の numPartitions の違い
numPartitions
次のメソッドのパラメーターの動作に戸惑っています。
DataFrameReader.jdbc
Dataset.repartition
パラメータに関する次の公式ドキュメントDataFrameReader.jdbc
numPartitions
numPartitions : パーティションの数。これは、lowerBound (含む)、upperBound (含まない) とともに、列 columnName を均等に分割するために使用される、生成された WHERE 句式のパーティション ストライドを形成します。
そして言うの公式ドキュメントDataset.repartition
numPartitions
正確に分割された新しいデータセットを返します。
私の現在の理解:
- メソッドの
numPartition
パラメーターは、データベースからデータを読み取る際の並列処理の度合いを制御しますDataFrameReader.jdbc
- の
numPartition
パラメーターは、これがディスクに書き込まれるときに生成される出力ファイルDataset.repartition
の数を制御しますDataFrame
私の質問:
- (メソッドを呼び出さずに)読み取っ
DataFrame
てからディスクに書き込むと、呼び出した後にディスクに書き出す場合と同じ数のファイルが出力に残りますか?DataFrameReader.jdbc
repartition
DataFrame
repartition
- 上記の質問に対する答えが次の場合:
- はい: それでは、メソッド (パラメーター付き)を使用して読み取ら
repartition
れた上でメソッドを呼び出すのは冗長ですか?DataFrame
DataFrameReader.jdbc
numPartitions
- いいえ: それでは、私の理解の誤りを訂正してください。また、その場合、メソッドの
numPartitions
パラメーターは「並列処理」などと呼ばれるべきではありませんか?DataFrameReader.jdbc
- はい: それでは、メソッド (パラメーター付き)を使用して読み取ら