2017-11-08 5 views
0

jsonの集約クエリの実行パフォーマンスを向上させるのに役立つ必要があります。Apache Drill JSONクエリのパフォーマンス

私の単純なcount(*) jsonでの集約クエリは、わずか640MBのデータで完了するのに11分かかります。

私は1つのノードクラスタ(8コア、8GB RAM、ローカルSSDストレージを使用)を持っています。

データの統計:

  • 163783 JSONファイル
  • ドリルUIから

合計640メガバイト私は、以下を参照してくださいすることができます

DURATION: 11 min 27.665 sec 
*PLANNING*: 06 min 30.337 sec 
QUEUED: Not Available 
EXECUTION: 04 min 57.328 sec 
何ができる

私パフォーマンスを向上させるには?読み取りパフォーマンスを向上させるには、jsonファイルの記憶域や圧縮を変更する必要がありますか?

+1

jsonファイルをマージして、その動作を確認できますか? 163,783個のjsonファイルの数がHadoopの小ファイル問題のようです。例のようにファイルをマージすることができます - https://drill.apache.org/docs/json-data-model/#ticket_sales.json-contents。 – InfamousCoconut

答えて

1

物事のカップル:

としては、そのような小さなデータセットのために、多数のファイルで指摘しました。私は通常、ドリルが、100-200MBの範囲のファイルで、全体のデータセットのサイズとユースケースを考慮して作業することが最も効果的であると感じています。それから、JSONの複雑さとクエリ、システムのスピードを待って、通常、コア当たり約100〜200MB/sで処理することができます。

ドリルを使用して、データセット上の小さなファイルセットを作成し、現在のデータセットでCTASを実行し、そのフォーマットをJSONに設定できます。また、store.json.writer.uglifyをtrueに設定すると、よりコンパクトなJSONをより少ない空白で(ただし人間が読むことは少なく)書き込むことになります。または、現在のファイルを別のツールで約100〜200MBのファイルに簡単にマージします。

JSONのカウント()はそれほど簡単ではありません。レコードの総数を理解しようとしている場合、すべてのレコードに存在するフィールドを選択して、そのフィールドのカウントを具体的に行うことができます。 flattenのようなネストした操作を行う必要がある場合でも、すべてのレコードに存在するフィールドを選択できます。 JSONデータの単純なカウント()よりも優れていて信頼性が高いことがわかりました。

関連する問題