大数据开发

Impala

2021-02-13  本文已影响0人  奋斗的蛐蛐

Impala概述

Impala是什么

Impala是一款针对HDFS和HBASE中的PB级别数据进行交互式实时查询工具。最大的特点就是速度快

Impala优势

Impala的诞生

Hive与MR适合离线批处理,但是对交互式查询的场景无能为力(快速响应),所以为了积极查询速度问题开发了Impala,Impala抛弃了MR,使用了类似传统的MPP数据库技术,提高了查询速度

MPP是什么?

MPP (Massively Parallel Processing),就是大规模并行处理(MR是分布式并行计算框架),在MPP集群中,每个节点资源都是独⽴享有(MR依托的是Yarn,节点资源可能这个任务使用,下个任务也使用),也就是有独立的磁盘和内存,每个节点通过网络互相连接,彼此协同计算,作为整体提供数据服务。

MPP是将任务并行的分散到多个服务器和节点上,在每个节点计算完成后,将各自的部分结果汇总到一起的到最终的结果(也是分而治之的思想)

对于MPP架构的软件来说聚合操作,比如计算某张表的总条数,则先进行局部聚合(每个节点并行计算,MR并没有进行聚合,例如WordCount,只是输出<单词,1>,预聚合是shuffle阶段处理的), 然后把局部汇总结果进行全局聚合(与Hadoop相似)。

Impala和Hive技术对比
Impala与Hive查询过程对比分析
Impala与Hive中间结果对比分析
Impala与Hive交互查询对比分析
Impala与Hive计算引擎对比分析
Impala与Hive容错对比分析
Impala与Hive查询速度对比分析

总结:

  1. 在一定数据量下(PB级别,数据量属于中等),查询速度快。
  2. 速度快的原因:不使用MR引擎,避免了IO、排序、冷启动等,采用了MPP数据库技术。

Impala的缺点

  1. Impala使用的MPP架构,只能做到百节点级,一般并发查询个数达到20个左右,整个系统的吞吐已经达到了满负荷状态,再扩容节点也提升不了吞吐量。处理数据在PB级别最佳
  2. 资源不能通过Yarn统一资源调度,所以Hadoop集群无法实现Impala、Spark、Hive等组件的动态资源共享。

使用场景

Impala安装

集群准备

按照Hadoop、Hive
准备Impala的依赖包

由于目前Impala的安装只提供rpm,没有tar,但是使用rpm的时候又会有很多的依赖,一个个寻找以来太费劲,所以自己来做本地yum源

制作本地Yum源

1、Linux120上安装Httpd服务器

#yum⽅式安装httpd服务器器 
yum install httpd -y
#启动httpd服务器器 
systemctl start httpd
#验证httpd⼯工作是否正常,默认端⼝口是80,可以省略略 
http://linux121

共享的路径:

/var/www/html/

2、下载需要的rpm包

 http://archive.cloudera.com/cdh5/repo-as-tarball/5.7.6/cdh5.7.6-centos7.tar.gz
 
 tar -zxvf cdh5.7.6-centos7.tar.gz

3、使用Httpd放依赖包,一种是移动解压好文件,一种是软连接

ln -s /opt/lagou/software/cdh/5.7.6 /var/www/html/cdh57

4、修改Yum源配置文件

cd /etc/yum.repos.d 
#创建⼀一个新的配置⽂文件 
vim local.repo
#添加如下内容
[local]
name=local
baseurl=http://linux120/cdh57/
gpgcheck=0
enabled=1

5、分发到其他节点

 rsync-script local.repo

安装Impala

集群规划
服务名称 Linux121 Linux122 Linux123
impala-catalog
impala-statestore
Impala-server

建议impala-statestore与impala-catalog也是同节点

安装步骤

1、Linux123:

 yum install impala -y
yum install impala-server -y
yum install impala-state-store -y
yum install impala-catalog -y
yum install impala-shell -y

