記事ディレクトリ
データ テーブルを作成する
/opt/datafiles/dept.txt
10 ACCOUNTING 1700
20 RESEARCH 1800
30 SALES 1900
40 OPERATIONS 1700
/opt/datafiles/emp.txt
7369 SMITH CLERK 7902 1980-12-17 800.00 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-4-2 2975.00 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
7839 KING PRESIDENT 1981-11-17 5000.00 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
7900 JAMES CLERK 7698 1981-12-3 950.00 30
7902 FORD ANALYST 7566 1981-12-3 3000.00 20
7934 MILLER CLERK 7782 1982-1-23 1300.00 10
create external table if not exists dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';
create external table if not exists emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)
row format delimited fields terminated by '\t';
load data local inpath '/opt/datafiles/dept.txt' into table dept;
load data local inpath '/opt/datafiles/emp.txt' into table emp;
実行計画
ステートメントの実行計画を表示する
MR タスクは生成されません
explain select * from emp;
生成された MR タスクがあります
explain select deptno,avg(sal) avg_sal from emp group by deptno;
詳細な実行計画を表示
explain extended select * from emp;
explain extended select deptno,avg(sal) avg_sal from emp group by deptno;
フェッチクロール
フェッチ キャプチャとは、特定の状況で Hive のクエリが MapReduce 計算を使用する必要がないことを意味します。例:SELECT * FROM employees;
この場合、Hive は単に従業員に対応するストレージ ディレクトリ内のファイルを読み取り、クエリ結果をコンソールに出力できます。
In the hive-default.xml.template file, hive.fetch.task.conversion defaults to more, and the old version of hive defaults tominimal. この属性が more に変更されると、mapreduce はグローバル検索に使用されなくなります。検索、限定検索。
応用
(1) hive.fetch.task.conversion を none に設定してクエリ文を実行すると、mapreduce プログラムが実行されます。
set hive.fetch.task.conversion=none;
select * from emp;
select ename from emp;
select ename from emp limit 3;
都会执行mapreduce程序。
(2) hive.fetch.task.conversion を more に設定してクエリ文を実行する 以下のクエリメソッドは mapreduce プログラムを実行しません。
set hive.fetch.task.conversion=more;
select * from emp;
select ename from emp;
select ename from emp limit 3;
都不会执行mapreduce程序。
ローカルモード
ほとんどの Hadoop ジョブでは、大規模なデータ セットを処理するために、Hadoop が提供する完全なスケーラビリティが必要です。ただし、Hive への入力データの量が非常に少ない場合があります。この場合、クエリの実行タスクのトリガーには、実際のジョブの実行時間よりもはるかに長い時間がかかる場合があります。これらのほとんどの場合、Hive はローカル モードで単一のマシン上のすべてのタスクを処理できます。小さなデータセットの場合、実行時間を大幅に短縮できます。ユーザーは、 Hive が適切なタイミングでこの最適化を自動的に開始できるように値を
設定できます。(1) ローカルモードをオンにしてクエリ文を実行するhive.exec.mode.local.auto
true
set hive.exec.mode.local.auto=true;
select * from emp cluster by deptno;
14 rows selected (8.13 seconds)
(2) ローカルモードを終了し、クエリ文を実行
set hive.exec.mode.local.auto=false;
select * from emp cluster by deptno;
14 rows selected (38.737 seconds)
時間のかかるギャップが明らかであることがわかります
テーブルの最適化
(完成予定)