impala入门(一篇就够了)

简介: impala入门(一篇就够了)

01 引言


最近因为DataX需要集成impala,所以有必要学习下impala,本文来讲解下。

c493ceb00ac5448d8cf2dc0170180f10.png


02 impala概述


2.1 简介


简介:Impala是一个MPP(大规模并行处理)SQL查询引擎:


  • 是一个用C ++和Java编写的开源软件;
  • 用于处理存储在Hadoop集群中大量的数据;
  • 性能最高的SQL引擎(提供类似RDBMS的体验),提供了访问存储在Hadoop分布式文件系统中的数据的最快方法。


优点:


  • 使用impala,用户可以使用传统的SQL知识以极快的速度处理存储在HDFS、HBase和Amazon s3中的数据中的数据,而无需了解Java(MapReduce作业)。
  • 由于在数据驻留(在Hadoop集群上)时执行数据处理,因此在使用Impala时,不需要对存储在Hadoop上的数据进行数据转换和数据移动。


缺点:


  • 不提供任何对序列化和反序列化的支持;
  • 只能读取文本文件,而不能读取自定义二进制文件;
  • 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。


2.2 架构

cb4c8b6957294f629020459298ec4387.png


impala主要由以下三个组件组成:


  • Impala daemon(守护进程);
  • Impala Statestore(存储状态);
  • Impala元数据或metastore(元数据即元存储)。


下面来讲解下。


2.2.1 Impalad(守护进程)


daemon安装在Impala的每个节点上运行,它接受来自各种接口的查询,然后将工作分发到Impala集群中的其它Impala节点来并行化查询,结果返回到中央协调节。


可以将查询提交到专用Impalad或以负载平衡方式提交到集群中的另一Impalad


2.2.2 Statestore(存储状态)


Statestore负责检查每个Impalad的运行状况,然后经常将每个Impala Daemon运行状况中继给其他守护程序,如果由于任何原因导致节点故障的情况下,Statestore将更新所有其他节点关于此故障,并且一旦此类通知可用于其他Impalad,则其他Impala守护程序不会向受影响的节点分配任何进一步的查询。


2.2.3 metadata(元数据)/metastore(元存储)


Impala使用传统的MySQL或PostgreSQL数据库来存储表定义和列信息这些元数据。


当表定义或表数据更新时,其它Impala后台进程必须通过检索最新元数据来更新其元数据缓存,然后对相关表发出新查询。


03 impala 安装


详细安装方式可以参考:https://www.w3cschool.cn/impala/impala_environment.html


安装方式这里不会详解,大致讲一下流程:


  • 下载QuickStartVM
  • 下载cloudera-quickstart-vm-5.5.0-0-virtualbox.ovf文件后,我们需要使用虚拟盒导入
  • 然后启动Impala,打开终端并执行命令:impala-shell

04 impala 接口


Impala提供了三种方式去做查询处理:


  • Impala-shell :命令窗口中键入impala-shell命令来启动Impala shell;
  • Hue界面 :您可以使用Hue浏览器处理Impala查询;
  • ODBC / JDBC驱动程序 :与其他数据库一样,Impala提供ODBC / JDBC驱动程序。


在做查询处理之前,很有必要了解impala的数据类型:


数据类型 描述

微信截图_20221012093556.png


05 impala 查询处理


5.1 database


创建数据库:

-- 示例:
CREATE DATABASE IF NOT EXISTS database_name;


删除数据库:

-- 语法:
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT | 
CASCADE] [LOCATION hdfs_path];
-- 示例:
DROP DATABASE IF EXISTS sample_database;


选择数据库:

-- 语法:
USE db_name;


5.2 table


创建表:

-- 语法:
create table IF NOT EXISTS database_name.table_name (
   column1 data_type,
   column2 data_type,
   column3 data_type,
   ………
   columnN data_type
);
-- 示例:
CREATE TABLE IF NOT EXISTS my_db.student
   (name STRING, age INT, contact INT );


插入表:

