Apache Impala学习笔记

Apache Impala:实时的sql查询工具

文章目录

  • Apache Impala:实时的sql查询工具
    • 1.Impala与Hive关系
    • 2.Impala架构
      • 2.1.Impala集群节点
      • 2.2.impala 查询处理流程(重点)
    • 3.Impala集群安装规划
      • 3.1.impala安装
        • 3.1.1步骤
        • 3.1.2注意事项
      • 3.2.impala集群的启动关闭
      • 3.3Impala卸载
    • 4. impala的shell客户端
    • 5. impala的Java客户端

1.Impala与Hive关系

  • impla是个实时的sql查询工具,类似于hive的操作方式,只不过执行的效率极高,号称当下大数据生态圈中执行效率最高的sql类软件
  • impala来自于cloudera,后来贡献给了apache
  • impala工作底层执行依赖于hive 与hive共用一套元数据存储在使用impala的时候,必须保证hive服务是正常可靠的,至少metastore开启。
  • impala最大的跟hive的不同在于不再把sql编译成MapReduce程序执行,而是编译成执行计划树
  • impala的sql语法几乎兼容hive的sql语句。
  • impala是一个适用于实时交互查询的sql软件 hive适合于批处理查询的sql软件。通常是两个互相配合。

2.Impala架构

2.1.Impala集群节点

  • Impalad(impala server):可以部署多个不同机器上,通常与datanode部署在同一个节点,方便数据本地计算,负责具体执行本次查询sql的impalad称之为Coordinator。每个impala server都可以对外提供服务。
  • impala state store:主要是保存impalad的状态信息 监视其健康状态
  • impala catalogd:metastore维护的网关 负责跟hive 的metastore进行交互 同步hive的元数据到impala自己的元数据中。
  • CLI:用户操作impala的方式(impala shell、jdbc、hue)

2.2.impala 查询处理流程(重点)

  • impalad分为java前端(接受解析sql编译成执行计划树),c++后端(负责具体的执行计划树操作)
  • impala sql---->impalad(Coordinator)---->调用java前端编译sql成计划树------>以Thrift数据格式返回给C++后端------>根据执行计划树、获取数据所在路径(libhdfs和hdfs交互)、Coordinator根据impalad状态分配执行计划发给其他impalad 查询----->Coordinator汇总查询结果----->返回给java前端---->用户cli(如果是 insert语句,则将数据写入到HDFS中,注销本次查询。)
  • 跟hive不同就在于整个执行中已经没有了mapreduce程序的存在

3.Impala集群安装规划

  • node-3 :impalad 、impala state store、impala catalogd、impala-shell
  • node-2:impalad
  • node-1:impalad

3.1.impala安装

3.1.1步骤

  • impala没有提供tar包 只有rpm包 这个rpm包只有cloudera公司提供

  • 要么自己去官网下载impala rpm包和其相关的依赖 要么自己制作本地yum源

  • 特别注意本地yum源的安装,需要Apache server对外提供web服务,确保 linux 的 Selinux 关闭,防火墙已关闭,使得各个机器都可以访问下载yum源

  • 在指定的每个机器上根据规划 yum安装指定的服务

  • 保证hadoop hive服务正常,开启相关的服务

    • hive metastore hiveserver2
    • hadoop hdfs-site.xml 开启本地读取数据的功能
    • 要把配置文件scp给其他机器 重启
  • 修改impala配置文件

  • 修改bigtop 指定java路径

  • 根据规划分别启动对应的impala进程

  • 如果出错 排查的依据就是去,日志默认都在/var/log/impala

  • 注意:要保证Impala集群的机器时间同步,否则hive与Impala无法同步元数据信息

3.1.2注意事项

  1. Linux软件包安装有三种方式:二进制节码包 .tar.gz , rpm包,yum工具(是rpm的前端工具,底层还是rpm,在安装的时候帮你自动找依赖下载)

  2. 磁盘挂载分区的操作也可以通过扩展磁盘的方式来实现。

  3. 安装包可以通过 MobaXterm 提供的文件系统工具直接上传。

  4. yum源的架构(在安装时,如果失败,可以考虑httpd服务有没启动):

Apache Impala学习笔记_第1张图片

  1. impala的配置文件(hive-site.xml):

     
    <property> 
        <name>hive.server2.thrift.bind.hostname> 
        <value>node-1value> 
    property> 
     
    <property> 
        <name>hive.metastore.urisname> 
        <value>thrift://node-1:9083value> 
    property>
    

    启动 impala之前一定要确保有9083这个端口。

