KuduSpark_Impala 访问 Kudu | 学习笔记

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 快速学习 KuduSpark_Impala 访问 Kudu

开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第三阶段)KuduSpark_Impala 访问 Kudu学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/678/detail/11788


KuduSpark_Impala 访问 Kudu


上一课时介绍了很多和 Kudu 进行交互的方式,因为可能在业务系统中通过 java 来操作 Kudu,甚至在业务系统当中通过 python 来操作 Kudu,也可能会通过其他的语言来操作 Kudu,比如 C++ Kudu 对外提供了很多 API ,介绍了 java 如何操作 Kudu,因为 Kudu 里面存放很大量的数据,所以可能很多时候要使用 Spark 来操作 Kudu,所有介绍了如何使用 Spark.KuduContext 来进行表的一些数据定义,也介绍了如何进行增删改数据,以及如何使用 data frame 来进行 Kudu 的改和查。

Kudu Impala 都来自于同一个公司 ClouderaCloudera是大数据领域三驾马车当中的其中之一,在全球非常知名的一家做数据解决方案的公司,既然是同一个公司的产品,那么 Impala Kudu 经常需要来配合进行操作,在这之前还是要了解一下 Impala 的场景。

 

一、Impala 的场景

Impala 的作用并不是在业务系统或者在程序当中通过 JDBC 来访问的,主要作用并不是编写代码来通过 JDBC 访问的。Impala 提供 JDBC 的接口更大的意义可能是给外部系统进行整合和操作使用,不是直接写代码就操作了。Impala 主要是提供给数据分析人员来进行数据分析和查询的,Impala 的作用类似于 HiveImpala Hive 的区别,第一,Impala 速度比 Hive 要快得多,Hive 是直接使用 map reduce,使用这个样来执行调度哪操作 HDFS 上的文件,执行计划使用 MRImpala 有自己的执行计划,Impala 是一个 MPP 架构,MPP 又称之为大规模并行式数据库访问,MPP 架构往往会将节点分开,比如 MPP 架构当中会有很多节点,每个节点对应每个数据存储的位置。

image.png

首先在 MPP 架构上它首先对外提供一个 API 的服务器,可以称之为 API server,提供了一个 API  server 以后要大规模并行的去处理数据,可以把这个数据库拆成多份,每一份独立部署运行在不同的机器上,没有内存的共享的,当来一个请求的时候,它把请求分发给不同的数据库,然后它会集成很多数据库,这就称之为叫做 MPP 架构,而 Impala 就是这样的一个架构。Impala 对应了 HDFS

image.png

比如这是HDFS的一个 data node,这又是一个 data node,画三个 data node,接下来 Impala 就会运行多个 Impala D,这是第一个 Impala D,这是第二个Impala D,这是第三个 Impala DD 就是守护进程的意思,这样每个 Impala D 就对应了一个 data node,每一个 Impala D 就和一个 data node 进行交互。如果有一个客户端来访问 Impala的时候,比如这个东西称之为 Sell,那么 Sell 会访问其中某一个 Impala D,它把 SQL 语句传过来, SQL 语句会在某一个 Impala D 上被解析,随后被分发给其他的 Impala D,最后一起执行这个 SQL 语句,因为 Impala D 靠近了数据存储的位置,所以 SQL 就会得到大规模的并行被处理,并且 Impala 是使用 C++ 编写的,所以省去了 GC 的成本,省去垃圾处理机制的成本,那么 Impala 整体的性能比 hive 要高很多。

但是要注意,Hive 使用了 MRMR 专门为了大规模的数据处理分析而设计,也就是 MR 在数据规模上有显著优势,Impala 虽说能提升运行速度,但是有些时候1 G 的数据的查询,用 Impala 可能要比 Hive 快太多了,但是10 T 的数据用 Impala 也要执行很久,Impala 的架构决定了无法执行长时间的 SQL 语句。有一些数据量就是很大,用 Impala 也不能很快的处理完,就应该使用 hive,因为 Hive 在特别大的数据规模上有它的优势,Hive 首先数据吞吐量比较大,其次它能够更好的去处理数据,更好的支持大规模的数据处理,因为 hive 后面还有一个样,在早期的时候,hadoop1.0 阶段没有样这样的集群调度工具,hadoop 的规模怎么都做不上来,怎么做都感觉会有一点点别扭,那个时候的 hadoop架构跟现在的 Impala 会稍微相似,后来觉得问题出现在没有一个独立的集群管理工具,所以在 hadoop2.0 最重要的一个更新,就是拆开了 map reduse 和样,样作为独立的集群调度工具,样后来得到了非常长足的发展,所以 hadoop 在特别长时间的任务执行上,2.01.0有显著的优势,相比于 Impala 来说也会有显著的优势。所以 Impala Kudu 进行整合的目的是通过使用 Hive 表来操作 Kudu,要明确 Impala Hive 是强依赖关系,也就是没有 Hive , Impala 就装不到集群里,因为 Impala 依赖Hive MetastoreImpala 虽然也有自己的 Metastore,但还是依赖于 Hive Metastore,也就是 Hive 里面有一张表 Impala 是可以访问的,Impala 创建一张表 Hive 里面也有,所以它们之间的 Metastore 是相互的进行同步的。这就是 Impala Kudu 的整合,Impala Kudu 的整合的最主要目的就是使用 Impala 来访问 Kudu 当中的数据。要开启 Impala,使用 Impala  Shell 这个命令

[ root@cdh0l ~]# impala- shell

Starting Impala Shell without Kerberos authentication

Error connecting: TTransportException, Could not connect to cdh01. itcast.cn:21000

welcome to the Impala shell.

(Impala Shell v2.12.0-cdh5.16.1 (4a3775e) built on Wed Nov 21 21:02:28 PST 2018)

