2つのテーブルの結合でのSparkパフォーマンスの問題

ミカイルN

spark.sqlで結合したい2つの大きなHiveテーブルがあります。テーブル1とテーブル2があり、テーブル1に500万行、テーブル2に7000万行があるとします。テーブルはスナップ形式であり、Hiveに寄木細工のファイルとして保存されます。

それらを結合して、いくつかの列でいくつかの集計を行いたいと思います。たとえば、2つの条件(col1、col2など)でフィルタリングしながら、すべての行と列の平均(doubleColumnなど)をカウントします。

注:私は単一のマシンでのテストインストールで作業しています(ただし、これは非常に強力です)。おそらくクラスター内ではパフォーマンスが異なると思います。

私の最初の試みは、次のようなsparksqlを使用することです。

 val stat = sqlContext.sql("select count(id), avg(doubleColumn) " +
                              " FROM db.table1 as t1 JOIN db.table2 " +
                              " ON t1.id = t2.id " + 
                              " WHERE col1 = val1 AND col2 = val2").collect

残念ながら、エグゼキュータとドライバごとに少なくとも8 GBのメモリを割り当てた場合でも、これは約5分で非常に不十分に実行されます。また、データフレーム構文を使用して、最初に行をフィルタリングし、次のような選択性を高めるために特定の列のみを選択しようとしました。

//Filter first and select only needed column
val df = spark.sql("SELECT * FROM db.tab1")
val tab1= df.filter($"col1" === "val1" && $"col2" === "val2").select("id")

val tab2= spark.sql("SELECT id, doubleColumn FROM db.tab2")
val joined = tab1.as("d1").join(tab2.as("d2"), $"d1.id" === $"d2.id") 

//Take the aggregations on the joined df
import org.apache.spark.sql.functions;

joined.agg(
   functions.count("id").as("count"),
   functions.avg("doubleColumn").as("average")
).show();

ただし、これによるパフォーマンスの大幅な向上はありません。参加のパフォーマンスを向上させるにはどうすればよいですか?

  • このspark.sqlまたはデータフレーム構文を実行するための最良の方法はどれですか?

  • より多くのエグゼキュータまたはメモリを与えることは助けになりますか?

  • キャッシュを使用する必要がありますか?
    私は両方のデータフレームtab1、tab2をキャッシュし、結合集約は大幅に向上しましたが、多くのユーザーが同時にいくつかの分析クエリを要求する同時実行に関心があるため、データフレームをキャッシュすることは実用的ではないと思います。

  • 単一ノードで作業していて、クラスター上の実稼働環境に移動すると問題が解決するため、何もする必要はありませんか?

ボーナス質問: Impalaでこのクエリを試したところ、約40秒かかりましたが、spark.sqlよりもはるかに優れていました。インパラはどうして火花よりも優れているのでしょうか?!

user9033039

このspark.sqlまたはデータフレーム構文を実行するための最良の方法はどれですか?

違いはありません。

より多くのエグゼキュータまたはメモリを与えることは助けになりますか?

問題の原因がデータの偏りではなく、構成を正しく調整した場合のみ。

キャッシュを使用する必要がありますか?

入力データが複数回再利用される場合は、パフォーマンスの観点から(すでに決定したように)推奨される場合があります。

単一ノードで作業していて、クラスター上の実稼働環境に移動すると問題が解決するため、何もする必要はありませんか?

一般に、単一ノードでのパフォーマンステストはまったく役に立ちません。ボトルネック(ネットワークIO /通信)と利点(償却されたディスクI / Oとリソース使用量)の両方を見逃しています。

ただし、parallelsm(spark.sql.shuffle.partitionssql.default.parallelismおよび入力分割サイズの増加)を大幅に減らすことができます負荷を分散するように設計されたCounterintuitivSparkスタイルの並列処理は、資産というよりも、単一のマシンでの責任です。通信はシャッフル(ディスク書き込み!)に依存しているため、共有メモリに比べて処理が非常に遅くなり、スケジューリングのオーバーヘッドが大きくなります。

インパラはどうして火花よりも優れているのでしょうか?!

これは、低レイテンシの同時クエリ用に特別に設計されているためです。これは、Spark(データベースとETLフレームワーク)の目標であったものではありません。

あなたとして

並行性に関心があるため、多くのユーザーが同時にいくつかの分析クエリを要求します。

Sparkは正しい選択のようには聞こえません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

EntityFrameworkでのテーブル結合のパフォーマンスの問題

分類Dev

varcharキーで複数のテーブルを結合する-MYSQL:パフォーマンスの問題

分類Dev

パフォーマンスの問題のために結合する際の一時テーブルの使用

分類Dev

myqsl結合パフォーマンス-3つのテーブルの結合

分類Dev

