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

如何使用Hadoop提升Hive查詢性能

大數(shù)據(jù) Hadoop
Apache Hive 是一個 Hadoop 之上構建起來的數(shù)據(jù)倉庫,用于數(shù)據(jù)的分析、匯總以及查詢。Hive 提供了一種類 SQL 的接口來查詢被存儲在各種數(shù)據(jù)源和文件系統(tǒng)中的數(shù)據(jù)。

Apache Hive 是一個 Hadoop 之上構建起來的數(shù)據(jù)倉庫,用于數(shù)據(jù)的分析、匯總以及查詢。Hive 提供了一種類 SQL 的接口來查詢被存儲在各種數(shù)據(jù)源和文件系統(tǒng)中的數(shù)據(jù)。

使用 Tez Engine

Apache Tez Engine 是一種用來構建高性能批處理與交互式數(shù)據(jù)處理的可擴展框架。在 Hadoop 中它借助 YARN 實現(xiàn)協(xié)作。Tez 通過提高處理速度來對 MapReduce 樣例進行提升,并且保持著 MapReduce 向 PB 量級數(shù)據(jù)的擴展能了。

你可以通過在環(huán)境中將 hive.execution.engine 設置為 tez 來啟用 Tez 引擎:

set hive.execution.engine=tez;

利用矢量化( Vectorization)

矢量化(Vectorization) 通過在一次操作中提取t 1024 行數(shù)據(jù)提升性能,而不是一次只取一條。它提升了像過濾, 聯(lián)合, 聚合等等操作的性能。

Vectorization 可以通過在環(huán)境中執(zhí)行如下命令而得到啟用。

set hive.vectorized.execution.enabled=true;
set hive.vectorized.execution.reduce.enabled=true;

使用 ORCFile

優(yōu)化的行列格式(Optimized Row Columnar)提供了通過借助比較原來節(jié)省 75% 數(shù)據(jù)存儲的格式來存儲hive數(shù)據(jù)的高效方法。當要對數(shù)據(jù)進行讀、寫以及處理操作時,ORCFile 格式較 Hive 文件格式更優(yōu)。它使用了像謂詞下推、壓縮以及更多其它的技術來提升查詢的性能。

考慮有這樣兩個表: 雇員(employee)以及雇員詳情(employee_details), 這兩個表被存儲在一個文件文件中。假如說我們要使用聯(lián)合來從兩個表取出詳情數(shù)據(jù)。

Select a.EmployeeID, a.EmployeeName, b.Address,b.Designation from Employee a
Join Employee_Details b
On a.EmployeeID=b.EmployeeID;

上面的查詢操作會花掉較長的時間, 因為數(shù)據(jù)是以文本形式存儲的。將該表轉換成 ORCFile  格式將會顯著減少查詢的執(zhí)行時間。

Create Table Employee_ORC (EmployeeID int, EmployeeName varchar(100),Age int)
STORED AS ORC tblproperties("compress.mode"="SNAPPY");

Select * from Employee Insert into Employee_ORC;

Create Table Employee_Details_ORC (EmployeeID int, Address varchar(100)
                                  ,Designation Varchar(100),Salary int)
STORED AS ORC tblproperties("compress.mode"="SNAPPY");

Select * from Employee_Details Insert into Employee_Details_ORC;
Select a.EmployeeID, a.EmployeeName, b.Address,b.Designation from Employee_ORC a
Join Employee_Details_ORC b
On a.EmployeeID=b.EmployeeID;

ORC 支持壓縮 (ZLIB 和 Snappy), 還有解壓縮的存儲。

利用分區(qū)

有了分區(qū), 數(shù)據(jù)就可以被存儲在 HDFS 上的多個文件夾下。查詢時不回去查詢整個數(shù)據(jù)集,而是查詢分區(qū)的數(shù)據(jù)集。

創(chuàng)建臨時表并將數(shù)據(jù)導入臨時表