-- 语法:
insert into table_name (column1, column2, column3,...columnN) values (value1, value2, value3,...valueN);
insert overwrite table_name values (value1, value2, value2);
-- 示例:
insert into employee (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Ramesh', 32, 'Ahmedabad', 20000 );
insert overwrite employee values (1, 'Ram', 26, 'Vishakhapatnam', 37000 );


查询表:

-- 语法:
SELECT column1, column2, columnN from table_name;
--示例:
select name, age from customers; 


表描述:

-- 语法:
describe table_name;
-- 示例:
describe customer;


修改表(重命名表案例,其它自行查阅):

-- 语法:
ALTER TABLE [old_db_name.]old_table_name RENAME TO [new_db_name.]new_table_name
-- 示例:
ALTER TABLE my_db.customers RENAME TO my_db.users;


删除表:

-- 语法:
DROP table database_name.table_name;
--示例:
drop table if exists my_db.student;


截断表:

-- 语法:
truncate table_name;
-- 示例:
truncate customers;


显示表:

show tables 


创建视图:

-- 语法:
Create View IF NOT EXISTS view_name as Select statement
-- 示例:
CREATE VIEW IF NOT EXISTS customers_view AS select name, age from customers;


修改视图:

-- 语法
ALTER VIEW database_name.view_name为Select语句
-- 示例
Alter view customers_view as select id, name, salary from customers;


删除视图:

-- 语法:
DROP VIEW database_name.view_name;
-- 示例:
Drop view customers_view;


5.3 条件


order by 子句:

--语法
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
--示例
Select * from customers ORDER BY id asc;


group by 字句:

-- 语法
select data from table_name Group BY col_name;
-- 示例
Select name, sum(salary) from customers Group BY name;


having 子句:

--语法
select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]
-- 示例
select max(salary) from customers group by age having max(salary) > 20000;


limit限制:

-- 语法:
select * from table_name order by id limit numerical_expression;


offset偏移:

-- 示例:
select * from customers order by id limit 4 offset 0;


union聚合:

-- 语法:
query1 union query2;
-- 示例:
select * from customers order by id limit 3
union select * from employee order by id limit 3;


with子句:

-- 语法:
with x as (select 1), y as (select 2) (select * from x union y);
-- 示例:
with t1 as (select * from customers where age>25), 
   t2 as (select * from employee where age>25) 
   (select * from t1 union select * from t2);


distinct去重:

-- 语法:
select distinct columns… from table_name;
-- 示例:
select distinct id, name, age, salary from customers; 


06 文末


本文主要讲解了impala的一些概念以及查询处理方式,谢谢大家的阅读,本文完!


目录
相关文章
|
SQL 人工智能 分布式计算
一文看懂 Cloudera 对 CDH/HDP/CDP 的产品支持策略
一文看懂 Cloudera 对 CDH/HDP/CDP 的产品支持策略
一文看懂 Cloudera 对 CDH/HDP/CDP 的产品支持策略
|
存储 SQL 缓存
Hadoop入门(一篇就够了)
Hadoop入门(一篇就够了)
40347 6
Hadoop入门(一篇就够了)
|
分布式计算 数据可视化 大数据
Hue--介绍、功能、架构 | 学习笔记
快速学习 Hue--介绍、功能、架构
3359 0
Hue--介绍、功能、架构 | 学习笔记
|
存储 分布式计算 Hadoop
impala入门(一篇就够了)
impala入门(一篇就够了)
861 0
|
SQL 存储 缓存
Hadoop-Impala优化十大指导原则和最佳实践(二)
简介: 以下是性能准则和最佳做法。您可以使用在规划过程中实验,和hadoop集群一起进行impala的性能调整。所有这些信息也可在文档的其他地方更详细的impala文档;以下是优化的方法措施,强调优化调优技术提供最高的投资回报
2034 0
|
12月前
|
SQL 存储 消息中间件
Trino权威指南
Trino(原Presto SQL)是一款开源分布式SQL查询引擎,专为大数据联邦查询设计。它支持秒级查询PB级数据,可无缝对接Hive、MySQL、Kafka等20+异构数据源。其核心特性包括高速查询、弹性扩展和低成本使用,适合交互式分析与BI场景。Trino采用无共享架构,通过列式内存格式和动态代码生成优化性能,并提供丰富的连接器实现计算存储分离,最大化下推优化以提升效率。
2021 3
|
存储 SQL 分布式计算
Apache Iceberg数据湖基础
Apache Iceberg 是新一代数据湖表格式,旨在解决传统数据湖(如 Hive)在事务性、并发控制和元数据管理上的不足。它支持 Spark、Flink、Trino 等多种计算引擎,提供 ACID 事务、模式演化、分区演化等核心特性,具备良好的云存储兼容性和高性能查询能力,适用于大规模结构化数据分析场景。
1968 0
|
SQL 分布式计算 关系型数据库
Sqoop入门(一篇就够了)
Sqoop入门(一篇就够了)
9095 3
Sqoop入门(一篇就够了)
|
SQL 分布式计算 Hadoop
Apache Hive 帮助文档
Apache Hive 帮助文档
892 9
|
运维 供应链 监控
一文带你了解什么是TOGAF?及TOGAF的应用?
TOGAF(The Open Group Architecture Framework)是由The Open Group组织开发的企业架构框架,提供了一套方法论、工具和术语,帮助企业设计、规划、实施和管理企业架构。其核心是架构开发方法(ADM),涵盖从架构愿景到实施的各个阶段。TOGAF支持跨部门协作、持续改进和项目成功,适用于新系统开发、系统升级、业务流程优化和组织变革管理等场景。
4966 1
一文带你了解什么是TOGAF?及TOGAF的应用?