自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇文章徹底掌握 Hive 中的 Order/Sort/Cluster/Distribute by和 Bucket 桶表

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
本篇文章,我們來(lái)總結(jié)下,HIVE 中的 order/sort/cluster/distribute by 和 BUCKET 桶表。

[[434538]]

大家好,我是明哥!

本片文章,我們來(lái)總結(jié)下,HIVE 中的 order/sort/cluster/distribute by 和 BUCKET 桶表

1 ORDER BY

  • ORDER BY 會(huì)對(duì) SQL 的最終輸出結(jié)果數(shù)據(jù)做全局排序;
  • ORDER BY 底層只會(huì)有一個(gè)Reducer 任務(wù) (多個(gè)Reducer無(wú)法保證全局有序);
  • 當(dāng)然只有一個(gè) Reducer 任務(wù)時(shí),如果輸入數(shù)據(jù)規(guī)模較大,會(huì)消耗較長(zhǎng)的計(jì)算時(shí)間;
  • ORDER BY 默認(rèn)的排序順序是遞增 ascending (ASC).
  • 示例語(yǔ)句:select distinct cust_id,id_no,part_date from ads_api_cda_basic_info_parquet_pt order by cust_id;

2 SORT BY

  • SORT BY 不是對(duì) SQL 的最終輸出結(jié)果數(shù)據(jù)做排序,而是對(duì) MAP 端的輸出數(shù)據(jù),在進(jìn)入 reducer 前,根據(jù)指定的字段進(jìn)行排序;
  • SORT BY 不會(huì)影響 REDUCER 的個(gè)數(shù);
  • SORT BY 只會(huì)保證每個(gè) reducer 內(nèi)部的數(shù)據(jù)的順序性,而不會(huì)保證 SQL 最終輸出結(jié)果的全局有序性;
  • 示例語(yǔ)句:select distinct cust_id,id_no,part_date from ads_api_cda_basic_info_parquet_pt SORT by cust_id;圖片

3 DISTRIBUTE BY

  • DISTRIBUTE BY 指定了將 MAP 端的輸出記錄交給哪個(gè) reducer 進(jìn)一步處理的分發(fā)規(guī)則;
  • DISTRIBUTE BY 不會(huì)影響 REDUCER 的個(gè)數(shù);
  • 具有相同的 Distribute By 字段的MAP端的輸出數(shù)據(jù),會(huì)被分發(fā)給同一個(gè) reducer 進(jìn)行處理 (默認(rèn)是采用hash取模算法);
  • Distribute By 并不會(huì)保證每個(gè) REDUCER 內(nèi)部的所有記錄的順序性;
  • 示例語(yǔ)句:select distinct cust_id,id_no,part_date from ads_api_cda_basic_info_parquet_pt distribute by cust_id;圖片

  • DISTRIBUTE BY 和 SORT BY 配合使用,可以保證每個(gè) REDUCER 內(nèi)部的所有記錄的順序性(此時(shí),Distribute By 分區(qū)字段 和 SORT BY 排序字段,可以是不同的字段);
  • 示例語(yǔ)句:select distinct cust_id,id_no,part_date from ads_api_cda_basic_info_parquet_pt distribute by cust_id sort by id_no;
  • DISTRIBUTE BY 和 SORT BY 配合使用,并選用合適的 DISTRIBUTE BY 字段,可以解決以下問(wèn)題:
    • Map輸出的文件大小不均;
    • Reduce輸出文件大小不均;
    • 小文件過(guò)多;
    • 文件超大;

4 CLUSTER BY

  • CLUSTER BY 等價(jià)于配合使用 DISTRIBUTE BY 和 SORT BY;
  • CLUSTER BY底層的 Distribute By 分區(qū)字段 和 SORT BY 排序字段,是同一個(gè)字段;
  • CLUSTER BY 不會(huì)影響 REDUCER 的個(gè)數(shù);
  • 示例語(yǔ)句:select distinct cust_id,id_no,part_date from ads_api_cda_basic_info_parquet_pt cluster by cust_id;

CLUSTER BY in spark web ui

5 BUCKET 桶表

