天天看点

impala刷新元数据_Impala介绍以及常见问题01 Impala简介02 Impala核心组件03 Impala比Hive查询效率快的原因:04 Impala 常见问题Impala 不能及时查看变化数据问题Impala timestamp parquet问题impala-shell 启动默认端口更改05 python操作impala一:pip安装impyla模块二:连接impala,执行语句脚本

01 Impala简介

Impala服务器是一个由Cloudera 开发并开源的,基于HDFS/Hbase,分布式的大规模并行处理(MMP)数据库引擎,它由你在特定的主机上运行不同的守护进程组成簇.从用户视图来看,impala和Hive还是相似的,可以共享一份元数据
impala刷新元数据_Impala介绍以及常见问题01 Impala简介02 Impala核心组件03 Impala比Hive查询效率快的原因:04 Impala 常见问题Impala 不能及时查看变化数据问题Impala timestamp parquet问题impala-shell 启动默认端口更改05 python操作impala一:pip安装impyla模块二:连接impala,执行语句脚本

02 Impala核心组件

impalad:核心组件,用来读取和写入数据文件,接收客户端的查询,并行查询在集群中分配工作,并将中间查询结果发送回中央协调节点。你可以将查询提交在任何DataNode上运行的Impala守护进程,并且该进程充当该查询的协调节点。其他节点将部分结果传回给协调器,协调器构造查询的最终结果集.impalad进程始终与statstore进行通信,以确定哪些节点健康并可以接收新的工作.

catalogd:Impala目录服务 ,该进程将Impala SQL语句的元数据更改中继到集群中的所有DataNode.该请求是通过StatStore进程传递的。将SQL语句做出的元数据变化通知给集群的各个节点,catalog服务的物理进程名称是catalogd,在整个集群中仅需要一个这样的进程.由于它的请求会跟statestore daemon交互,所以最好让statestored和catalogd这两个进程在同一个节点上。

stateStore:Impala StatStore,该进程用来检查集群中所有健康的DataNode,不断中继其调查结果给每一个statstore。

impala刷新元数据_Impala介绍以及常见问题01 Impala简介02 Impala核心组件03 Impala比Hive查询效率快的原因:04 Impala 常见问题Impala 不能及时查看变化数据问题Impala timestamp parquet问题impala-shell 启动默认端口更改05 python操作impala一:pip安装impyla模块二:连接impala,执行语句脚本

03 Impala比Hive查询效率快的原因:

Impala是真正的MPP查询引擎.

  1.使用C++开发而不是java,降低运行负荷.运行时代码生成,提供效率。全新的执行引擎(不是Mapreduce)。

  2.在执行SQL语句的时候,Impala不会把中间数据写入到磁盘,而是在内存中完成了所有的处理.

  3.使用Impala的时候,查询任务会马上执行而不是生产Mapreduce任务,这回节约大量的初始化时间.

  4.Impala查询计划解析器使用更智能的算法在多节点上分布式执行各个查询步骤,同时避免了sorting和shuffle这两个非常耗时的阶段.

  5.Impala拥有HDFS上面各个data block的信息,当它处理查询的时候能够在各个datanode上面更均衡的分发查询。

另外一个关键原因是,impala为每个查询产生汇编级的代码,当Impala在本地内存中运行的时候,这些汇编代码执行效率比其他任何代码框架都更快,因为代码框架会增加额外的延迟

04 Impala 常见问题

Impala 不能及时查看变化数据问题

现象:当使用hive更新表时,再次使用Impala进行查看发现数据不一致,需要刷新元数据解决方案: invalidate metadata

Impala timestamp parquet问题

现象:表使用parquet存储格式,字段类型为timestamp,使用hive查询的时间比impala查询的时间多了8个小时解决方案:1.将timestamp类型改为string

时区配置:默认impala配置不是中国时区,所以在使用from_unixtime的时候有误差解决方案:在cdh里面impala->配置->impala Daemon ->Impala Daemon 命令行参数高级配置代码段(安全阀)

impala刷新元数据_Impala介绍以及常见问题01 Impala简介02 Impala核心组件03 Impala比Hive查询效率快的原因:04 Impala 常见问题Impala 不能及时查看变化数据问题Impala timestamp parquet问题impala-shell 启动默认端口更改05 python操作impala一:pip安装impyla模块二:连接impala,执行语句脚本

impala-shell 启动默认端口更改

在客户端启动impala-shell时会默认开启21000端口

如果需要更改该端口,则修改/opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/lib/impala-shell/lib/impalashellconfigdefaults.py和/opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/lib/impala-shell/impalashell.py这两个脚本文件中的端口

impala刷新元数据_Impala介绍以及常见问题01 Impala简介02 Impala核心组件03 Impala比Hive查询效率快的原因:04 Impala 常见问题Impala 不能及时查看变化数据问题Impala timestamp parquet问题impala-shell 启动默认端口更改05 python操作impala一:pip安装impyla模块二:连接impala,执行语句脚本
impala刷新元数据_Impala介绍以及常见问题01 Impala简介02 Impala核心组件03 Impala比Hive查询效率快的原因:04 Impala 常见问题Impala 不能及时查看变化数据问题Impala timestamp parquet问题impala-shell 启动默认端口更改05 python操作impala一:pip安装impyla模块二:连接impala,执行语句脚本

05 python操作impala

一:pip安装impyla模块

pip install impyla
           

二:连接impala,执行语句脚本

#!/usr/bin/env python# -*- coding:utf-8 -*-from impala.dbapi import connect#创建connection对象conn = connect(host=host,port=port,auth_mechanism='PLAIN',user=user,password=password)  #基于LDAP认证的impala客户端连接# 创建cursor游标对象cur = conn.cursor()#执行sqlcur.execute("select * from tmp.tmp_able") #如果是多个执行语句,需要进行split,然后单条执行#遍历数据cur.fetchall()  #获取所有数据cur.fetchone()   #获取一条数据cur.next()   #获取下一个数据while True:    try:        print cur.next()    except StopIteration:        break