The SET command shows the current value of all shell and query options.

[Not connected] > connect cdh02;

Connected to cdh02: 21000

Server version:impaladversion2.12.0cdh5.16.1RELEASE(build4a3775ef6781301af81b23bca45a9faec a5e761d)

[cdh02:21000] create database kudu;

Query: create database kudu

ERROR: Analys isException: Syntax error in line 1

create database kudu

Encountered: KUDU

Expected: DEFAULT, EXTENDED, FORMATTED, IF, IDENTIFIER

CAUSED BY: Exception: Syntax error I

[ cdh02:21000] > create database kudu db;

Query: create database kudu db

Fetched 0 row(s) in 0.72s

[cdh02:21000] > show dataabases;

Query: show dataabases

ERROR: Analys isException: Syntax error in Line 1

show dataabases

Encountered: IDENTIFIER

Expected: AGGREGATE, ANALYTIC, COLUMN, CREATE, CURRENT, DATA, DATABASES, FILES, FUNCTIONS, GRANT, PARTITIONS, RANGE,

ROLE, ROLES, SCHEMAS, TABLETABLES

CAUSED BY: Exception: Syntax error

[cdh02:21000] > show databases ;

Query: show databases

Fetched 3 row(s) in 0.01s

[cdh02:21000] > use kudu_db;

Query: use kudu db

[cdh02:21000] > create external table students stored as kudu

>tblproperties()

>;

Query: create external table students stored as kudu

tblproperties ()

ERROR: AnalysisException: Syntax error in line 2:

tblproperties()

Encountered:( )

Expected: STRING LITERAL

CAUSED BY: Exception: Syntax error

[cdh02:21000] > create external table students stored as kudu

tblproperties( 'kudu. table name' = 'students'' kudu.masteraddresses'=cdh02:7051,cdh03: 7051, cdh01:7051');

Query: create external table students stored as kudu

tblproperties( 'kudu. table name' = 'students', ' kudu.masteraddresses'='cdh02:7051,cdh03: 7051,cdh01:7051' )

因为在 cdh01上没有运行 Impala D,也就是 Impala server,所以没有办法连接 cdh0121000这个端口,cdh1上没有,但是 cdh2上有,可以使用 connect cdh02来接上 Impala 连接 cdh02的端口,但是这个时候会说一个报错,无法连接 cdh02,可以进入到 cdh02上去启动 Impala D server,因为 Impala 有的时候会因为一些错误自动终止运行,那么再启动一下,启动它以后可能一开始会连不上,稍等个一分钟。连上了 cdh02,因为机型的配置稍微有点低,所以运行一阵后有可能会出现宕机的现象,如果出现了这种现象,那么就去重启 Impala server 的服务,就又可以被访问了,这是 Impala

接下来配合 Kudu 稍微做一个整合,其实只有一个 default 这样一个库,所以可以创建一个 database 叫做 Kudu,但是这个地方会稍微有一点问题,因为 Kudu 在这是一个关键字,所以它不让创建这样的一个数据库,可以create database kudu_db,再 show databasis,这个时候发现有一个 kudu db 这样的数据库了,那么就可以 use kudu_db,这个时候就使用了这样的一个数据库,之后可以在这个数据库当中去创建相应的连接 kudu 的一张 Impala 表。同时如果现在去 Hive 里面去查看的会发现 hive 里面也有这样的一个库,如果创建了一个表,hive 里面也有这张表,这个表其实存在于 hive Metastore 当中。可以这样来玩,首先 create external table,叫 students,然后 Stored as kudu,另起一行,可以设置 table propertiesTable properties 里至少要给如下的几个参数,第一要去指定 kudu table nametable name 就是 student,接下来逗号一下,指定 kudu mastermaster不指定也是可以的,不一定非要指定,之后是 master addressaddress 指定为 cdh02:7051cdh03:7051cdh01:7051,这个时候就创建了对应的 kudu 表。

回顾一下这就是非常标准的建表语句,首先 Create external table student,这个地方的符号是type 键,也就是1旁边的那一个符号,是一个点,不是一个引号,stored as kudu 就是一张 kudu 的表,设置一些参数,首先这个表名叫做 students,其次 Maste address 可以不设置,因为 Impala 的配置文件里面配置过了 kudu master,所以这张可以直接去创建,只需要等待它的创建完成即可。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
SQL 分布式计算 Hadoop
Hive使用Impala组件查询(1)
Hive使用Impala组件查询(1)
446 0
|
SQL 存储 NoSQL
Kudu 整合 impala-shell 操作 | 学习笔记
快速学习 Kudu 整合 impala-shell 操作
658 0
Kudu 整合 impala-shell 操作 | 学习笔记
|
7月前
|
SQL 存储 分布式计算
bigdata-29-Impala初步了解
bigdata-29-Impala初步了解
53 0
|
7月前
|
SQL 存储 固态存储
presto、impala、kudu相关优化整理
presto、impala、kudu相关优化整理
|
7月前
|
SQL 分布式计算 Hadoop
Apache Impala 的安装部署
Apache Impala 的安装部署
235 0
|
SQL 存储 Java
Hive使用Impala组件查询(2)
Hive使用Impala组件查询(2)
149 0
|
SQL 存储 分布式计算
Impala 架构了解
Impala 架构了解
Impala 架构了解
|
SQL XML 分布式计算
CDH 搭 建_Impala|学习笔记
快速学习 CDH 搭 建_Impala
493 0
CDH 搭 建_Impala|学习笔记
|
SQL Java 数据库连接
JDBC 操作 impala | 学习笔记
快速学习 JDBC 操作 impala
1032 0
JDBC 操作 impala | 学习笔记