Hive-アジャスト、Fetchキャプチャ、ローカルモード
Hive-アジャスト、Fetchキャプチャ、ローカルモード
記事の目次 Higve-アジャスト、Fetchキャプチャ、ローカルモード Fetchキャプチャ ローカルモード Fetchキャプチャ
Fetchキャプチャとは、Hiveにおけるいくつかの状況に対するクエリーは、MapReduceを用いて計算する必要がないことができるということです。例えば、 none:どんなクエリーを実行してもmapreduce を通ります。 minimal:グローバル検索(select*)、フィールド検索、limitはmapreduceを逸脱しないで、パーティションフィールドを追加せずに実行するとMR に進みます。 more:大域検索(select*)、フィールド検索、limitは実行しない
(1)
ほとんどのHadoop Jobは、大きなデータセットを処理するためにHadoopが提供する完全な拡張性を必要とする。ただし、Hiveの入力データ量は非常に小さい場合があります。この場合、クエリのためのタスクの実行にかかる時間は、実際のjobの実行時間よりも多くなるかもしれない。このようなほとんどの場合、Hiveは、ローカルモードを介して、単一のマシンですべてのタスクを処理することができます。小さいデータセットでは、実行時間が著しく短縮されます。
ユーザは、
(1)ローカルモードをオープンし、クエリ文を実行する
記事の目次
Fetchキャプチャとは、Hiveにおけるいくつかの状況に対するクエリーは、MapReduceを用いて計算する必要がないことができるということです。例えば、
SELECT * FROM emp;
は、この場合、Hiveは、empに対応する記憶ディレクトリのファイルを簡単に読み取って、検索結果をコンソールに出力することができる。hive.fetch.task.conversion
デフォルトはmoreで、古いバージョンHiveはデフォルトはminimalです。<property>
<name>hive.fetch.task.conversionname>
<value>morevalue>
<description>
Expects one of [none, minimal, more].
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 incurs RS), lateral views and joins.
0. none : disable hive.fetch.task.conversion
1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
2. more : SELECT, FILTER, LIMIT only (support TABLESAMPLE and virtual columns)
description>
property>
実例テスト:(1)
hive.fetch.task.conversion
をminimmalに設定し、照会文を実行する。hive (default)> set hive.fetch.task.conversion=minimal;
-- MR
hive (default)> select * from logs;
hive (default)> select logid from logs;
hive (default)> select logid from logs limit 3;
-- MR
hive (default)> select * from logs where day='20200701';
hive (default)> select logid from logs where day='20200701';
hive (default)> select logid from logs where day='20200701' limit 3;
(2)hive.fetch.task.conversion
をmoreに設定し、以下のような照会方式ではmapredineプログラムは実行されない。hive (default)> set hive.fetch.task.conversion=more;
-- MR
-- MR
hive (default)> select * from logs;
hive (default)> select logid from logs;
hive (default)> select logid from logs limit 3;
-- MR
hive (default)> select * from logs where day='20200701';
hive (default)> select logid from logs where day='20200701';
hive (default)> select logid from logs where day='20200701' limit 3;
ローカルモードほとんどのHadoop Jobは、大きなデータセットを処理するためにHadoopが提供する完全な拡張性を必要とする。ただし、Hiveの入力データ量は非常に小さい場合があります。この場合、クエリのためのタスクの実行にかかる時間は、実際のjobの実行時間よりも多くなるかもしれない。このようなほとんどの場合、Hiveは、ローカルモードを介して、単一のマシンですべてのタスクを処理することができます。小さいデータセットでは、実行時間が著しく短縮されます。
ユーザは、
hive.exec.mode.local.auto
の値をtrueとすることにより、Hiveを適切な時に自動的にこの最適化を開始させることができる。-- MR
set hive.exec.mode.local.auto=true;
-- local mr , local mr , 134217728, 128M
set hive.exec.mode.local.auto.inputbytes.max=50000000;
-- local mr , local mr , 4
set hive.exec.mode.local.auto.input.files.max=10;
実例テスト:(1)ローカルモードをオープンし、クエリ文を実行する
hive (default)> set hive.exec.mode.local.auto=true;
hive (default)> select * from emp cluster by deptno;
Time taken: 1.328 seconds, Fetched: 14 row(s)
(2)ローカルモードをオフにし、クエリー文を実行します。hive (default)> set hive.exec.mode.local.auto=false;
hive (default)> select * from emp cluster by deptno;
Time taken: 20.09 seconds, Fetched: 14 row(s)