大數據Hadoop之——基於Hive的記憶體型SQL查詢引擎Impala(Impala環境部署)

来源:https://www.cnblogs.com/liugp/archive/2022/05/19/16290791.html
-Advertisement-
Play Games

一、概述 Impala 直接針對存儲在 HDFS、HBase或 Amazon Simple Storage Service (S3)中的 Apache Hadoop 數據提供快速的互動式 SQL 查詢。Impala是一個基於Hive、分散式、大規模並行處理(MPP:Massively Paralle ...


目錄

一、概述

Impala 直接針對存儲在 HDFS、HBase或 Amazon Simple Storage Service (S3)中的 Apache Hadoop 數據提供快速的互動式 SQL 查詢Impala是一個基於Hive、分散式、大規模並行處理(MPP:Massively Parallel Processing)的資料庫引擎。除了使用相同的統一存儲平臺外,Impala 還使用與 Apache Hive 相同的元數據、SQL 語法(Hive SQL)、ODBC 驅動程式和用戶界面(Hue 中的 Impala 查詢 UI)。關於Hive的介紹,可以看我之前的文章:大數據Hadoop之——數據倉庫HiveImpala官方文檔

  • Impala 是可用於查詢大數據的工具的補充。Impala 不會替代基於 MapReduce 構建的批處理框架,例如 Hive。Hive 和其他基於 MapReduce 構建的框架最適合長時間運行的批處理作業,例如涉及提取、轉換和載入 (ETL) 類型作業的批處理。
  • Impala 於 2017 年 11 月 15 日從 Apache 孵化器畢業。在文檔中以前稱為“Cloudera Impala”的地方,現在正式名稱為“Apache Impala”。

1)Impala優點

  • 基於記憶體運算,不需要把中間結果寫入磁碟,省掉了大量的I/O開銷。
  • 無需轉換為Mapreduce,直接訪問存儲在HDFS, HBase中的數據進行作業調度,速度快。
  • 使用了支持Data locality的I/O調度機制,儘可能地將數據和計算分配在同一臺機器上進行,減少了網路開銷。
  • 支持各種文件格式,如TEXTFILE、SEQUENCEFILE、RCFile. Parqueto
  • 可以訪問hive的metastore,對hive數據直接做數據分析。

2)Impala缺點

  • 對記憶體的依賴大,且完全依賴於hive。
  • 實踐中,分區超過1萬,性能嚴重下降。
  • 只能讀取文本文件,而不能直接讀取自定義二進位文件。
  • 每當新的記錄/文件被添加到HDFS中的數據目錄時,該表需要被刷新。

二、Impala架構

1)Impala組件組成

一張圖帶你瞭解全貌:

下麵的概述更官方

1、Client

客戶端——包括 Hue、ODBC 客戶端、JDBC 客戶端和 Impala Shell 在內的實體都可以與 Impala 交互。這些介面通常用於發出查詢或完成管理任務,例如連接到 Impala。

2、Impalad

Impala的核心組件是Impala守護進程,它的物理代表是impalad進程。Impala守護進程的幾個關鍵功能是:

  • 讀寫數據文件。
  • 接受從impala-shell命令、Hue、JDBC或ODBC傳輸的查詢。
  • 並行化查詢併在集群中分配工作。
  • 將中間查詢結果傳回中央協調器。

【溫馨提示】

  • HDFS和Impala是共存的,每個Impala守護進程和DataNode運行在同一個主機上
  • Impala單獨部署在計算集群中,可以遠程從HDFS、S3、ADLS等讀取數據。

3、Statestore

Statestore服務主要負責metadata的廣播檢查集群中所有Impala守護進程的健康狀況,並不斷地將其發現傳遞給每一個這些守護進程。它在物理上由一個名為stateststored的守護進程表示。該進程只需要在集群中的一臺主機上運行。如果一個Impala守護進程由於硬體故障、網路錯誤、軟體問題或其他原因而離線,StateStore會通知所有其他的Impala守護進程,這樣以後的查詢就可以避免向這個不可達的Impala守護進程發出請求。

4、Catalog

Catalog 服務負責metadata的獲取和DDL的執行,將Impala SQL語句的元數據更改傳遞給集群中的所有Impala守護進程。它在物理上由一個名為catalogd的守護進程表示。該進程只需要在集群中的一臺主機上運行。因為請求是通過StateStore守護進程傳遞的,所以在同一主機上運行StateStore和Catalog服務是更好的。

當通過Impala發出的語句執行元數據更改時,catalog服務避免發出REFRESH和INVALIDATE METADATA語句。當你通過Hive創建表、載入數據等等時,在執行查詢之前,你需要在Impala守護進程上發出REFRESH或INVALIDATE元數據。

