1. ホーム
  2. hadoop

[解決済み】なぜHiveのFetchタスクはMapのみのタスクより速く動作するのですか?

2022-02-04 16:37:55

質問

単純なクエリのために、MapやMapReduceの代わりに、HiveでFetchタスクを有効にすることは可能ですか? hive.fetch.task.conversion パラメータを使用します。

Fetch タスクが Map よりもはるかに高速に実行される理由を説明してください。 select * from table limit 10; )? この場合、マップのみのタスクは何を追加で行っているのでしょうか?私の場合、20倍以上の性能差があります。どちらのタスクもテーブルのデータを読み込むはずですよね?

解決方法は?

FetchTaskは直接データを取得しますが、Mapreduceはマップリデュース・ジョブを呼び出します。

<property>
  <name>hive.fetch.task.conversion</name>
  <value>minimal</value>
  <description>
    Some select queries can be converted to single FETCH task 
    minimizing latency.Currently the query should be single 
    sourced not having any subquery and should not have
    any aggregations or distincts (which incurrs RS), 
    lateral views and joins.
    1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
    2. more    : SELECT, FILTER, LIMIT only (+TABLESAMPLE, virtual columns)
  </description>
</property>

また、もう1つのパラメータ hive.fetch.task.conversion.threshold 0.10-0.13ではデフォルトで-1、0.14では1G(1073741824)になっています。 これは、テーブルのサイズが1Gを超える場合、FetchタスクではなくMapreduceを使用することを示しています。

詳細