impala刷新元数据_Impala介绍以及常见问题

01 Impala简介

Impala服务器是一个由Cloudera 开发并开源的,基于HDFS/Hbase,分布式的大规模并行处理(MMP)数据库引擎,它由你在特定的主机上运行不同的守护进程组成簇.从用户视图来看,impala和Hive还是相似的,可以共享一份元数据

f48289706bd9062bb548de8671166096.png

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。

06d868b122defd69b00e3c1cde5e3e70.png

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 命令行参数高级配置代码段(安全阀)

f3e1f1a23209a12aae61dbb6618c3f15.png

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这两个脚本文件中的端口

3ea19d760fc802d181fc20897e627c07.png
15b65fbdc57d5c28201f93342871e4af.png

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值