2つの結合された(UNION ALL)巨大なテーブルでのSELECTパフォーマンスの改善

分類Dev

SQL内部結合のパフォーマンスの問題

分類Dev

Postgresql 12:オーバーラップ演算子と非常に同じテーブルでの結合に関するパフォーマンスの問題

分類Dev

2つの合計問題に対する2つの異なる実装でのパフォーマンス

分類Dev

SQL結合サブクエリの問題/パフォーマンス

分類Dev

パンダの内部結合のパフォーマンスの問題

分類Dev

クエリに参加した単純な2つのテーブルでのMySQLのパフォーマンスの問題

分類Dev

ORACLE結合の複数のテーブルのパフォーマンス

分類Dev

ローカルでの大きなテキストファイルの結合に関連するパフォーマンスの問題

分類Dev

Mysqlの2つのテーブルの結合の問題

分類Dev

MySQL自己結合テーブル次/前の行のパフォーマンス

分類Dev

大きなテーブルでループを使用したPythonのパフォーマンスの問題

分類Dev

挿入を伴う大きなテーブルでのmysqlのパフォーマンスの問題

分類Dev

データフレームの2つの列間での操作中のパフォーマンスの問題

分類Dev

Oracleのパフォーマンスに関する質問、結合での内部選択、一時的なWITHテーブルのインデックス

分類Dev

最新の日付を見つけるためのサブクエリとの左側結合のパフォーマンスの問題

分類Dev

2つのテーブル結合とGroupByの問題

分類Dev

MYSQL:結合テーブルのパフォーマンスが遅い

分類Dev

Oracleテーブルのレコードを更新する際のEntityFrameworkのパフォーマンスの問題

分類Dev

Rのループのパフォーマンスの問題

分類Dev

カスタムIEqualityComparer +結合プロパティを使用したLINQgroupby-パフォーマンスの問題

分類Dev

Symfony2マルチテーブル結合の問題

分類Dev

2つの左結合のパフォーマンスの問題。unpivotの代替手段はありますか?

分類Dev

NOTINクエリでのSparkパフォーマンスの問題

分類Dev

パフォーマンスの問題

Related 関連記事

  1. 1

    EntityFrameworkでのテーブル結合のパフォーマンスの問題

  2. 2

    varcharキーで複数のテーブルを結合する-MYSQL:パフォーマンスの問題

  3. 3

    パフォーマンスの問題のために結合する際の一時テーブルの使用

  4. 4

    myqsl結合パフォーマンス-3つのテーブルの結合

  5. 5

    2つの結合された(UNION ALL)巨大なテーブルでのSELECTパフォーマンスの改善

  6. 6

    SQL内部結合のパフォーマンスの問題

  7. 7

    Postgresql 12:オーバーラップ演算子と非常に同じテーブルでの結合に関するパフォーマンスの問題

  8. 8

    2つの合計問題に対する2つの異なる実装でのパフォーマンス

  9. 9

    SQL結合サブクエリの問題/パフォーマンス

  10. 10

    パンダの内部結合のパフォーマンスの問題

  11. 11

    クエリに参加した単純な2つのテーブルでのMySQLのパフォーマンスの問題

  12. 12

    ORACLE結合の複数のテーブルのパフォーマンス

  13. 13

    ローカルでの大きなテキストファイルの結合に関連するパフォーマンスの問題

  14. 14

    Mysqlの2つのテーブルの結合の問題

  15. 15

    MySQL自己結合テーブル次/前の行のパフォーマンス

  16. 16

    大きなテーブルでループを使用したPythonのパフォーマンスの問題

  17. 17

    挿入を伴う大きなテーブルでのmysqlのパフォーマンスの問題

  18. 18

    データフレームの2つの列間での操作中のパフォーマンスの問題

  19. 19

    Oracleのパフォーマンスに関する質問、結合での内部選択、一時的なWITHテーブルのインデックス

  20. 20

    最新の日付を見つけるためのサブクエリとの左側結合のパフォーマンスの問題

  21. 21

    2つのテーブル結合とGroupByの問題

  22. 22

    MYSQL:結合テーブルのパフォーマンスが遅い

  23. 23

    Oracleテーブルのレコードを更新する際のEntityFrameworkのパフォーマンスの問題

  24. 24

    Rのループのパフォーマンスの問題

  25. 25

    カスタムIEqualityComparer +結合プロパティを使用したLINQgroupby-パフォーマンスの問題

  26. 26

    Symfony2マルチテーブル結合の問題

  27. 27

    2つの左結合のパフォーマンスの問題。unpivotの代替手段はありますか?

  28. 28

    NOTINクエリでのSparkパフォーマンスの問題

  29. 29

    パフォーマンスの問題

ホットタグ

アーカイブ