您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
大数据平台CDH和Impala的使用
 
作者:HuCheng1997
 
   次浏览      
2020-7-8 
 
编辑推荐:
本文首先介绍了CDH和Impala的概念,Impala 操作命令,其次对数据库操作和DML数据操作进行了阐述,最后进行示例查询,存储、压缩和优化。
本文来自CSDN,由火龙果软件Alice编辑、推荐。

一、CDH的介绍

Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称CDH),基于Web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 HBase、Zookeeper、Sqoop,简化了大数据平台的安装、使用难度。

Cloudera Manager的功能:

管理:对集群进行管理,如添加、删除节点等操作。

监控:监控集群的健康情况,对设置的各种指标和系统运行情况进行全面监控。

诊断:对集群出现的问题进行诊断,对出现的问题给出建议解决方案。

集成:多组件进行整合。

Cloudera Manager的架构:

Server:负责软件安装、配置,启动和停止服务,管理服务运行的群集。

Agent:安装在每台主机上。负责启动和停止的过程,配置,监控主机。

Management Service:由一组执行各种监控,警报和报告功能角色的服务。

Database:存储配置和监视信息。

Cloudera Repository:软件由Cloudera管理分布存储库。(类似Maven的中心仓库)

Clients:是用于与服务器进行交互的接口(API和Admin Console)

集群添加服务:

查看主机状况:

虽然状态全红,但是内存、CPU的状态都较好,并不影响服务的使用。

二、Impala概念

2.1 什么是Impala

Cloudera公司推出,提供对HDFS、HBase数据的高性能、低延迟的交互式SQL查询功能。基于Hive,使用内存计算,兼顾数据仓库、具有实时、批处理、多并发等优点。是CDH平台首选的PB级大数据实时查询分析引擎。

2.2 Impala的优缺点

优点:

基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销

无需转换为MapReduce,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快

使用了支持Data locality的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销

支持各种文件格式,如TEXTFILE 、SEQUENCEFILE、RCFile、Parquet

可以访问Hive的metastore,对Hive数据直接做数据分析

缺点:

对内存的依赖大,且完全依赖于Hive

实践中,分区超过1万,性能严重下降

只能读取文本文件,而不能直接读取自定义二进制文件

每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新

2.3 Impala的架构

从上图可以看出,Impala自身包含三个模块:Impalad、Statestore和Catalog,除此之外它还依赖Hive Metastore和HDFS。

Impalad:接收client的请求、Query执行并返回给中心协调节点;子节点上的守护进程,负责向Statestore保持通信,汇报工作。

Catalog:分发表的元数据信息到各个impalad中,接收来自Statestore的所有请求。

Statestore:负责收集分布在集群中各个impalad进程的资源信息、各节点健康状况,同步节点信息;负责query的协调调度。

2.4 Impala的数据类型

注意:Impala虽然支持Array,Map,Struct复杂数据类型,但是支持并不完全,一般处理方法,将复杂类型转化为基本类型,通过Hive创建表。

三、Impala 操作命令

3.1 Impala的外部shell

①连接指定hadoop101的impala主机

[root@hadoop100 datas]# impala-shell -i hadoop101

②使用-q查询表中数据,并将数据写入文件中

[root@hadoop100 datas]# impala-shell -q 'select * from student' -o output.txt

③查询执行失败时继续执行

[root@hadoop100 datas]# vim impala.sql
select * from student;
select * from stu;
select * from student;
[root@hadoop100 datas]# impala-shell -f impala.sql;
[root@hadoop100 datas]# impala-shell -c -f impala.sql;

④在Hive中创建表后,使用-r刷新元数据

hive> create table stu(id int, name string);
[hadoop100:21000] > show tables;
Query: show tables
+---------+
| name |
+---------+
| student |
+---------+
[root@hadoop100 ~]$ impala-shell -r
[hadoop100:21000] > show tables;
Query: show tables
+---------+
| name |
+---------+
| stu |
| student |
+---------+

⑤显示查询执行计划

[root@hadoop100 datas]# impala-shell -p
[hadoop100:21000] > select * from student;

⑥去格式化输出

[root@hadoop100 ~]# impala-shell -q 'select * from student' \
-B --output_delimiter="\t" -o output.txt

3.2 Impala的内部shell

①查看执行计划

[hadoop100:21000] > explain select * from student;

②查询最近一次查询的底层信息

[hadoop100:21000] > select count(*) from student;
[hadoop100:21000] > profile;

③查看HDFS及Linux文件系统

[hadoop100:21000] > shell hadoop fs -ls /;
[hadoop100:21000] > shell ls -al ./;

④刷新指定表的元数据

hive> load data local inpath '/opt/module/datas/student.txt' into table student;
[hadoop100:21000] > select * from student;
[hadoop100:21000] > refresh student;
[hadoop100:21000] > select * from student;

⑤查看历史命令

[hadoop100:21000] > history;

四、DDL数据定义

4.1 数据库操作

创建数据库:

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path];

显示数据库:

[hadoop100:21000] > show databases like 'hive*';
Query: show databases like 'hive*'
+---------+---------+
| name | comment |
+---------+---------+
| hive_db | |
+---------+---------+
[hadoop100:21000] > desc database hive_db;
Query: describe database hive_db
+---------+----------+---------+
| name | location | comment |
+---------+----------+---------+
| hive_db | | |
+---------+----------+---------+

