1

Spark から HAWQ JDBC への接続が機能していましたが、2 日後にテーブルからデータを抽出する際に問題が発生しました。Spark の構成は何も変更されていません...

簡単なステップ #1 - HAWQ の単純なテーブルからスキーマを出力する SQLContext DataFrame を作成し、HAWQ データベースに接続できます。

df = sqlContext.read.format('jdbc').options(url=db_url, dbtable=db_table).load()
df.printSchema()

どちらが印刷されますか:

root
 |-- product_no: integer (nullable = true)
 |-- name: string (nullable = true)
 |-- price: decimal (nullable = true)

しかし、実際にデータを抽出しようとすると:

df.select("product_no").show()

これらのエラーがポップアップします...

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost): 
org.postgresql.util.PSQLException: ERROR: could not write 3124 bytes to temporary file: No space left on device (buffile.c:408)  (seg33 adnpivhdwapda04.gphd.local:40003 pid=544124) (cdbdisp.c:1571)
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2182)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1911)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:173)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:615)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:465)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:350)
    at org.apache.spark.sql.jdbc.JDBCRDD$$anon$1.<init>(JDBCRDD.scala:372)
    at org.apache.spark.sql.jdbc.JDBCRDD.compute(JDBCRDD.scala:350)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:277)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:244)
    at org.apache.spark.api.python.PythonRDD$WriterThread$$anonfun$run$3.apply(PythonRDD.scala:248)
    at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1772)
    at org.apache.spark.api.python.PythonRDD$WriterThread.run(PythonRDD.scala:208)

私が試したこと(ただし、より正確な手順がある場合は、もう一度試してください):

  • HAWQ マスター ノードで「df -i」を試しましたが、使用率は 1% しかありません
  • HAWQ データベースで dbvacuum を試しました (HAWQ では VACUUM ALL は推奨されません)。
  • この小さな新しいデータベース(単一のテーブル、3列)を作成しようとしましたが、うまくいきませんでした

これは実際のメモリ不足ではあり得ないので、どこで何がつまずいているのでしょうか??

4

1 に答える 1

1

一時ファイルに 3124 バイトを書き込めませんでした: デバイスに空き領域がありません

一時ファイルに使用されるボリュームがいっぱいです。その後、エラーが発生すると一時ファイルが削除されるため、実際にはボリューム全体が表示されませんdf

/tmpこれは、ほとんどの Linux システムの のような tempfs である可能性があります。もしそうなら、それは仮想メモリによって支えられています。確認するにmountは、PostgreSQLの設定を確認して確認してくださいtemp_tablespacesSHOW temp_tablespaces)。空白の場合、PostgreSQL はデフォルトのテーブルスペースを使用します。これは tempfs である可能性は低いですが、設定されている場合は、そのテーブルスペースがどこにあるかを確認してください。tempfs 上にある場合は、移動する必要がある場合があります。

また、何らかの理由でメインのテーブルスペースがいっぱいになっている可能性もありますが、現時点で使用率が 1% しかない場合、その可能性は非常に低くなります。おそらく、大規模に暴走する再帰的 CTE がそれを実行できますが、可能性は低いです。

クォータ管理も可能です。ファイルシステムのクォータが設定されている可能性がありますか?

于 2015-09-25T00:07:41.060 に答える