大数据之Impala安装使用

Kylin和Impala区别:

既然在线分析已经使用了kylin,为啥还用impala呢?
因为kylin不够灵活,只能分析简单的星型/雪花模型,impala可以通过窗口函数,进行复杂的行为数据分析;
反之,当数据量大的时候,impala比较慢,所以只用kylin进行预计算。

在这里插入图片描述

一、Impala介绍

Impala 是建立在 Hadoop 生态圈的交互式 SQL 解析、执行引擎,Impala 的 SQL 语法与 Hive 高度兼容,并且提供标准的 ODBC 和 JDBC 接口。
Impala 本身不提供数据的存储服务,其底层数据可来自 HDFS、Kudu、Hbase。

impala优势:

 和 Hive 高度相似的 SQL 语法,无需太多学习成本
 超大数据规模 SQL 解析的能力,高效利用内存与 CPU 利用,快速返回 SQL 查询结果。
 集成多个底层数据源,HDFS、Kudu、Hbase 等数据皆可通过 Impala 共享,并且无需进行数据同
步。
 与 Hue 深度集成,提供可视化的 SQL 操作以及 work flow。
 提供标准 JDBC 和 ODBC 接口,方便下游业务方无缝接入。
 提供最多细化到列的权限管理,满足实际生产环境数据安全要求。

impala角色:

impala是一个 MPP引擎,它是基于内存进行大规模数据分析的系统。

impala-server: impalad,它是 impala 系统的计算节点,每个 impalad 角色都是对等的,没有谁是 master;这就涉及到一个问题:分布式计算的任务如何协调,如何分片?——coordinator 角色负责!
那个 impalad 接收这个 sql,谁就承担 coordinator 的角色,它自己负责解析 sql,形成执行计划,进行任务分片,然后通知到其他 impalad 来协作。

impala-state-store: 它是 impala 系统的状态协调节点,主要负责协调集群状态;imapla-server 会跟Impala-state-store 进行周期性的心跳通信,来感知集群中各个节点的状态。

impala-catalog: 元数据管理节点;其实 impala 中,每一个 impalad,都会自己在内存中缓存一份元数据;正因为每个 impalad 都会缓存元数据,就会带来一个问题:当你在 hive 中进行了建表/修改表定义/导入新数据,这些操作后,impalad 中的元数据并不会自动更新;所以,发生这些操作后,需要在 impala 的 shell 中执行一个命令: invalidate metadata 这个命令一执行,接收命令的 impalad 会通知所有其他impalad 清空元数据,并请求 impala-catalog来更新自己的缓存;

如果只是对某个表定义的修改,那么可以只更新这个指定的表元数据:refresh [table].

二、impala安装

impala是使用c语言实现的,所以使用yum进行安装。

1、选择一台电脑安装httpd服务

yum install -y httpd
service httpd start
chkconfig httpd o

将安装包放在 /var/www/html目录下

2、关闭 selinux

# 临时关闭:
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce

# 永久关闭:
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled 重启服务 reb

3、配置本地yum源

vi /etc/yum.repos.d/cdh-local.repo

[cloudera-repo]
name=cloudera-repo
DOIT 北京多易教育科技有限公司 www.51doit.com
baseurl=http://doitedu01/cloudera-repos/cdh6/6.2.1/redhat7/yum
enabled=1
gpgcheck=0
# 并拷贝至其他 2 个

4、安装impala

#在 doitedu01 上
yum install -y impala impala-server impala-state-store impala-catalog impala-shell

#其他节点
yum install -y 

5、复制 hadoop、hive 配置文件

# impala 的配置目录为/etc/impala/conf,这个路径下面需要把 core-site.xml,hdfs-site.xml 以及 hive-site.xml
# 所有节点执行以下命令
cp /opt/apps/hadoop-3.1.1/etc/hadoop/core-site.xml /etc/impala/conf/
cp /opt/apps/hadoop-3.1.1/etc/hadoop/hdfs-site.xml /etc/impala/conf/
cp /opt/apps/hive-3.1.2/conf/hive-site.xml /etc/impala/conf/

6、修改配置文件

# 所有节点
vi /etc/default/impala
# 集群唯一catalog服务器地址
IMPALA_CATALOG_SERVICE_HOST=impala01

# 集群唯一state‐store服务器地址
IMPALA_STATE_STORE_HOST=impala01

# catalog/state‐store 端口号,默认即可
IMPALA_STATE_STORE_PORT=24000
IMPALA_BACKEND_PORT=22000

