3

環境:

スパーク-1.2.0-ビン-hadoop2.4

spark-submit --class MyClass \
--master yarn-client \ 
 --num-executors 20 --executor-memory 5g \
--driver-memory 4g --executor-cores 4 \
 MyJar.jar

こんにちは、みんな、

最近、同じテーブルに参加するクエリを取得しました

SELECT columns_I_need
FROM
    ( 
        SELECT blablabla,column_for_join
        FROM a_huge_table
        WHERE common_expr AND expr_A
    ) a
LEFT JOIN

    ( 
        SELECT somethingelse,column_for_join
        FROM a_huge_table
        WHERE common_expr AND expr_B
    ) b
ON a.column_for_join = b.column_for_join
GROUP BY
columns_I_need

a_huge_table非常に巨大なものでありcolumn_for_join、インデックスを持っていません (私は DBA ではないので、私はそれを手伝うことができません - 彼らは拒否します)

このクエリは、Hive CLI (合計 200 未満のマッピングで 2 ステージ) で 3 ~ 5 分必要ですが、を使用するHiveContext.sql()と、非常に悪い方法で崩壊します -> 4 ステージ、30 分/ステージ。

を使用するspark.sql.codegenとステージ数が 2 に減りますが、各ステージの時間コストは減りません。このテーブルは 1 回しか使用されないため、HiveContext.CacheTable() はあまり役に立たないと思います。スパークで使用される方法は、ハイブでは多少異なると思います。

私はスパークソースを掘り下げようとしましたが、理解するのがHiveContext.sql(SqlText)難しいSchemaRDD(HiveContext, LogicalPlan_Created_by_Parser_using_SqlText )ことが分かりました: それから私は立ち往生しました。スパークがハイブからデータを取得する方法をまだ理解していません。SchemaRDDLikesqlContext.executePlanexecutedPlan.execute()SparkPlan.execute()SparkPlan.execute()SELECT

では、spark SQL はどのように機能するのでしょうか? Spark SQL をよりよく理解するために読むべきドキュメントはありますか?

ちなみにHiveContext().sql():SchemaRDDはなくなり、master ブランチのバージョンは になりHiveContext().sql():DataFrameました。彼らは物事をとても速く変えます。

4

0 に答える 0