5、數據存儲服務

  • HBase或HDFS——用於存儲要查詢的數據。

2)Impalad服務的三種角色

Impala的核心進程Impalad,部署在所有的數據節點上,接收客戶端的查詢請求,讀寫數據,並行執行來自集群中其他節點的查詢請求,將中間結果返回給調度節點。調用節點將結果返回給客戶端。Impalad進程通過持續與StateStore通信來確認自己所在的節點是否健康以及是否可以接受新的任務請求。

  • Query Planner——Java編寫的,解析SQL生成QueryPlanTree執行計劃樹。
  • Query Coordinator——用戶在Impala集群上的某個節點提交數據處理請求(例如impala-shell提交SQL),則該Impalad節點稱為Coordinator Node(協調節點),負責定位數據位置,拆分請求(Fragment),將任務分解為多個可並行執行的小請求,發送這些請求到多個Query Executor,接收Query Executor處理後返回的數據並構建最終結果返回給用戶。
  • Query Executor——執行數據計算,比如scan,Aggregation,Merge等,返回數據。

3)Impala運行原理

1、啟動服務時執行的操作

2、查詢SQL的運行流程

3、數據計算流程

三、Impala環境部署(CDH集成)

這裡通過CM安裝方式集成到CDH,方便管理,CDH的安裝可以看我之前的文章:
大數據Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2環境部署)

1)添加服務


2)自定義角色分配

3)審核更改

下一步就進入自動安裝過程,時間有點久,耐心等待安裝完即可

4)安裝完成

5)啟動服務


6)驗證

$ impala-shell
show databases

四、Impala與其它對比

多用戶如下圖所示(引用自Apache Impala官網):

查詢吞吐率如下圖所示(引用自Apache Impala官網):

由上圖測試結果可知,對於單用戶查詢,Impala比其它方案最多快13倍,平均快6.7倍。對於多用戶查詢,差距進一步拉大:Impala比其它方案最多快27.4倍,平均快18倍。

五、Impala shell簡單使用

1)Impala 外部shell(非互動式)

標紅的就是常用的

選項 描述
-h, --help 顯示幫助信息
-v or --version 顯示版本信息
-i hostname, impalad=hostname 指定連接運行impalad守護進程的主機。預設埠是21000
-q query, --query=query 從命令行中傳遞一個shell命令。執行完這一語句後
shell會立即退出。非互動式
-f query_file,--query_file=query_file 傳遞一個文件中的SQL查詢。文件內容必須以分號分隔
-o filename or --output_file_filename 保存所有查詢結果到指定的文件。通常用於保存在命令行使用-q選項執行單個查詢時的查詢結果
-c 查詢執行失敗時繼續執行
-d default_db or --default_db=default_db 指定啟動後使用的資料庫,與建立連接後使用use語句選擇資料庫作用相同,如果沒有指定,那麼使用default資料庫d
-p, --show_profiles 對shell中執行的每一個查詢,顯示其查詢執行計劃
-r or --refresh_after_connect 建立連接後刷新 Impala 元數據,新版已經沒有這個參數了。換成這樣刷新:impala-shell -q "invalidate metadata",不刷新的話,就看不到新創建的庫表了。
-B (--delimited) 去格式化輸出
--output_delimiter=character 指定分隔符
--print_header 列印列名

操作都是很簡單,查看幫忙執行幾個例子演示一下就行,這就不再演示了。主要是sql操作,sql的話,懂編程的人,應該對sql不陌生,也不是很難。

2)Impala內部shell(互動式)

標紅的就是常用的

選項 描述
help 查看幫助信息
explain 顯示執行計劃
profile (查詢完成後執行)查詢最近一次查詢的底層信息
shell <shell> 不退出impala-shell執行shell命令
version 顯示版本信息(同於impala-shell -v)
connects 連接 impalad 主機,預設埠 21000(同於 impala-shell -i)
refresh <tablename> 增量刷新元資料庫
invalidate metadata 全量刷新元資料庫(慎用)
history 查看歷史命令

3)Impala數據類型

Hive數據類型 Impala數據類型 長度
TINYINT TINYINT 1 byte有符言整數
SMALINT SMALINT 2 byte有符號整數
INT INT 4 byte有符號整數
BIGINT BIGINT 8 byte有符號整數
BOOLEAN BOOLEAN 布爾類型,true或者false
FLOAT FLOAT 單精度浮點數
DOUBLE DOUBLE 雙精度浮點數
STRINGS STRINGS 字元系列。可以指定字元集。可以使用單引號或者雙引號。
TIMESTAMPS TIMESTAMPS 時間類型
BINARY 不支持 位元組數組

