ホーム>source

私のプロジェクトでは、java8でspark-sql-2.3.1v、kafkaを使用しています。 と

<前>ウィズウィズ

コンシューマー側では、hdfsでファイルを書き込もうとしています 私はこのようなコードの下で何かを使用しています

<前>ウィズウィズ

hdfsフォルダーに保存すると、以下のようになります。つまり、各ファイルは約1.5k +、つまり数KBです。

<前>ウィズウィズ ウィズウィズ <前>ウィズウィズ

質問:

ウィズウィズ

新しい変更後 

<前>ウィズウィズ

実行に成功した結果は次のとおりです。

<前>ウィズウィズ --driver-memory 4g \ --driver-cores 2 \ --num-executors 120 \ --executor-cores 1 \ --executor-memory 768m \
あなたの答え
  • 解決した方法 # 1

    はい。小さなファイルはSparkの問題だけではありません。 NameNodeに不要な負荷がかかります。小さなファイルを処理するときにOOMを心配するよりも、大きなファイルを圧縮してアップロードすることに多くの時間を費やす必要があります。ファイルが64MB/128MB未満であるという事実は、Hadoopの使用が不十分であることを示しています。

    spark.read("hdfs://path").count() のようなもの  パス内のすべてのファイルを読み取り、データフレーム内の行をカウントします

    ハードセット番号はありません。ジョブでJMXモニタリングを有効にし、ヒープサイズが達している範囲を確認する必要があります。それ以外の場合は、OOMが取得されなくなるまで、ジョブに割り当てる現在のメモリを任意に2倍にします。 8 GBを超えるアプローチを開始する場合は、並列化を追加して、各ジョブで読み取るデータを減らすことを検討する必要があります。


    FWIW、Kafka Connectは、パーティション化されたHDFS/S3パスの出力にも使用できます。

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ javascript - dcjs:フィルタリング時に積み上げ棒グラフから空のビンを削除する