如何使用 Hadoop 提公升 Hive 查詢效能

2021-07-28 05:01:56 字數 2669 閱讀 3947

apache hive 是乙個 hadoop 之上構建起來的資料倉儲,用於資料的分析、彙總以及查詢。hive 提供了一種類 sql 的介面來查詢被儲存在各種資料來源和檔案系統中的資料。

apache tez engine 是一種用來構建高效能批處理與互動式資料處理的可擴充套件框架。在 hadoop 中它借助 yarn 實現協作。tez 通過提高處理速度來對 mapreduce 樣例進行提公升,並且保持著 mapreduce 向 pb 量級資料的擴充套件能了。

你可以通過在環境中將 hive.execution.engine 設定為 tez 來啟用 tez 引擎:

set hive.execution.engine=tez;

向量化(vectorization) 通過在一次操作中提取t 1024 行資料提公升效能,而不是一次只取一條。它提公升了像過濾, 聯合, 聚合等等操作的效能。

vectorization 可以通過在環境中執行如下命令而得到啟用。

set hive.vectorized.execution.enabled=true;

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

優化的行列格式(optimized row columnar)提供了通過借助比較原來節省 75% 資料儲存的格式來儲存hive資料的高效方法。當要對資料進行讀、寫以及處理操作時,orcfile 格式較 hive 檔案格式更優。它使用了像謂詞下推、壓縮以及更多其它的技術來提公升查詢的效能。

考慮有這樣兩個表: 雇員(employee)以及雇員詳情(employee_details), 這兩個表被儲存在乙個檔案檔案中。假如說我們要使用聯合來從兩個表取出詳情資料。

select a.employeeid, a.employeename, b.address,b.designation from employee a

join employee_details b

on a.employeeid=b.employeeid;

上面的查詢操作會花掉較長的時間, 因為資料是以文字形式儲存的。將該錶轉換成 orcfile  格式將會顯著減少查詢的執行時間。

create table employee_orc (employeeid int, employeename varchar(100),age int)

select * from employee insert into employee_orc;

create table employee_details_orc (employeeid int, address varchar(100)

,designation varchar(100),salary int)

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;

有了分割槽, 資料就可以被儲存在 hdfs 上的多個資料夾下。查詢時不回去查詢整個資料集,而是查詢分割槽的資料集。

hive 表被分割成許多分割槽而被叫做 hive 分割槽。hive 分割槽可以被進一步細分成卷或者桶,而被稱作是資料卷或者桶裝資料。

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;

hive 在向最終的執行提交之前會對每乙個查詢邏輯和物理執行計畫進行優化。不過,這樣的優化並非基於初始版本 hive 中的查詢操作的成本來進行的。

在 hive 的後續版本中,查詢已經根據查詢操作的成本(顯示會執行哪種型別的聯合,如何對聯合操作進行排序,並行的程度等等)進行了優化。

為了利用到基於成本的優化,在查詢的開始部分要設定好如下一些引數。

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 是一種非常強大的資料分析工具,而它也支援批量和可互動式的資料處理操作。它是資料分析師和資料科學家最常被用到的工具。當你在處理 pb 量級的資料時,知道如何提公升查詢操作的效能是非常重要的。

現在你就知道了如何去提公升 hive 查詢操作的效能!

如何使用MySQL提公升許可權

前不久網上公開了乙個mysql func的漏洞,講的是使用mysql建立乙個自定義的函式,然後通過這個函式來攻擊伺服器。最早看到相關的報道是在o otik上,但是公布的是針對unix系統的exploit,並且成功率也不是很高.而近期,國內有高手放出針對win系統的相關文章,於是我馬上找來與朋友一同研...

python 連線使用LDAP認證的hive

主要使用pyhive包。使用linux中的普通賬號,venv環境。python版本 3.6.4。ldap認證需要sasl包,在安裝sasl包的時候因為機器中沒有g 編譯器,導致無法安裝。因為我使用的普通賬號,沒法給伺服器安裝g 編譯器,解決的方案是在另一台機器中安裝sasl,將安裝完成後生成的.so...

如何提公升 TortoiseSVN 的使用效率

tortoisesvn 安裝好了之後會有個tsvncache.exe程式不斷在背景執行,進行本台電腦之中所有 subversion 工作目錄 working copy 的狀態快取 status cache 最主要的目的是讓你在執行 svn commit 或 svn update 的時候可以更迅速的進...