Hiveシリーズのパフォーマンスチューニング

ハイブのパフォーマンスチューニング

序文

Hiveは、ビッグデータのオフライン開発と使用に大きな割合を占めています。ハイブのチューニングに習熟していることは、すべてのビッグデータ実践者にとって基本的な要件です。

目次

  1. SQLの最適化
  2. データブロックサイズがパフォーマンスに与える影響
  3. JOINの最適化
  4. ストレージ形式がパフォーマンスに与える影響
  5. パーティションテーブルは同じテーブルに分割されます
  6. エンジン

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

おすすめ

転載: blog.csdn.net/dbc_zt/article/details/110229797