Linux121与Linux123

 yum install impala-server -y
 yum install impala-shell -y

2、配置hive-site.xml

<!--指定metastore地址,之前添加过可以不不⽤用添加 -->
<property>
  <name>hive.metastore.uris</name>
  <value>thrift://linux121:9083,thrift://linux123:9083</value>
</property>
<property>
  <name>hive.metastore.client.socket.timeout</name>
  <value>3600</value>
</property>

分发到其他节点

rsync-script hive-site.xml

3、linux123与linux121启动metastore服务

nohup hive --service metastore &

4、linux123启动hiveserver2服务

nohup hive --service hiveserver2 &

5、修改hdfs-site.xml配置短路读取

短路读取:不需要节点间在传输数据,将需要数据的服务与数据放到一个节点,即将Impala-server与dataNode在同一个节点,这样就可以直接本地读取

创建短路读取的本地中转站(后续HDFS重启有可能起不来,就是因为该文件夹权限问题导致,记得看日志,然后授权)

mkdir -p /var/lib/hadoop-hdfs

6、修改hdfs-site.xml

<!--添加如下内容 --><!--打开短路路读取开关 --> <!-- 打开短路路读取配置-->
<property>
  <name>dfs.client.read.shortcircuit</name>
  <value>true</value>
</property>
<!--这是⼀一个UNIX域套接字的路路径,将⽤用于DataNode和本地HDFS客户机之间的通信 -->
<property>
  <name>dfs.domain.socket.path</name>
  <value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
<!--block存储元数据信息开发开关 -->
<property>
  <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
  <value>true</value>
</property>
<property>
  <name>dfs.client.file-block-storage-locations.timeout</name>
  <value>30000</value>
</property>

分发到其他节点后,重启hdfs

7、Impala配置

引用HDFS、Hive配置(三个节点都要执行)

使⽤用Yum⽅方式安装impala默认的Impala配置文件⽬目录为 /etc/impala/conf,Impala的使⽤用要依赖 Hadoop,Hive框架,所以需要把Hdfs,Hive的配置⽂文件告知Impala。

ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/core-site.xml /etc/impala/conf/core-site.xml
ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml /etc/impala/conf/hdfs-site.xml
ln -s /opt/lagou/servers/hive-2.3.7/conf/hive-site.xml /etc/impala/conf/hive-site.xml

所有节点更改Impala默认配置文件以及添加mysql的驱动包

vim /etc/default/impala
<!--更更新如下内容 -->
IMPALA_CATALOG_SERVICE_HOST=linux123
IMPALA_STATE_STORE_HOST=linux123

所有节点创建mysql的驱动包的软链接

 #创建文件夹
mkdir -p /usr/share/java
ln -s /opt/lagou/servers/hive-2.3.7/lib/mysql-connector-java-5.1.49.jar /usr/share/java/mysql-connector-java.jar

修改bigtop的java_home路路径

 vim /etc/default/bigtop-utils
export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231

8、启动Impala

 #linux123启动如下⻆角⾊色
service impala-state-store start
service impala-catalog start
service impala-server start
#其余节点启动如下⻆角⾊色
service impala-server start

9、验证

 
访问impalad的管理理界⾯面
http://linux123:25000/
访问statestored的管理理界⾯面
http://linux123:25010/

消除Impala影响

由于使用Yum命令安装Impala,我们选择使用yum⾃动进行Impala依赖的安装和处理,所以本次安装 默认会把Impala依赖的所有框架都会安装,⽐如Hadoop,Hive,Mysql等,为了保证我们⾃⼰安装的 Hadoop等使用正常,我们需要删除掉Impala默认安装的其它框架

