转载

Impala--实战之整合HBASE&JDBC&性能优化(三)

Impala与HBase整合

  • impala可以通过Hive外部表的方式和Hbase进行整合

-步骤一:创建HBASE表,添加数据

create 'test_info','info';
put 'test_info','1','info:name','similarFish';
put 'test_info','2','info:name','fish';

-步骤二:创建hive表

create external table test_info(
key string,
name string
)
row format serde 'org.apache.hadoop.hive.hbase.HbaseSerDe'
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping"="row_key:key,info:name")
tblproperties("hbase.table.name"="test_info")

-步骤三:刷新impala表

invalidate metadata

注:本质是hive元数据库建立一张表去映射HBASE数据库的表的元数据,这样impala在和hive共用元数据库时也能读取到这张表,以hive作为跳板去访问hbase

Impala JDBC

  • 配置
impala.driver=org.apache.hive.jdbc.HiveDriver
impala.url=jdbc://hive2://hdp01:21050/;auth=noSasl
impala.username=
impala.password=

注:尽量使用PreparedStatement执行SQL语句,因为性能上要好于Statement,而且Statement存在查不出数据的情况

Impala性能优化

  • SQL优化,使用之前调用执行计划
1,执行SQL前对SQL进行一个分析,使用explain sql(分析哪个步骤需要内存多,指定机器),profile(为什么这次的SQL执行的这么慢)
2,哪些SQL会导致数据倾斜,保证谓词下推的成功
3,多层嵌套,select * 都是可以优化的
  • 选择合适的文件格式进行存储
  • 避免产生很多小文件,少用insert,如果有其他程序产生的小文件,可以使用中间表
  • 使用合适的分区技术,根据分区粒度测算
  • 使用compute stats进行表信息搜集
  • 网络IO的优化:
1,避免把整个数据发送到客户端(执行完了直接落地,在本地查看执行结果)
      2,尽可能的做条件过滤
      3,使用limit字句
      4,输出文件时,避免使用美化输出
  • 使用profile输出底层信息计划,再做相应的环境优化
原文  https://segmentfault.com/a/1190000023069253
正文到此结束
Loading...