大數據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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...