和impala_Impala 技术总结

一.基本介绍

Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。

优点

1. Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。

2. 省掉了MapReduce作业启动的开销。MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟),Impala直接通过相应的服务进程来进行作业调度,速度快了很多。

3. Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式,而是像Dremel一样借鉴了MPP并行数据库的思想另起炉灶,因此可做更多的查询优化,从而省掉不必要的shuffle、sort等开销。

4. 通过使用LLVM来统一编译运行时代码,避免了为支持通用编译而带来的不必要开销。

5. 用C++实现,做了很多有针对性的硬件优化,例如使用SSE指令。

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

二.安装过程

在CDH的主节点(139.0.31.80) 7180端口的界面上,直接添加impala 的服务就可以了

三.使用方法

添加了impala的服务之后,直接在主节点或者其他子节点上

直接输入 “impala-shell” 就可以进入impala的sql编写界面

之后就是 connect 在CDH里面有impala 的节点名称

“connect hadoop001”

再就是和 mysql一样,use ods ,show tables

四.Impala sql 和普通sql 的差异点

1. Impala是没有存储过程的概念的,直接把sql放入文件中调用执行

impala-shell -i hadoop001 -f + sql文件所在路径

hadoop001 是有impala服务的节点主机名

2. INVALIDATE METADATA;

Impala 在调用 hive的数据表之前要同步数据结构,hive数据做了修改之后是不会直接同步到impala的,需要手动同步

3. truncate bdasec.tb_cube_ztts_sjc_m; 正常是truncate table ,这里没有table

4. 在impala里面 字段的类型都是强制相同的,字符型和数值型是不能互相比较的

SATJ>='201201' 这种事必须加上 ‘’ 引号的

这时就出现了一个问题,ajzt>='2' 是会把‘100’ 剔除掉的,因为字符里面’2’>’100’

还有就是int型和bigint型也是不相同的

Cast( a as int) 如果a是浮点型,是不能转成int 的,会直接没有值不是会得到整数部分的值,所以必须是cast( a as float)

5. 在impala 里面是没有事务也不能update 和 delete

采用的方式是全覆盖,语法是insert overwrite

例如:

替换 update 的语句

(update t_test1 t inner join t_test2 t1

on t.sprt_year=t1.sprt_year+1

set t.last_year_value =t1.stats_value )

insert overwrite table t_test1

select t.sprt_year,

t.stats_value,ifnull(t1.stats_value,0) as last_year_value

from t_test1 t left join t_test2 t1

on cast(t.sprt_year as int)=cast(t1.sprt_year as int) +1

;

替换delete 语句

(delete from t_test1 where case_stats='001' )

insert overwrite table t_test1

select t.* from t_test1 t

where not exists (

select 1 from t_test1 t1

where t.sprt_year=t1.sprt_year

and t1.case_stats='001'

);

6. Impala 里面对group 是很严格的,除了汇总的项 其他的字段全部都要存在在group by 的后面 否者会报错

五.运行impala遇到的问题

1. impala Memory limit exceeded 解决办法

在页面 impala的配置里搜索 “Impala Daemon 内存限制”

更改内存的限制大小 一般按照内存的大小限制,尽量给大,因为impala是都在内存里计算,所以设定大一点的内存

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值