[root@linux122 conf]# which hadoop
/usr/bin/hadoop
[root@linux122 conf]# which hive
/usr/bin/hive
#使⽤用which命令 查找hadoop,hive等会发现,命令⽂文件是/usr/bin/hadoop ⽽非我们⾃己安装的路 径,需要把这些删除掉,所有节点都要执行
rm -rf /usr/bin/hadoop
rm -rf /usr/bin/hdfs
rm -rf /usr/bin/hive
rm -rf /usr/bin/beeline
rm -rf /usr/bin/hiveserver2
#重新生效环境变量 
source /etc/profile

Impala入门

impala-shell
show databases;

如果想要使用Impala ,需要将数据加载到Impala中,如何加载数据到Impala中呢?

1、准备数据⽂件user.csv

392456197008193000,张三,20,0
267456198006210000,李李四,25,1
892456199007203000,王五,24,1
492456198712198000,赵六,26,2
392456197008193000,张三,20,0
392456197008193000,张三,20,0

2、创建HDFS 存放数据的路径

 hadoop fs -mkdir -p /user/impala/t1 
 #上传本地user.csv到hdfs /user/impala/table1
 hadoop fs -put user.csv /user/impala/t1

3、创建表

#进⼊入impala-shell impala-shell #表如果存在则删除
drop table if exists t1; 
#执⾏行行创建
create external table t1(id string,name string,age int,gender int) row format delimited fields terminated by ','
location '/user/impala/t1';

4、查询数据

select  * from t1;

5、创建t2表

#创建一个内部表
create table t2(id string,name string,age int,gender int) row format delimited fields terminated by ',';
#查看表结构
desc t1;
desc formatted t2;

6、插⼊数据到t2

 insert overwrite table t2 select * from t1 where gender =0;
 #验证数据
select * from t2;

在hive中,能够看到Impala创建的表

小结:

  1. 上⾯案例中Impala的数据文件我们准备的是以逗号分隔的⽂本文件,实际上,Impala可以支持RCFile,SequenceFile,Parquet等多种文件格式。

  2. Impala与Hive元数据的关系?

    Hive对于元数据的更新操作不能被Impala感知到; Impala对元数据的更新操作可以被Hive感知到。

    Impala同步Hive元数据命令:
    手动执行invalidate metadata ,(后续详细讲解)

    Impala是通过Hive的metastore服务来访问和操作Hive的元数据,但是Hive对表进行创建删除修改等操作,Impala是无法⾃动识别到Hive中元数据的变更情况的,如果想让Impala识别 到Hive元数据的变化,所以需要进入impala-shell之后⾸先要做的操作就是执行invalidate metadata,该命令会将所有的Impala的元数据失效并重新从元数据库同步元数据信息。后⾯详细讲解元数据更新命令。

  3. Impala操作HDFS使用的是Impala⽤用户,所以为了了避免权限问题,我们可以选择关闭权限校验

在hdfs-site.xml中添加如下配置:

<!--关闭hdfs权限校验 -->
<property>
  <name>dfs.permissions.enabled</name>
  <value>false</value>
</property>

Impala的架构原理

Impala组件

Impala是⼀个分布式,⼤规模并行处理理(MPP)数据库引擎,它包括多个进程。Impala与Hive类似不是数据库⽽而是数据分析⼯具;

Impala架构.png
Impalad
statestored
catalogd

Impala查询

