ハイブのチューニング (改善予定)

データ テーブルを作成する

/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.autotrue

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)

時間のかかるギャップが明らかであることがわかります

テーブルの最適化

(完成予定)

おすすめ

転載: blog.csdn.net/weixin_46322367/article/details/125031172