【溫馨提示】Impala雖然支持array, map, struct複雜數據類型,但是支持並不完全,一般處理方法,將複雜類型轉化為基本類型,通過hive創建表。

4)DDL數據定義

都是一些很基礎的操作

1、創建資料庫

create database db_name

【溫馨提示】Impala不支持WITH DBPROPERTIE...語法

2、查詢資料庫

show databases;

3、刪除資料庫

drop database db_name

【溫馨提示】Impala不支持修改資料庫(alter database )

4、創建表

create table if not exists student(id int,name string);
show tables;
desc student;
show create table student;

5、創建分區表

create table stu_partion(id int,name string) 
partitioned by (month string)
row format delimited
fields terminated by '\t'

show tables;

5)DML數據操作

1、向表中導數據

# 文件欄位一tab分隔,上面創建表時定義了分隔符
$ cat > /tmp/student.txt << EOF
1	stu1
2	stu2
3	stu3
4	stu4
EOF
$ sudo -u hdfs hadoop fs -put /tmp/student.txt /tmp/
# 授權,要不然沒有許可權
$ sudo -u hdfs hadoop fs -chown impala:hive /tmp/student.txt
$ impala-shell
# 【溫馨提示】hdfs集群上更改許可權之後,一定要記住登錄到impala-shell上使用invaladate metadata命令進行元數據更新,否則更改的許可權在impala狀態下是不生效的!!!,執行下麵這句就行了。
invalidate metadata;

# 添加分區
alter table stu_partion add partition (month='20220415');
# 刪除分區,這裡不執行
alter table stu_partion drop partition (month='20220415');

# 載入數據,載入完,這個文件/tmp/student.txt會被刪掉
load data inpath '/tmp/student.txt' into table stu_partion partition (month='20220415');

# 查看檢查
select * from stu_partion;

【溫馨提示】如果分區沒有,load data 導入數據時,不能自動創建分區。還有就是不能到本地數據,只能到hdfs上的數據。

2、數據導出

impala 數據導出一般使用impala -o

$ impala-shell -q 'select * from stu_partion' -B --output_delimiter="\t" -o output.txt

一般DML由hive來操作,impala負責查詢。

6)DQL數據查詢

  • 基本的語法跟hive的查詢語句大體一樣
  • Impala 不支持 CLUSTER DISTRIBUTE BY; SORT BY*
  • Impala中不支持分桶表
  • Impala 不支持 COLLECT_SET(col)和 explode (col)函數
  • Impala支持開窗函數

因為查詢sql跟mysql的一樣,所以這裡就不演示了。

7)函數

跟hive和mysql函數差不多,像count、sum等內置函數,當然也支持自定義函數。有興趣的小伙伴可以去練習一下,比較簡單。