Impala查询流程.png
  1. Client提交任务 Client发送一个SQL查询请求到任意一个Impalad节点,会返回⼀个queryId用于之后的客户端操作。

  2. ⽣成单机和分布式执行计划

    SQL提交到Impalad节点之后,Analyser依次执行SQL的词法分析、语法分析、语义分析等操作; 从MySQL元数据库中获取元数据,从HDFS的名称节点中获取数据地址,以得到存储这个查询相关 数据的所有数据节点

    • 单机执行计划: 根据上⼀步对SQL语句的分析,由Planner先生成单机的执⾏计划,该执行计划是有PlanNode组成的一棵树,这个过程中也会执⾏一些SQL优化,例如Join顺序改变、谓词下推等。

    • 分布式并行物理计划:将单机执⾏计划转换成分布式并行物理理执行计划,物理执⾏计划由⼀个个的Fragment组成,Fragment之间有数据依赖关系,处理过程中需要在原有的执行计划 之上加入一些ExchangeNode和DataStreamSink信息等。

      • Fragment : sql⽣生成的分布式执行计划的一个子任务;
      • DataStreamSink:传输当前的Fragment输出数据到不不同的节点
  3. 任务调度和分发

    Coordinator将Fragment(子任务)根据数据分区信息发配到不同的Impalad节点上执⾏。Impalad 节点接收到执⾏Fragment请求交由Executor执⾏。

  4. Fragment之间的数据依赖

    每一个Fragment的执行输出通过DataStreamSink发送到下⼀个Fragment,Fragment运行过程中不断向coordinator节点汇报当前运行状态。

  5. 结果汇总

    查询的SQL通常情况下需要有一个单独的Fragment⽤于结果的汇总,它只在Coordinator节点运⾏,将多个节点的最终执行结果汇总,转换成ResultSet信息。

  6. 获取结果客户端调用获取ResultSet的接口,读取查询结果。

查询计划示例例

以一个SQL例⼦来展示查询计划 SQL语句

select
 t1.n1,
 t2.n2,
 count(1) as c
 from t1 join t2 on t1.id = t2.id join t3 on t1.id = t3.id
 where t3.n3 between ‘a’ and ‘f’ group by t1.n1, t2.n2
 order by c desc
 limit 100;
单机的执行计划
单机执行计划.png

分析上⾯的单机执行计划,第⼀步先去扫描t1表中需要的数据,如果数据⽂件存储是列式存储我们可以便利的扫描到所需的列id,n1;接着需要与t2表进行Join操作,扫描t2表与t1表类似获取到所需数据列 id,n2;t1与t2表进行关联,关联之后再与t3表进行关联,这⾥里Impala会使⽤用谓词下推扫描t3表只取join所需数据;对group by进⾏相应的aggregation操作,最终是排序取出指定数量数据返回。

分布式并行执行计划

所谓的分布式并行化执行计划就是在单机执行计划基础之上结合数据分布式存储的特点,按照任务的计算要求把单机执行计划拆分为多段子任务,每个⼦任务都是可以并行执行的。上⾯的单机执行计划转为分布式并行执行计划如下图所示:

Impala分布式并行执行计划.png Impala分布式执行计划2.png

分布式执行计划中涉及到多表的Join,Impala会根据表的⼤小来决定Join的方式,主要有两种分别是Hash Join与Broadcast Join(广播)

上⾯分布式执行计划中可以看出T1,T2表⼤一些,而T3表小一些,所以对于T1与T2的Join Impala选择使用Hash Join,对于T3表选择使用Broadcast ⽅方式,直接把T3表广播到需要Join的节点上。

分布式并行计划流程

  1. T1和T2使⽤Hash join,此时需要按照id的值分别将T1和T2分散到不同的Impalad进程,但是相同的id会散列到相同的Impalad进程,这样每一个Join之后是全部数据的⼀部分

  2. T1与T2Join之后的结果数据再与T3表进行Join,此时T3表采用Broadcast⽅式把⾃己全部数据(id列) 广播到需要的Impala节点上

  3. T1,T2,T3Join之后再根据Group by执行本地的预聚合,每一个节点的预聚合结果只是最终结果的一部分(不同的节点可能存在相同的group by的值),需要再进行一次全局的聚合。

  4. 全局的聚合同样需要并行,则根据聚合列进行Hash分散到不同的节点执行Merge运算(其实仍然是一次聚合运算),一般情况下为了较少数据的网络传输, Impala会选择之前本地聚合节点做全局聚合⼯作。

  5. 通过全局聚合之后,相同的key只存在于一个节点,然后对于每一个节点进行排序和TopN计算,最终将每一个全局聚合节点的结果返回给Coordinator进行合并、排序、limit计算,返回结果给用户.

