2.1 集群准备

2.1.1 安装Hadoop、Hive

  • Impala的安装需要提前装好Hadoop,Hive这两个框架。impala数据存储在hdfs。
  • hive需要在所有的Impala安装的节点上面都要有,因为Impala需要引用Hive的依赖包。Impala直接使用Hive元数据管理数据。
  • hadoop的框架需要支持C程序访问接口,查看下图,如果该路径有.so结尾文件,就证明⽀持C接口。

image.png

2.1.2 准备Impala的所有依赖包

Cloudera公司对于Impala的安装只提供了rpm包没有提供tar包;所以我们选择使⽤Cloudera的rpm包进⾏Impala的安装,但是另外一个问题,Impala的rpm包依赖非常多的其他的rpm包,我们可以⼀个个的将依赖找出来,但是这种方式实在是浪费时间。
Linux系统中对于rpm包的依赖管理提供了一个非常好的管理工具叫做Yum,类似于Java工程中的包管理⼯具Maven,Maven可以自动搜寻指定Jar所需的其它依赖并自动下载来。Yum同理可以⾮常⽅便的让我们进行rpm包的安装无需关心当前rpm所需的依赖。但是与Maven下载其它依赖需要到中央仓库⼀样Yum下载依赖所需的源也是在放置在国外服务器并且其中没有安装Impala所需要的rpm包,所以默认的这种Yum源可能下载依赖失败。所以我们可以⾃己指定Yum去哪里下载所需依赖。
rpm⽅式安装:需要⾃己管理rpm包的依赖关系;⾮常麻烦;解决依赖关系使用yum;默认Yum源是没有 Impala的rpm安装包,所以我们⾃己准备好所有的Impala安装所需的rpm包,制作Yum本地源,配置Yum命令去到我们准备的Yun源中下载Impala的rpm包进⾏安装。
Yum命令默认源
image.png本地Yum源方式
image.png
具体制作步骤
Yum源是Centos当中下载软件rpm包的地址,因此通过制作本地Yum源并指定Yum命令使用本地Yum 源,为了使Yum命令(本机,跨网络节点)可以通过⽹络访问到本地源,我们使用Httpd这种静态资源服务器来开放我们下载所有的rpm包。
1. Linux121安装Httpd服务器

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

image.png
2. 新建⼀个测试⻚面
httpd默认存放⻚面路径:/var/www/html
新建⼀个⻚面test.html


<html>
  <div style="font-size:100px">
  this is a new page!!
  </div>
</html>

浏览器中访问:http://linux121/test.html
注:后续可以把下载的rpm包解压放置到此处,可以供大家访问。
3. 下载Impala安装所需rpm包
Impala所需安装包需要到Cloudera提供地址下载:
http://archive.cloudera.com/cdh5/repo-as-tarball/5.7.6/cdh5.7.6-centos7.tar.gz
注意:该tar.gz包是包含了Cloudera所提供的几乎所有rpm包,但是为了方便我们不再去梳理其中依赖关系,全部下载来,整个文件⽐较大,有3.8G。选择一个磁盘空间够的节点,后续还要把压缩包解压,所以磁盘空间要剩余10G以上。
image.png
移动该安装包到/opt/lagou/software,解压缩

tar -zxvf cdh5.7.6-centos7.tar.gz
  1. 使用Httpd盛放依赖包
    创建软链接到/var/www/html下
    ln -s /opt/lagou/software/cdh/5.7.6 /var/www/html/cdh57
    
    验证:http://linux121/cdh57/
    image.png
    如果提示403 forbidden,执行以下操作
    vim /etc/selinux/config
    
    将SELINUX=enforcing改为SELINUX=disabled
    image.png
    修改之后要记得重启机器!!之前修改过可以不用修改!!
    5. 修改Yum源配置文件
    cd /etc/yum.repos.d 
    #创建⼀个新的配置文件 
    vim local.repo 
    #添加如下内容
    [local]
    name=local
    baseurl=http://linux121/cdh57/
    gpgcheck=0
    enabled=1
    
    name:对于当前源的描述
    baseurl:访问当前源的地址信息
    gpgcheck: 1 0,gpg校验
    enabled:1/0,是否使⽤当前源
    6. 分发local.repo⽂件到其它节点
    rsync-script local.repo
    

    2.2 安装Impala

    2.2.1 集群规划

    image.png
    Impala⻆色
  • impala-server:这个进程是Impala真正工作的进程,官方建议把impala-server安装在datanode节点,更靠近数据(短路读取),进程名impalad
  • impala-statestored:健康监控⻆色,主要监控impala-server,impala-server出现异常时告知给其它impala-server;进程名叫做statestored
  • impala-catalogd :管理理和维护元数据(Hive),impala更新操作;把impala-server更新的元数据通知给其它impala-server,进程名catalogd

