大數據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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...