IMPALA部署和架构(一)

 一,概要

因公司业务需求,需要一个查询引擎满足快速查询TB级别的数据,所以我们找到了presto和impala,presto在前面讲过今天只说impala,impala是cloudera公司主导开发的新型查询系统,impala没有在使用缓慢的Hive+MapReduce批处理,而是通过使用商用并行的关系数据库类似的分布式查询引擎(由Query Planner,Query Coordinator和Query Exec Engine三部分组成),可以直接从HDFS 或者HBase中用SELECT,JOIN和统计函数查询数据,从而大大降低了延迟。并且impala在CDH中轻松部署、配置和维护。而且最重要的是impala查询速度快。这里使用impala的版本是v2.7.0-cdh5.10.0,cdh版本是Cloudera Enterprise Data Hub Edition  5.10.0 (#85 built by jenkins on 20170120-1038 git: aa0b5cd5eceaefe2f971c13ab657020d96bb842a)。

二,安装部署

我们是使用CDH安装部署impala,在安装前,有的读者需要了解CDH的安装。这是官网链接:https://www.cloudera.com/documentation/enterprise/5-10-x.html 。都是英文,如果你们想找个中文,这是CDH安装文档链接(可以直接部署):https://download.csdn.net/download/u012720237/10266663。安装了CDH,在部署impala是很容易的。选择集群中的添加服务--》选择impala--》按照提示一步一步安装。

三,impala核心组件介绍

Impala Daemon

impala的核心组件是各个节点上面的impalad这个守护进程(Impala Daemon),它负责读写数据文件,接收从impala-shell,hue,JDBC,ODBC等接口发送的查询语句,并行化查询语句和分发工作任务到impala集群的各个节点上,同时负责把本地计算好的查询结果发送给协调器节点(coordinator node)。

你可以向运行在任意节点的impala deamon提交查询,这个节点将会作为这个查询的协调器(coordinator node),其他节点将会传输部分结果集给这个协调器节点。由这个协调器节点构建最终的结果集,所以一般而言在生产建议在不同的节点提交查询。使得集群负载均衡。

impala deamon不间断的和statestore进行通信交流,从而确认哪个节点是健康的能接受新的工作任务。它同时接收catalog daemon传来的广播消息来更新元数据信息,当集群中的任意节点create,alter,drop任意对象,或者执行insert,load data的时候出发广播消息。

Impala Statestore

这个组件检查集群中各个节点上impala daemon的健康状态,同时不间断地将结果反馈给impala daemon。这个服务的物理进程名称是statestored,在整个集群中我们仅需要一个这样的进程即可,这个进程可以增强集群的健壮性,他的启停不会影响其他节点的运行的任务,只会影响其他节点是否回向这个可能离线节点发送请求。

Impala Catalog

impala catalog服务奖SQL语句做出的元数据变化通知给集群各个节点,catalog服务的物理进程名称叫做catalogd,一个集群仅需要这个一个进程。由于他的请求会和statestore daemon交互,所以最好让statestored 和catalogd放在同一个节点上。

四,Impala 查询处理过程

impalad分为java前端和c++处理后端,接受客户端链接的Impalad即作为这次查询的Coordinator,Coordinator通过JNI调用Java前端对用户的查询SQL进行分析生成执行计划树,不同的操作对应不同的PlanNode,如:SelectNode,ScanNode,SortNode,AggregationNode,HashJoinNode等。

执行计划树的每个原子操作由一个PlanFragment表示,通常一条查询语句由多个Plan Fragment组成, Plan Fragment 0表示执行树的根,汇聚结果返回给用户,执行树的叶子结点一般是Scan操作,分布式并行执行。

五,Impala支持的文件格式

impala可以对Hadoop中大多数格式的文件进行查询。它能通过create table和insert的方式将一部分格式的数据记载到table中。但值得注意的是,有些格式的数据是无法写入的。对于无法写入的数据格式,我们只能通过Hive建表,通过对Hive进行数据的写入,然后使用impala对这些保存好的数据执行查询操作。

Impala支持的编码:

Snappy --推荐的编码,因为他在压缩率和解压速度之间有很好的平衡性,Snappy压缩速度很快,但是不如GZIP那样能节约更多的存储空间。impala不支持Snappy压缩的text file。

GZIP     --压缩比很高能节约很多存储空间,impala不支持GZIP压缩的text file。

Deflate --impala不支持GZIP压缩的text file.

BZIP2   --impala不支持BZIP2压缩的text file.

LZO      --只用于text file,Impala可以查询LZO压缩的text格式数据表,但是不支持insert数据,只能通过Hive来完成数据的insert。

六,Impala优缺点

优点:

1,支持SQL查询,快速查询大数据。

2,可以对已有数据进行查询,减少数据的加载,转换。

3,多种存储格式可以选择。

4,可以和hive配合使用。

缺点:

1,不支持用户定义函数UDF。

2,不支持text域的全文搜索。

3,不支持Transforms。

4,不支持查询期的容错。

5,对内存要求高。

七,命令参数

选项

描述

-B or --delimited

导致使用分隔符分割的普通文本格式打印查询结果。当为其他 Hadoop 组件生成数据时有用。对于避免整齐打印所有输出的性能开销有用,特别是使用查询返回大量的结果集进行基准测试的时候。使 用 --output_delimiter 选项指定分隔符。使用 -B 选项常用于保存所有查询结果到文件里而不是打印到屏幕上。在 Impala 1.0.1 中添加

--print_header

是否打印列名。整齐打印时是默认启用。同时使用 -B 选项时,在首行打印列名

-o filename or --output_file filename

保存所有查询结果到指定的文件。通常用于保存在命令行使用 -q 选项执行单个查询时的查询结果。对交互式会话同样生效;此时你只会看到获取了多 少行数据,但看不到实际的数据集。当结合使用 -q 和 -o 选项时,会自动将错误信息输出到 /dev/null(To suppress these incidental messages when combining the -q and -o options, redirect stderr to /dev/null)。在 Impala 1.0.1 中添加

--output_delimiter=character

当使用 -B 选项以普通文件格式打印查询结果时,用于指定字段之间的分隔符(Specifies the character to use as a delimiter between fields when query results are printed in plain format by the -B option)。默认是制表符 tab ('\t')。假如输出结果中包含了分隔符,该列会被引起且/或转义( If an output value contains the delimiter character, that field is quoted and/or escaped)。在 Impala 1.0.1 中添加

-p or --show_profiles

对 shell 中执行的每一个查询,显示其查询执行计划 (与 EXPLAIN 语句输出相同) 和发生低级故障(low-level breakdown)的执行步骤的更详细的信息

-h or --help

显示帮助信息

-i hostname or --impalad=hostname

指定连接运行 impalad 守护进程的主机。默认端口是 21000。你可以连接到集群中运行 impalad 的任意主机。假如你连接到 impalad 实例通过 --fe_port 标志使用了其他端口,则应当同时提供端口号,格式为 hostname:port

-q query or --query=query

从命令行中传递一个查询或其他 shell 命令。执行完这一语句后 shell 会立即退出。限制为单条语句,可以是 SELECT, CREATE TABLE, SHOW TABLES, 或其他 impala-shell 认可的语句。因为无法传递 USE 语句再加上其他查询,对于 default 数据库之外的表,应在表名前加上数据库标识符(或者使用 -f 选项传递一个包含 USE 语句和其他查询的文件)

-f query_file or --query_file=query_file

传递一个文件中的 SQL 查询。文件内容必须以分号分隔

-k or --kerberos

当连接到 impalad 时使用 Kerberos 认证。如果要连接的 impalad 实例不支持 Kerberos,将显示一个错误

-s kerberos_service_name or --kerberos_service_name=name

Instructs impala-shell to authenticate to a particular impalad service principal. 如何没有设置 kerberos_service_name ,默认使用 impala。如何启用了本选项,而试图建立不支持Kerberos 的连接时,返回一个错误(If this option is used in conjunction with a connection in which Kerberos is not supported, errors are returned)

-V or --verbose

启用详细输出

--quiet

关闭详细输出

-v or --version

显示版本信息

-c

查询执行失败时继续执行

-r or --refresh_after_connect

建立连接后刷新 Impala 元数据,与建立连接后执行 REFRESH 语句效果相同

-d default_db or --database=default_db

指定启动后使用的数据库,与建立连接后使用 USE 语句选择数据库作用相同,如果没有指定,那么使用 default 数据库

-l 启用 LDAP 认证
-u 当使用 -l 选项启用 LDAP 认证时,提供用户名(使用短用户名,而不是完整的 LDAP 专有名称(distinguished name)) ,shell 会提示输入密码

IMPALA部署和架构(一)的更多相关文章

  1. rhel6+apache2.4+mysql5.7+php5.6部署LAMP架构

    rhel6+apache2.4+mysql5.7+php5.6部署LAMP架构 2017年10月01日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~准备阶段~~~~~~~~~~~~~ ...

  2. ZStack深度试用:部署、架构与网络及其与OpenStack的对比

    摘要:本文是开源IaaS软件ZStack的深度试用报告,分别从部署.架构和网络三个层面分享作者的试用体验,并与OpenStack进行简单的对比,文章最后也对ZStack的改进方向提出了自己的思考.(转 ...

  3. cloudstack ---部署的架构

    cloudstack跟KVM一起部署的架构 下图是CloudStack跟kvm一起部署的架构: 在每个kvm的宿主机上都需要部署agent程序. cloudstack跟vsphere一起部署的架构 下 ...

  4. Impala概念与架构

    Impala概念与架构 下面的内容介绍Cloudera Impala的背景资料及特性,以便你更高效的使用它.Where appropriate, the explanations include co ...

  5. 万字长文:ELK(V7)部署与架构分析

    ELK(7版本)部署与架构分析 1.ELK的背景介绍与应用场景 在项目应用运行的过程中,往往会产生大量的日志,我们往往需要根据日志来定位分析我们的服务器项目运行情况与BUG产生位置.一般情况下直接在日 ...

  6. ELK(V7)部署与架构分析

    1.ELK的背景介绍与应用场景 在项目应用运行的过程中,往往会产生大量的日志,我们往往需要根据日志来定位分析我们的服务器项目运行情况与BUG产生位置.一般情况下直接在日志文件中tailf. grep. ...

  7. OpenStack IceHouse 部署 - 1 - 架构说明

    参考架构 Architecture from OpenStack Install Guide Reference Architecture Network Isolation 在本次部署中,我们采用了 ...

  8. 部署LNMP架构及其应用

    部署企业LNMP架构 (一)首先安装nginx服务,具体请见另一篇关于nginx的博文. (二)安装MySQL数据库 .安装前准备 [root@localhost ~]# rpm -e mysql-s ...

  9. 部署LAMP架构及其应用

    部署企业LAMP架构 (一)首先安装Apache服务,具体请见另一篇关于Apache的博文. (二)安装MySQL数据库,具体请见另一篇关于LNMP的博文. (三)构建PHP运行环境 1.安装PHP ...

随机推荐

  1. 小程序中input设置宽度后宽度还有空间,但是placeholder被遮挡问题

    最近在做小程序,已经设置了宽高,placeholder没有超出input宽度,却被挡住了一部分,上代码看一下: wxml: <view class='container'> <inp ...

  2. oracle入门之对表数据查询(三)

    oracle表复杂查询--子查询 什么是子查询? 子查询是指嵌入在其它sql语句中的select语句,也叫嵌套查询. 单行子查询 单行子查询是指只返回一行数据的子查询语句. 请思考:如果显示与smit ...

  3. web开发中 代码解决部分IE兼容问题

    首先是自己遇到问题: 一套系统,以前的开发asp旧+c#新后台管理扩展.完善后,在2013年前基本无问题,很是畅顺. 其中.到升级了浏览器后.例如ie9以后,则问题出现了. 如图:   这是一个js的 ...

  4. SpringIOC容器装配Bean

    Spring 的core Container(Spring的核心容器)有四大部分:bean.context.core.expression 在进行Bean的配置时候,需要添加四个jar包 如下: 分别 ...

  5. this.$nextTick()作用

    当data中的某个属性改变的时候,这个值并不是立即渲染到页面上,而是先放到watcher队列上(异步),只有当前任务空闲的时候才会去执行watcher队列上的任务.所以导致,改变的数据挂载到dom上会 ...

  6. 来自C++之父的建议

    You don’t have to know every detail of C++ to write good programs; Focus on programming techniques, ...

  7. CentOS 6.5 简单编译安装Nginx

    一.准备工作 现在官网下载需要的nginx版本:http://nginx.org/en/download.html 从linux服务器上下载,或者本地电脑下载导入服务都行 这里我选择安装的是nginx ...

  8. 【原创】Arduino制作Badusb实践

    1.U盘构造      U盘由芯片控制器和闪存两部分组成. 芯片控制器负责与PC的通讯和识别,闪存用来做数据存储: 闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互:固件无 ...

  9. Verilog中的reg一定会被综合成寄存器么

    对应于实际的数字电路中,如果该程序块描述的是时序逻辑,则该寄存器变量对应为寄存器:如果该程序块描述的是组合逻辑,该寄存器变量对应为硬件逻辑:如果该程序块描述的是不完全组合逻辑,那么该寄存器变量也可以对 ...

  10. 【解决】Server Tomcat v7.0 Server at localhost failed to start.

    Server Tomcat v7.0 Server at localhost failed to start. 出现此原因是因为servlet-name不匹配 修改一致即可