删除数据库:

[hadoop103:21000] > drop database hive_db;
[hadoop103:21000] > drop database hive_db cascade;

加cascade删除非空数据库;

Impala不支持alter database语法;

当数据库被use语句选中时,无法删除。

4.2 表操作

创建表:

[hadoop100:21000] > create external table stu_external(id int, name string)
> row format delimited fields terminated by '\t' ;

创建分区表:

[hadoop100:21000] > create table stu_par(id int, name string)
> partitioned by (month string)
> row format delimited fields terminated by '\t';

向分区表中导入数据:

[hadoop100:21000] > alter table stu_par add partition (month='201810');
[hadoop100:21000] > load data inpath '/student.txt' into table stu_par \
partition(month='201810');

注意:如果分区没有,load data导入数据时,不能自动创建分区。

查询分区表中的数据:

[hadoop100:21000] > select * from stu_par where month = '201810';

增加多个分区:

[hadoop103:21000] > alter table stu_par add partition (month='201812') \
partition (month='201813');

删除分区:

[hadoop103:21000] > alter table stu_par drop partition (month='201812');

查看分区:

[hadoop103:21000] > show partitions stu_par;

五、DML数据操作

数据导入(基本同hive类似)

注意:Impala不支持load data local inpath…,支持从HDFS中导入

数据的导出

Impala不支持insert overwrite…语法导出数据

Impala数据导出一般使用impala -o

[root@hadoop100 ~]# impala-shell -q 'select * from student' \
-B --output_delimiter="\t" -o output.txt

Impala不支持export和import命令

六、查询

基本的语法跟Hive的查询语句大体一样

Impala不支持CLUSTER BY, DISTRIBUTE BY, SORT BY

Impala中不支持分桶表

Impala不支持COLLECT_SET(col)和explode(col)函数

Impala支持开窗函数

[hadoop100:21000] > select name,orderdate,cost,sum(cost) over(partition by \
month(orderdate)) from business;

七、存储和压缩

注:Impala不支持ORC格式

创建Parquet格式的表并插入数据进行查询

[hadoop100:21000] > create table student2(id int, name string)
> row format delimited
> fields terminated by '\t'
> stored as PARQUET;
[hadoop100:21000] > insert into table student2 values(1001,'zhangsan');
[hadoop100:21000] > select * from student2;

创建SequenceFile格式的表,插入数据时报错

[hadoop100:21000] > create table student3(id int, name string)
> row format delimited
> fields terminated by '\t'
> stored as sequenceFile;
[hadoop100:21000] > insert into table student3 values(1001,'zhangsan');
Query: insert into table student3 values(1001,'zhangsan')
Query submitted at: 2018-10-25 20:59:31 (Coordinator: http://hadoop104:25000)
Query progress can be monitored at: http://hadoop104:25000/query_plan?query_id=da4c59eb23481bdc:26f012ca00000000
WARNINGS: Writing to table format SEQUENCE_FILE is not supported. Use query option ALLOW_UNSUPPORTED_FORMATS to override.
[hadoop100:21000] > set ALLOW_UNSUPPORTED_FORMATS=true;
[hadoop100:21000] > insert into table student3 values(1001,'zhangsan');

八、优化

尽量将StateStore和Catalog单独部署到同一个节点,保证它们正常通信;

通过对Impala Daemon内存限制(默认256M)及StateStore工作线程数,来提高Impala的执行效率;

SQL优化,使用之前调用执行计划;

选择合适的文件格式进行存储,提高查询效率;

避免产生很多小文件(如果有其他程序产生的小文件,可以使用中间表,将小文件数据存放到中间表。然后通过insert…select…方式中间表的数据插入到最终表中);

使用合适的分区技术;

使用compute stats进行表信息搜集,当一个内容表或分区明显变化,重新计算统计相关数据表或分区。因为行和不同值的数量差异可能导致impala选择不同的连接顺序时进行查询。

[hadoop100:21000] > show table stats student;

使用profile输出底层信息计划,在做相应环境优化;

网络io的优化:① 避免把整个数据发送到客户端 ② 尽可能的做条件过滤 ③ 使用limit字句 ④ 输出文件时,避免使用美化输出 ⑤ 尽量少用全量元数据的刷新

 
   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训
最新活动计划
Node+Vue3.0前端全栈开发 7-5 [特惠]
Spring Cloud微服务架构 7-5[特惠]
SysML和EA系统设计与建模 7-26[特惠]
Python、数据分析与机器学习 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
Linux内核编程及设备驱动 7-25[北京]
 
最新文章
大数据平台下的数据治理
如何设计实时数据平台(技术篇)
大数据资产管理总体框架概述
Kafka架构和原理
ELK多种架构及优劣
最新课程
大数据平台搭建与高性能计算
大数据平台架构与应用实战
大数据系统运维
大数据分析与管理
Python及数据分析
更多...   
成功案例
某通信设备企业 Python数据分析与挖掘
某银行 人工智能+Python+大数据
北京 Python及数据分析
神龙汽车 大数据技术平台-Hadoop
中国电信 大数据时代与现代企业的数据化运营实践
更多...