Create Table Employee_Temp(EmloyeeID int, EmployeeName Varchar(100), 
                           Address Varchar(100),State Varchar(100),
                           City Varchar(100),Zipcode Varchar(100))
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

LOAD DATA INPATH '/home/hadoop/hive' INTO TABLE Employee_Temp;

創(chuàng)建分區(qū)表

Create Table Employee_Part(EmloyeeID int, EmployeeName Varchar(100), 
                           Address Varchar(100),State Varchar(100),
                           Zipcode Varchar(100))
PARTITIONED BY (City Varchar(100))
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

創(chuàng)建動態(tài)的Hive分區(qū)

SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;

從臨時表向分區(qū)表導入數(shù)據(jù)

Insert Overwrite table Employee_Part Partition(City) Select EmployeeID,
EmployeeName,Address,State,City,Zipcode from Emloyee_Temp;

利用桶裝數(shù)據(jù)

Hive 表被分割成許多分區(qū)而被叫做 Hive 分區(qū)。Hive 分區(qū)可以被進一步細分成卷或者桶,而被稱作是數(shù)據(jù)卷或者桶裝數(shù)據(jù)。

Create Table Employee_Part(EmloyeeID int, EmployeeName Varchar(100), 
                           Address Varchar(100),State Varchar(100),
                           Zipcode Varchar(100))
PARTITIONED BY (City Varchar(100))
Clustered By (EmployeeID) into 20 Buckets
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

基于成本的查詢優(yōu)化

Hive 在向最終的執(zhí)行提交之前會對每一個查詢邏輯和物理執(zhí)行計劃進行優(yōu)化。不過,這樣的優(yōu)化并非基于初始版本 Hive 中的查詢操作的成本來進行的。

在 Hive 的后續(xù)版本中,查詢已經(jīng)根據(jù)查詢操作的成本(顯示會執(zhí)行哪種類型的聯(lián)合,如何對聯(lián)合操作進行排序,并行的程度等等)進行了優(yōu)化。

為了利用到基于成本的優(yōu)化,在查詢的開始部分要設置好如下一些參數(shù)。

set hive.cbo.enable=true;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.column.stats=true;
set hive.stats.fetch.partition.stats=true;

總結

Apache Hive 是一種非常強大的數(shù)據(jù)分析工具,而它也支持批量和可交互式的數(shù)據(jù)處理操作。它是數(shù)據(jù)分析師和數(shù)據(jù)科學家最常被用到的工具。當你在處理 PB 量級的數(shù)據(jù)時,知道如何提升查詢操作的性能是非常重要的。

現(xiàn)在你就知道了如何去提升 Hive 查詢操作的性能!

責任編輯:張燕妮 來源: 開源中國社區(qū)
相關推薦

2012-04-13 10:00:04

LINQ

2020-12-03 08:00:00

SQL數(shù)據(jù)庫MySQL

2011-08-24 11:22:38

SQL ServerUNION代替OR

2014-07-29 09:19:07

Hadoop

2009-02-18 20:27:24

組策略提升Windows性能

2024-09-19 08:09:37

MySQL索引數(shù)據(jù)庫

2021-09-27 08:16:38

Webpack 前端Cache

2023-08-15 08:32:09

yaraQA語法規(guī)則

2024-10-29 08:21:05

2014-04-01 09:52:46

MySQL

2023-05-22 14:19:48

索引Iceberg

2021-12-02 07:02:16

API性能設計

2011-11-30 21:59:41

ibmdwDojo

2025-03-28 08:35:00

2023-05-12 13:21:12

JMHJava程序

2023-03-01 15:14:48

數(shù)據(jù)集機器學習

2023-12-14 12:56:00

MongoDB數(shù)據(jù)庫優(yōu)化

2020-10-09 17:43:25

計算機CPU技術

2024-04-12 08:28:38

優(yōu)化查詢語句PostgreSQL索引

2023-11-14 18:04:26

SQL語句性能
點贊
收藏

51CTO技術棧公眾號