3.2.impala集群的启动关闭

  • 主节点 按照顺序启动以下服务

    service impala-state-store start
    service impala-catalog start
    service impala-server start
    
  • 从节点

    service impala-server start
    
  • 如果需要关闭impala 把上述命令中start 改为stop

  • 通过ps -ef|grep impala 判断启动的进程是否正常 如果出错 日志是你解决问题的唯一依据。

    /var/log/impala
    
  • impala启动失败:

    • 检验 hadoop 启动

    • 检验 mysql 服务启动

    • 检验 hive metastore-RUNJar(9083) hiveserver2-RunJar(10000)

    • 检验 impala 启动了没 有没启动成功看进程和日志

      -- 1.查看服务状态
      chkconfig --list | grep impala
      service impala-state-store status
      service impala-catalog status
      service impala-server status
      
      -- 2.查看进程是否活着  impala的进程已经不是java进程。
      ps -ef | grep impala   可以查看任何在linux下的进程
      jps 只能查看java进程
      
      -- 查看对应节点的日志 /var/log/impala
      
  • 建议每个节点都安装 impala-shell,这样就哪个客户端都可以与 impala 进行交互。

3.3Impala卸载

  • 因为 impala 安装的时候需要依赖其他的软件,所以默认会将引用软件也下下来,并设置环境。那么在Impala卸载的时候,就需要将依赖的软件也卸载掉。
# 卸载yum安装的impala全家桶:
yum remove -y impala hadoop bigtop avro hbase hive parquet sentry solr zookeeper

# 删除本地磁盘上跟impala相关的文件夹
rm -rf $(find / -name "*impala*")

# 测试
source /etc/profile
which hadoop

4. impala的shell客户端

  1. impala-shell 类似于hive工具,hive有-e -f -hiveconf 参数,同样impala-shell也有:

    • impala-shell -h 参见impala的帮助文档
    • impala-shell -q “sql” 在shell客户端直接运行SQL命令
    • impala-shell -f query.sql 执行sql脚本
    • impala-shell -r 进入impala-shell并且刷新整个impala的元数据
    • impala-shell -o 将执行的结果保存到文件里面去
  2. impala-shell 客户端内部指令:

    • catalogd 更新的元数据,hive metastore可以读取到。hive更新的元数据,catalogd 无法读取到。如下两个命令用于解决该问题:

      • refresh dbname.tabname 增量刷新,此时必须在Impala中有这张表,如果没有就会报错。
      • invalidate metadata 全量刷新,hive当中新创建数据库或库表时,就需要在impala做全量刷新
    • explain sql 查看某个sql语句的执行计划

    • profile 主要用于打印出上一条sql语句的更加详细的执行计划

    • quit / exit 退出

  3. impala 的基本查询语句与hive的查询语句基本一致,需要注意的是impala操作时HDFS报权限不足的问题,可以对该文件夹修改权限。

  4. 加载数据的4种方式:

    load data inpath '/user/impala/' into table user; //只能加载HDFS上的数据
    create  table  user2   as   select * from  user;
    insert  into user3 valus(1,'zhangsan');
    insert  into user4 select * from user3;
    

5. impala的Java客户端

​ 生产环境中更多的是利用 impala提供的 java 客户端连接工具,开发的流程与我们学习过的 JDBC 十分类似,本节通过简单的查询业务介绍如何使用 Impala Java 客户端。

public static void main(String[] args){
        Connection con = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
    	//定义连接驱动类,以及连接url和执行的sql语句
        String JDBC_DRIVER = "com.cloudera.impala.jdbc41.Driver";
        String CONNECTION_URL = "jdbc:impala://node-3:21050";
        try
        {
            //贾(加载驱动)琏(获取连接对象)欲(创建预处理对象)执(执行查询)事(释放内存)
            Class.forName(JDBC_DRIVER);
            con = (Connection) DriverManager.getConnection(CONNECTION_URL);
            ps = con.prepareStatement("select * from impala.employee;");
            rs = ps.executeQuery();
            //遍历结果集
            while (rs.next())
            {
                //注意获取字段数据的索引是从0开始的
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
                System.out.println(rs.getString(3));
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        } finally
        {
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

你可能感兴趣的:(大数据)