Hive-アジャスト、Fetchキャプチャ、ローカルモード

13670 ワード

Hive-アジャスト、Fetchキャプチャ、ローカルモード
記事の目次
  • Higve-アジャスト、Fetchキャプチャ、ローカルモード
  • Fetchキャプチャ
  • ローカルモード
  • Fetchキャプチャ
    Fetchキャプチャとは、Hiveにおけるいくつかの状況に対するクエリーは、MapReduceを用いて計算する必要がないことができるということです。例えば、SELECT * FROM emp;は、この場合、Hiveは、empに対応する記憶ディレクトリのファイルを簡単に読み取って、検索結果をコンソールに出力することができる。hive.fetch.task.conversionデフォルトはmoreで、古いバージョンHiveはデフォルトはminimalです。
  • none:どんなクエリーを実行してもmapreduce
  • を通ります。
  • minimal:グローバル検索(select*)、フィールド検索、limitはmapreduceを逸脱しないで、パーティションフィールドを追加せずに実行するとMR
  • に進みます。
  • more:大域検索(select*)、フィールド検索、limitは実行しない
    <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)