impala入门(一篇就够了)

Posted 阿甘兄_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了impala入门(一篇就够了)相关的知识,希望对你有一定的参考价值。


文章目录


01 引言

最近因为​​DataX​​​需要集成​​impala​​​,所以有必要学习下​​impala​​​,本文来讲解下。
impala入门(一篇就够了)_hdfs

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 架构

impala入门(一篇就够了)_数据_02

​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 ​​​impala入门(一篇就够了)_impala_03

04 impala 接口

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

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

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

数据类型

描述

BIGINT

此数据类型存储数值,此数据类型的范围为-9223372036854775808至9223372036854775807.此数据类型在create table和alter table语句中使用

BOOLEAN

此数据类型只存储true或false值,它用于create table语句的列定义

CHAR

此数据类型是固定长度的存储,它用空格填充,可以存储最大长度为255

DECIMAL

此数据类型用于存储十进制值,并在create table和alter table语句中使用

DOUBLE

此数据类型用于存储正值或负值4.94065645841246544e-324d -1.79769313486231570e + 308范围内的浮点值

FLOAT

此数据类型用于存储正或负1.40129846432481707e-45 … 3.40282346638528860e + 38范围内的单精度浮点值数据类型

INT

此数据类型用于存储4字节整数,范围从-2147483648到2147483647

SMALLINT

此数据类型用于存储2字节整数,范围为-32768到32767

STRING

这用于存储字符串值

TIMESTAMP

此数据类型用于表示时间中的点

TINYINT

此数据类型用于存储1字节整数值,范围为-128到127

VARCHAR

此数据类型用于存储可变长度字符,最大长度为65,535

ARRAY

这是一个复杂的数据类型,它用于存储可变数量的有序元素

Map

这是一个复杂的数据类型,它用于存储可变数量的键值对

Struct

这是一种复杂的数据类型,用于表示单个项目的多个字段

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, nameGit入门这一篇就够了

Git入门这一篇就够了

Git入门这一篇就够了

学习笔记C语言基础入门——这一篇就够了!

学习笔记C语言基础入门——这一篇就够了!

华为出品Python入门教程:从零基础入门到精通,这一篇就够了