impala的簡單使用就到這裡了,有疑問的話,歡迎給我留言,後續會更新更多關於大數據的文章,請耐心等待~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux下的可執行程式在運行時經常需要傳一些參數,而這些參數是有規範的。包括我們自己寫的在Linux系統下運行的Shell腳本、Python腳本等可執行程式,最好也遵循相關規範。我們下麵以Linux命令為例來講解參數規範。 中括弧[]並不存在於實際的命令中,表示該參數是可選的,而加入選項設置時,通... ...
  • 認識並安裝WSL(基於Windows的Linux子系統) 什麼是WSL WSL(Windows Subsystem for Linux),這是在windows平臺運行的linux子系統。也就是說可是不用安裝虛擬機的情況下獲得相對完整的linux系統體驗。 WSL相比於虛擬機(eg:VMware、Vi ...
  • sed sed命令 sed全稱是:Stream EDitor(流編輯器。 Linux sed 命令是利用腳本來處理文本文件,sed 可依照腳本的指令來處理、編輯文本文件。Sed 主要用來自動編輯一個或多個文件、簡化對文件的反覆操作、編寫轉換程式等。 當處理數據時,sed 從輸入源一次讀入一行,並將它 ...
  • 常用命令 sudo -i然後輸入密碼登錄root賬戶(群暉預設只能使用admin賬號登陸) vim xxx編輯(編輯是進去之後按i,退出並保存是按esc,然後:wq!再回車) mkdir xx創建文件夾 準備 1. 群暉一般預設安裝docker 我們不需要進行安裝,如果沒有安裝,則去套件中心進行安裝 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 你可以在虛擬機環境里運行任何操作系統,不論是測試還是為了某種需要。 對於 Linux 而言,它在虛擬環境下的性能會優於其他操作系統。即便你可能會猶豫是否在物理機(裸金屬)上安裝 Linux 系統,你仍然可以在虛擬機中安裝一個性能幾乎和物理機一樣好 ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 單片機將由串口收到的1位元組數據存入Flash ROM的指定地址;按下按鈕BTN,單片機將存儲在Flash ROM ...
  • 為什麼要使用Redwood Redwood是一個全棧web框架,旨在幫助你從副業項目發展到創業。Redwood的特色是一個端到端的開發工作流,它將React、GraphQL、Prisma、TypeScript、Jest和Storybook中最好的部分編織在一起。 RedwoodJS 是集成 、Pri ...
  • Termius是微軟的一款SSH終端工具,它支持多平臺。而且操作界面十分ha好看且簡潔,今天分享給大家❤️ 軟體下載 關註下方公眾號,回覆termius獲取下載地址 軟體功能介紹 Termius Mac破解版是一款非常好用而且漂亮的SSH客戶端,能快速遠程式控制制伺服器,可以定製自己喜歡的主題,支持FT ...
一周排行
    -Advertisement-
    Play Games
  • 一:背景 準備開個系列來聊一下 PerfView 這款工具,熟悉我的朋友都知道我喜歡用 WinDbg,這東西雖然很牛,但也不是萬能的,也有一些場景他解決不了或者很難解決,這時候藉助一些其他的工具來輔助,是一個很不錯的主意。 很多朋友喜歡在項目中以記錄日誌的方式來監控項目的流轉情況,其實 CoreCL ...
  • 本來閑來無事,準備看看Dapper擴展的源碼學習學習其中的編程思想,同時整理一下自己代碼的單元測試,為以後的進一步改進打下基礎。 突然就發現問題了,源碼也不看了,開始改代碼,改了好久。 測試Dapper.LiteSql數據批量插入的時候,耗時20秒,感覺不正常,於是我測試了非Dapper版的Lite ...
  • 需求如下,在DEV框架項目中,需要在表格中增加一列顯示圖片,並且能編輯該列圖片,然後進行保存等操作,最終效果如下 這裡使用的是PictureEdit控制項來實現,打開DEV GridControl設計器,在ColumnEdit選擇PictureEdit: 綁定圖片代碼如下: DataTable dtO ...
  • 前兩天微軟偷偷更新了Visual Studio 2022 正式版版本 17.3 發佈,發佈摘要: MAUI 工作負荷 GA 生成 MAUI/Blazor CSS 熱重載支持 現在,你將能夠使用我們的新增功能在 Visual Studio 中使用每個更新試用一系列新功能。 選擇每個功能以瞭解有關特定功 ...
  • 航天和軍工領域的數字化轉型和建設正在積極推進,在與航天二院、航天三院、航天六院、航天九院、無線電廠、兵工廠等單位交流的過程中,用戶更聚焦試驗和生產過程中的痛點,迫切需要解決軟體平臺統一監測和控制設備及軟體與設備協同的問題。 ...
  • .NET 項目預設情況下 日誌是使用的 ILogger 介面,預設提供一下四種日誌記錄程式: 控制台 調試 EventSource EventLog 這四種記錄程式都是預設包含在 .NET 運行時庫中。關於這四種記錄程式的詳細介紹可以直接查看微軟的官方文檔 https://docs.microsof ...
  • 一:背景 上一篇我們聊到瞭如何去找 熱點函數,這一篇我們來看下當你的程式出現了 非托管記憶體泄漏 時如何去尋找可疑的代碼源頭,其實思路很簡單,就是在 HeapAlloc 或者 VirtualAlloc 時做 Hook 攔截,記錄它的調用棧以及分配的記憶體量, PerfView 會將這個 分配量 做成一個 ...
  • 背景 在 CI/CD 流程當中,測試是 CI 中很重要的部分。跟開發人員關係最大的就是單元測試,單元測試編寫完成之後,我們可以使用 IDE 或者 dot cover 等工具獲得單元測試對於業務代碼的覆蓋率。不過我們需要一個獨立的 CLI 工具,這樣我們才能夠在 Jenkins 的 CI 流程集成。 ...
  • 一、應用場景 大家在使用Mybatis進行開發的時候,經常會遇到一種情況:按照月份month將數據放在不同的表裡面,查詢數據的時候需要跟不同的月份month去查詢不同的表。 但是我們都知道,Mybatis是ORM持久層框架,即:實體關係映射,實體Object與資料庫表之間是存在一一對應的映射關係。比 ...
  • 我國目前並未出台專門針對網路爬蟲技術的法律規範,但在司法實踐中,相關判決已屢見不鮮,K 哥特設了“K哥爬蟲普法”專欄,本欄目通過對真實案例的分析,旨在提高廣大爬蟲工程師的法律意識,知曉如何合法合規利用爬蟲技術,警鐘長鳴,做一個守法、護法、有原則的技術人員。 案情介紹 深圳市快鴿互聯網科技有限公司 2 ...