官⽅建议statestore与catalog安装在同一节点上!!

2.2.2 具体安装步骤

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与Linux122

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

配置Impala
1. 修改hive-site.xml

vim 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>
  1. 分发Hive安装包到集群节点(之前分发过可以不做这步)
    rsync -r /opt/lagou/servers/hive-2.3.7/ linux122:/opt/lagou/servers/
    rsync -r /opt/lagou/servers/hive-2.3.7/ linux121:/opt/lagou/servers/
    
  2. Linux123启动metastore服务,启动hiveserver2服务
    nohup hive --serive metastore &
    nohup hive --serive hiveserver2 &
    
  3. 修改HDFS集群hdfs-site.xml

    2.2.3 配置HDFS集群的短路读取

    什么是短路读取?
    在HDFS中通过DataNode来读取数据。但是,当客户端向DataNode请求读取文件时,DataNode就会从磁盘读取该文件并通过TCP socket将数据发送到客户端。所谓“短路”是指Client客户端直接读取⽂件。很明显,这种情况只在客户端与数据放在同一地点(即同一主机)时才有可能发生。短路读对于许多应⽤程序会带来重大的性能提升。
    短路读取:就是Client与DataNode属于同一节点,⽆需再经过⽹络传输数据,直接本地读取。 要配置短路本地读,需要验证本机Hadoop是否有libhadoop.so;
    进⼊目录:
    cd /opt/lagou/servers/hadoop-2.9.2/lib/native
    
    短路读取配置步骤
    1. 创建短路读取本地中转站
    #所有节点创建⼀下目录
    mkdir -p /var/lib/hadoop-hdfs
    #设置目录拥有者,否则启动Hadoop集群会有问题
    chown root /var/lib/hadoop-hdfs
    
  4. 修改hdfs-site.xml
    <!-- impala 短路读取配置 -->
    <!--打开短路读取开关 -->
    <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>
    
    注:分发到集群其它节点。重启Hadoop集群。
    5. Impala具体配置
    引⽤HDFS,Hive配置
    使用Yum⽅式安装impala默认的Impala配置⽂件目录为 /etc/impala/conf,Impala的使⽤要依赖Hadoop,Hive框架,所以需要把Hdfs,Hive的配置⽂件告知Impala。
    执行以下命令把Hdfs,Hive的配置文件软链接到/etc/impala/conf下
    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⾃身配置所有节点更改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
    
    image.png
    修改bigtop的java_home路径
    vim /etc/default/bigtop-utils
    export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
    
    image.png
    注意:Apache Bigtop 是一个针对基础设施工程师和数据科学家的开源项目,旨在全面打包、测试和配置领先的开源⼤数据组件/项目。Impala项⽬中使⽤到了此软件。
    启动Impala
    #linux123启动如下⻆角⾊色
    service impala-state-store start 
    service impala-catalog start 
    service impala-server start
    #其余节点启动如下⻆色
    service impala-server start
    
    验证Impala启动结果
    浏览器web界面验证
    访问impalad的管理界面:http://linux123:25000/
    image.png
    访问statestored的管理界面:http://linux123:25010/
    image.png
    注意:启动之后所有关于Impala的日志默认都在/var/log/impala 这个路径下,Linux123机器上面应该有三个进程,Linux121与Linux122机器上面只有⼀个进程,如果进程个数不对,去对应⽬录下查看报错日志.

    2.2.4 消除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
    
    解决问题:jps时出现没有名字的进程或者process information unavailable
    解决方式:rm -rf /tmp/hsperfdata_*

    2.3 Impala⼊门案例

    使⽤Yum方式安装Impala后,impala-shell可以全局使用;进⼊impala-shell命令行
    impala-shell进⼊到impala的交互窗口
    image.png

查看所有数据库
image.png
如果想要使用Impala ,需要将数据加载到Impala中,如何加载数据到Impala中呢?
使用Impala的外部表,这种适⽤于已经有数据文件,只需将数据⽂件拷贝到HDFS上,创建一张Impala外部表,将外部表的存储位置指向数据文件的位置即可。(类似Hive) 通过Insert方式插入数据,适⽤于我们没有数据文件的场景。
1. 准备数据文件
user.csv

392456197008193000,张三,20,0
267456198006210000,李四,25,1
892456199007203000,王五,24,1
492456198712198000,赵六,26,2
392456197008193000,张三,20,0
392456197008193000,张三,20,0
  1. 创建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.查询数据
    image.png
    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
    image.png
    更新元数据
    使⽤Beeline连接Hive查看Hive中的数据,发现通过Impala创建的表,导⼊的数据都可以被Hive感知到。

    ⼩结

  2. 上⾯案例中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>