Impala使用

Impala的核⼼开发语言是sql语句,Impala有shell命令⾏窗口,以及JDBC等方式来接收sql语句句执行, 对于复杂类型分析可以使用C++或者Java来编写UDF函数。

Impala的sql语法是⾼度集成了Apache Hive的sql语法,Impala⽀持Hive支持的数据类型以及部分Hive 的内置函数

需要注意的几点:

  1. Impala与Hive类似它们的重点都是在与查询,所以像Update,delete等具有更新性质的操作最好不要使⽤用这种⼯具,对于删除数据的操作可以通过Drop Table,Alter Table Drop Partition来实现,更新可以尝试使用Insert overwrite方式
  2. 通常使⽤Impala的方式是数据⽂件存储在Hdfs文件系统,借助于Impala的表定义来查询和管理 Hdfs上的数据文件;
  3. Impala的使用⼤多数与Hive相同,⽐如Impala同样⽀持内外部表,以及分区等,可以借鉴参考 Hive的使用。

Impala-shell命令参数

Impala-shell外部命令

所谓的外部命令指的是不需要进入到impala-shell交互命令行当中即可执行的命令参数。impala-shell后面执⾏的时候可以带很多参数。你可以在启动 impala-shell 时设置,⽤于修改命令执⾏环境。

比如⼏个常见的:

展示Impala默认⽀持的内置函数需要进入Impala默认系统数据库中执⾏,在其它数据库下无法查看!!

show functions;
Impala-shell 内部命令

所谓内部命令是指,进⼊impala-shell命令行之后可以执⾏的语法。

Impala-shell内部命令.png
set explain_level=3;

expalin: 不真正执行任务,只是展示任务的执行计划;

profile:需要任务执行完成后调用,可以从更底层以及更详细的层面来观察我们运行impala的任务,进行调优。

Impala SQL

大部分与Hive类似,参看Hive

order by

Impala ORDER BY⼦句用于根据⼀个或多个列以升序或降序对数据进行排序。 默认情况下,一些数据库按升序对查询结果进⾏排序。

 select * from table_name ORDER BY col_name [ASC|DESC] [NULLS FIRST|NULLS LAST]

如果我们使用NULLS FIRST,表中的所有空值都排列在顶行; 如果我们使用NULLS LAST,包含空值的行将最后排列。

limit、offset

⼀般来说,select查询的resultset中的行从0开始。使⽤offset⼦句,我们可以决定从哪⾥考虑输出。

 select * from employee order by salary limit 2 offset 2;

使用offset关键字要求结果数据必须是排序之后的!!

Impala导入数据

insert into values
insert into select
create table as select

load data⽅式,这种⽅式不建议在Impala中使用,先使用load data⽅式把数据加载到Hive表中,然后使用以上方式插⼊入Impala表中。

Impala的JDBC方式查询

在实际⼯作当中,因为impala的查询比较快,所以可能有会使用到impala来做数据库查询的情况,我们可以通过java代码来进行操作impala的查询

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hx.bigdata</groupId>
    <artifactId>com.hx.bigdata</artifactId>
    <version>1.0</version>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <!-- hadoop -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- hive 文件 -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>2.3.7</version>
        </dependency>
        <!-- Impala -->
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<!--        <dependency>-->
<!--            <groupId>org.apache.hadoop</groupId>-->
<!--            <artifactId>hadoop-common</artifactId>-->
<!--            <version>2.9.2</version>-->
<!--        </dependency>-->
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-common -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-common</artifactId>
            <version>2.3.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-metastore -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-metastore</artifactId>
            <version>2.3.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-service -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-service</artifactId>
            <version>2.3.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>2.3.7</version>
        </dependency>
<!--        &lt;!&ndash; https://mvnrepository.com/artifact/org.apache.hive/hive-exec &ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>org.apache.hive</groupId>-->
<!--            <artifactId>hive-exec</artifactId>-->
<!--            <version>2.3.7</version>-->
<!--        </dependency>-->
  </dependencies>
