ハイブのパフォーマンスチューニング
序文
Hiveは、ビッグデータのオフライン開発と使用に大きな割合を占めています。ハイブのチューニングに習熟していることは、すべてのビッグデータ実践者にとって基本的な要件です。
目次
- SQLの最適化
- データブロックサイズがパフォーマンスに与える影響
- JOINの最適化
- ストレージ形式がパフォーマンスに与える影響
- パーティションテーブルは同じテーブルに分割されます
- エンジン
SQLの最適化
- との使用
with構文はデータをメモリにクエリし、他のクエリを直接使用できます
-- with常用的几种方式
-- routine style
with a1 as ( select * from a where id between 1 and 20 )
select * from a1;
-- from style
with a1 as ( select * from a where id between 1 and 20 )
from a1
select *;
-- chaining CTEs
with c as ( select * from b where id between 5 and 10 ), -- 链式风格: 数据从a -> b -> c,b、c放内存中供查询
b as ( select * from a where id between 1 and 20 )
select * from c ;
-- union example
with a1 as (select id,name from a where id between 5 and 10),
b1 as (select id,name from b where id between 25 and 30)
select * from a1 union all select * from b1;
-- insert example
--create table b like a;-- 创建一张空表,相同表结构
create table b select * from a where 0 = 1; --创建一张空表,如果是分区表,会丢失分区分桶等信息,
with a1 as (select id, namefrom a where id between 1 and 20)
from a1
insert overwrite table b
select *;
-- ctas example (with 搭配 create table as select 建表语法)
create table b as
with a1 as (select id,name from a where id between 1 and 20)
select * from a1;
-- view example
create view v1 as
with a1 as (select id,name from a where id between 1 and 20)
select * from a1;
-- view example, name collision
create view v1 as
with a1 as (select id,name from a where id between 5 and 10)
select * from a1;
with b1 as (select id,name from a where id between 1 and 20)
select * from v1;
- 構文の使用法から
- 個別(count(1))およびcount(サブクエリによるグループ化)
データブロックサイズの最適化
すべて
JOINの最適化
mapendjoin
mapJoinの主な意味は、2つのリンクされたテーブルが比較的小さいテーブルと特に大きいテーブルである場合、小さいテーブルを直接メモリに配置し、大きいテーブルを比較してマップ操作を行うことです。結合はマップ操作中に発生します。大きなテーブルのデータをスキャンするときは常に、小さなテーブルのデータと一致するデータを確認してから接続する必要があります。ここでの結合には、reduce操作は含まれません。マップ側結合の利点は、シャッフルがないことです。これは素晴らしいことです。実際のアプリケーションでは、次のように設定します。
set hive.auto.convert.join=true;
共通の参加
共通結合はシャッフル結合とも呼ばれ、結合操作を減らします。この場合、2つのテーブルのサイズは同じですが、それほど大きくはありません。具体的なプロセスは、マップ側でデータを分割することです。ブロックはマップ操作に対応し、シャッフル操作が実行されます。対応するブロックはリデュース側にシャッフルし、それらを1つずつ結合します。ここでの利点は次のとおりです。パフォーマンスは推測によって影響を受ける可能性があります。これについては、後続のデータ傾斜で説明します。
SMBJoin
smbは、ソートマージバケット操作です。最初にソートされ、次にマージされてから、対応するバケットに配置されます。バケットは、ハイブのパーティションテーブルに似たテクノロジであり、キーに従ってハッシュし、同じハッシュ値を配置します。同じGoinbuckで。2つのテーブルを組み合わせる場合。最初にバケット化を実行し、結合によってパフォーマンスが大幅に最適化されます。つまり、和集合を実行するとき、table1の小さな部分がtable1の小さな部分と結合されます。テーブル和集合はすべて同等の接続です。同じキーが同じバケットに入れられ、結合されると、無関係なアイテムのスキャンが行われます。大幅に削減されます。
set hive.auto.convert.sortmerge.join=true;
set hive.optimize.bucketmapjoin = true;
set hive.optimize.bucketmapjoin.sortedmerge = true;
set hive.auto.convert.sortmerge.join.noconditionaltask=true;
参照
参照文書
ストレージフォーマットの最適化
すべて
パーティションテーブルバケットテーブル
すべて
エンジン
すべて
ハイブはスパークエンジンを使用しますhttps://www.cnblogs.com/lyy-blog/p/9598433.html