HIVE中有 BUCKET 桶表,桶表具有以下優(yōu)勢(shì):

  • 桶表可以支持高效的 sampling 取樣;
  • 桶表對(duì)高效的 mapside joins 的支持更好;
  • 聲明桶表時(shí),需要指定分桶字段和桶的個(gè)數(shù)(CLUSTERED BY(user_id) INTO 31 BUCKETS);
  • 桶表的寫入操作,在底層執(zhí)行時(shí),會(huì)自動(dòng)添加 CLUSTER BY 子語(yǔ)句 以按桶表聲明時(shí)指定的分桶字段來(lái)分布數(shù)據(jù);(如果是 0.x 或 1.x 的 HIVE 版本,需要配置參數(shù) set hive.enforce.bucketing = true; HIVE 2.X 后,該參數(shù)被remove了,等價(jià)于總是TURE;)
  • 桶表的寫入操作,在底層執(zhí)行時(shí),會(huì)有reducer,且reducer的個(gè)數(shù),會(huì)自動(dòng)使用聲明桶表時(shí)指定的桶的個(gè)數(shù);(如果是 0.x 或 1.x 的 HIVE 版本,需要配置參數(shù) set hive.enforce.bucketing = true; HIVE 2.X 后,該參數(shù)被remove了,等價(jià)于總是TURE;)
  • 通過(guò)選用合適的分桶字段和分桶數(shù),桶表可以有效管控表底層的小文件的個(gè)數(shù),進(jìn)而緩解數(shù)據(jù)傾斜問(wèn)題和小文件問(wèn)題;
  • 使用桶表來(lái)緩解數(shù)據(jù)傾斜問(wèn)題和小文件問(wèn)題時(shí),所有的更改都在 DDL 這一層,不需要更改 DML 語(yǔ)句添加 CLUSTER/DISTRIBUTE BY 子語(yǔ)句,同時(shí)由于 DDL 是系統(tǒng)上線時(shí)或后續(xù)運(yùn)維優(yōu)化調(diào)整時(shí)的一次性的操作,增加了系統(tǒng)的彈性和運(yùn)維優(yōu)化的便利性;
  • 可以使用類似以下 DDL 語(yǔ)句來(lái)聲明 BUCKET 桶表,類似以下DML語(yǔ)句來(lái)操作桶表:
  1. ## DDL 
  2. CREATE TABLE bucket_tableA(user_id BIGINT, firstname STRING, lastname STRING) 
  3. COMMENT 'A bucketed copy of user_info' 
  4. PARTITIONED BY(ds STRING) 
  5. CLUSTERED BY(user_id) INTO 31 BUCKETS; 
  6. ## DML 
  7. INSERT OVERWRITE bucket_tableA select * from xx; 

INSERT OVERWRITE bucket_tableA SPARK WEB UI

 

責(zé)任編輯:武曉燕 來(lái)源: 明哥的IT隨筆
相關(guān)推薦

2024-06-25 08:18:55

2015-07-15 17:09:48

HiveHadoop分布式文件系統(tǒng)

2013-04-15 10:59:08

iOS開(kāi)發(fā)ARC版本說(shuō)明

2017-08-22 16:20:01

深度學(xué)習(xí)TensorFlow

2024-05-17 10:05:06

Java機(jī)制應(yīng)用

2025-01-26 15:38:11

Spring事務(wù)編程式

2017-07-20 16:55:56

Android事件響應(yīng)View源碼分析

2025-03-07 08:24:10

Javavolatilecount++

2019-07-23 08:55:46

Base64編碼底層

2021-04-07 13:28:21

函數(shù)程序員異步

2020-10-09 08:15:11

JsBridge

2021-11-30 20:12:00

FTP系統(tǒng)

2020-07-16 15:10:49

Pythonzip()可迭代對(duì)象

2016-07-01 14:55:07

開(kāi)源數(shù)據(jù)庫(kù)

2021-05-21 09:01:56

Python繼承多態(tài)

2021-05-18 09:00:28

Pythonclass

2021-08-12 14:19:14

Slice數(shù)組類型內(nèi)存

2024-05-10 08:19:59

arthasjava字節(jié)碼

2018-04-09 16:35:10

數(shù)據(jù)庫(kù)MySQLInnoDB

2021-11-12 07:43:34

版本HDFS工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)