</project>
package com.hx.impala.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * @program:
 * @description:
 * @date: 2020-07-23 16:18
 **/
public class ImpalaJdbcTest {


    public static void main(String[] args) throws Exception {
        //定义连接impala的驱动和连接url
        String driver = "org.apache.hive.jdbc.HiveDriver";
        String driverUrl = "jdbc:hive2://linux122:21050/default;auth=noSasl";
        //查询的sql语句句
        String querySql = "select * from t1";
        //获取连接
        Class.forName(driver);
        //通过Drivermanager获取连接
        final Connection connection = DriverManager.getConnection(driverUrl);
        final PreparedStatement ps = connection.prepareStatement(querySql);
        //执⾏行行查询
        final ResultSet resultSet = ps.executeQuery();
        //解析返回结果
        //获取到每条数据的列列数
        final int columnCount = resultSet.getMetaData().getColumnCount();
        //遍历结果集
        while (resultSet.next()) {
            for (int i = 1; i <= columnCount; i++) {
                final String string = resultSet.getString(i);
                System.out.print(string + "\t");
            }
            System.out.println();
        }
        //关闭资源
        ps.close();
        connection.close();

    }
}

Impala进阶

Impala的负载均衡

Impala主要有三个组件,分别是statestore,catalog和impalad,对于Impalad节点,每⼀个节点都可以接收客户端的查询请求,并且对于连接到该Impalad的查询还要作为Coordinator节点(需要消耗一 定的内存和CPU)存在,为了保证每一个节点的资源开销的平衡需要对于集群中的Impalad节点做⼀下负载均衡.

DNS做负载均衡方案是最简单的,但是性能⼀般,所以这里我们按照官方的建议使⽤HAProxy实现负载均衡,生产中应该选择一个非Impalad节点作为HAProxy的安装节点

HAProxy方案

1、安装HAProxy

yum install haproxy -y

2、配置文件

vim /etc/haproxy/haproxy.cfg

3、具体配置

#定义管理理界⾯面
listen status
  #管理理界⾯面访问IP和端⼝口 mode http#管理理界⾯面所使⽤用的协议
  bind 0.0.0.0:1080
  option httplog
  #最⼤大连接数
  maxconn 5000
  #30秒⾃自动刷新
  stats refresh 30s
  stats uri /stats
  
listen impalashell
  #ha作为proxy所绑定的IP和端⼝口
  bind 0.0.0.0:25003
  #以4层⽅方式代理理,重要
  mode tcp
  option tcplog
  #调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分
  balance roundrobin
  server impalashell_1 linux121:21000 check
  server impalashell_2 linux122:21000 check
  server impalashell_3 linux123:21000 check
  
listen impalajdbc
  #ha作为proxy所绑定的IP和端⼝口
  bind 0.0.0.0:25004
  #以4层⽅方式代理理,重要
  mode tcp
  option tcplog
  #调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分
  balance roundrobin 
  server impalajdbc_1 linux121:21050 check
  server impalajdbc_2 linux122:21050 check
  server impalajdbc_3 linux122:21050 check

4、启动

 开启: service haproxy start
 关闭: service haproxy stop
 重启: service haproxy restart

5、使用

Impala-shell访问⽅式

impala-shell -i linux123:25003

使用起来⼗分⽅便,区别仅相当于是修改了了⼀个ip地址和端⼝而已,其余不变。

jdbc:hive2://linux123:25004/default;auth=noSasl

Impala集群在操作过程中尽量多给内存,如果内存不能满足使用要求,Impala的执行很可能会报错!!

Impala优化

cloudera官网上的Impala⽂档,原名为《Impala Performance Guidelines and Best Practices》。主要介绍了为了提升impala性能应该考虑的⼀些事情,结合实际考虑:

基本优化策略略

上一篇下一篇

猜你喜欢

热点阅读