# 日志存储目录
IMPALA_LOG_DIR=/var/log/impala
IMPALA_CATALOG_ARGS=" ‐log_dir=${IMPALA_LOG_DIR} "
IMPALA_STATE_STORE_ARGS=" ‐log_dir=${IMPALA_LOG_DIR} ‐
state_store_port=${IMPALA_STATE_STORE_PORT}"

# 注意,这里有个大坑,‐use_statestore参数要赋值:=true
# 不然‐state_store_host配置项不生效
IMPALA_SERVER_ARGS=" \
‐log_dir=${IMPALA_LOG_DIR} \
‐catalog_service_host=${IMPALA_CATALOG_SERVICE_HOST} \
‐state_store_port=${IMPALA_STATE_STORE_PORT} \
‐use_statestore=true \
‐state_store_host=${IMPALA_STATE_STORE_HOST} \
‐be_port=${IMPALA_BACKEND_PORT}"
ENABLE_CORE_DUMPS=false

修改bigtop配置

vi /etc/default/bigtop‐utils
export JAVA_HOME=/opt/apps/jdk1.8.0_191/

放置mysql驱动jar

# 拷贝一个mysql驱动到 /usr/share/java/ 下

7、启动、关闭impala服务

# 切记启动HDFS和HIVE元数据服务
‐ 启动 HDFS
start‐dfs.sh

‐ 启动hive metastore
hive ‐‐service metastore

# doitedu01上
service impala‐state‐store start
service impala‐catalog start
service impala‐server start

# 其他节点
service impala‐server start

# 关闭服务
service impala‐state‐store stop
service impala‐catalog stop
service impala‐server stop

启动脚本

vi impall.sh

#!/bin/bash
service impala‐state‐store $1
service impala‐catalog $1
for i in {1..3}
do
ssh doitedu0${i} "service impala‐server $1"
done

service impala‐state‐store status
service impala‐catalog status
service impala‐server status

注意,impala安装后,所有服务都已经被配置为开机自启,所以很少需要手动启动服务集群

8、web ui

访问impalad的管理界面http://node‐3:25000/
访问statestored的管理界面http://node‐3:25010/

9、命令客户端

[root@doitedu01 ~]# impala‐shell
[doitedu01:21000] default> show tables;
Query: show tables
Fetched 0 row(s) in 0.00s

三、复杂类型

hive支持最好的类型是orc, impala支持最好的类型是parquet

1、map类型查询

如果hive表中含有复杂类型,而表文件格式为TEXT,则impala不支持
如果hive表中含有复杂类型,而表文件格式为parquet,则impala支持

id,name,info
1,zs,addr:bj‐age:18‐marry:false
2,ls,addr:sh‐age:28‐marry:true
3,ww,addr:sz‐age:26‐marry:false‐inc:2000
select
   id,
   name,
   info.key,
   info.value
from
   custom_parquet,
   custom_parquet.info as info;

2、数组类型查询

select
   id,
   name,
   actors.*
from 
   movie_parquet , movie_parquet.actors as actors

3、struct类型查询

select
   stu_par.id,
   stu_info.name,
   stu_info.age,
   stu_info.sex
from 
   stu_par

四、常用函数

1、group_concat(字段, 分隔符): 类似于hive的collect_list()
2、修改备注名称

alter table analytic_layer_zbyy_cwyy_014_cwzbbg.finance_all_targets change  diff_met_date_avg  diff_met_date_avg double comment "平均时长"

五、自定义函数

1、引入依赖

<dependency>
     <groupId>org.apache.hive</groupId>
     <artifactId>hive‐exec</artifactId>
     <version>1.1.0</version>
</dependency>

2、编写MD5类

import org.apache.hadoop.hive.ql.exec.UDF;
import java.security.MessageDigest;

public class MD5 extends UDF{
     public static String evaluate(String value) {
        StringBuilder sb = new StringBuilder();
           try {
               MessageDigest messageDigest = MessageDigest.getInstance("MD5");
               byte[] bytes = messageDigest.digest(value.getBytes());
               for (int i = 0; i < bytes.length; i++) {
                    int tempInt = bytes[i] & 0xff;
                    if (tempInt < 16) {
                        sb.append(0);
                    }
                   sb.append(Integer.toHexString(tempInt));
               }
           }
          catch (Exception e) {
              System.out.println(e.getMessage());
          }
         return sb.toString();
  }
}

3、打包,并传入hdfs

hdfs dfs ‐copyFromLocal ./MyHiveUDF.jar /user/impala/user_function/

4、注册函数

create function md5(string) returns string location
'hdfs://nameservice/user/impala/user_function/MyHiveUDF.jar'
symbol='com.business.bi.udf.MD5';
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据同盟会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值