博客 Impala 安装与⼊⻔案例

Impala 安装与⼊⻔案例

   数栈君   发表于 2024-03-07 11:05  71  0

1 集群准备
1.1 安装Hadoop,Hive
Impala的安装需要提前装好Hadoop,Hive这两个框架,
hive需要在所有的Impala安装的节点上⾯都要有,因为Impala需要引⽤Hive的依赖包,
hadoop的框架需要⽀持C程序访问接⼝,查看下图,如果有该路径有.so结尾⽂件,就证明⽀持C接⼝。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/1617ac94a0069d918a28f55b57896036..png
  

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/73b7c8a0408f6a807a6dce6e76848f36..jpg
  



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命令默认源
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/002500829a8b4adccabb88a6bd13fc9a..jpg
  


本地Yum源⽅式
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/8def1d96e7ca8a8d19679ae6e6a82102..jpg
  


具体制作步骤

Yum源是Centos当中下载软件rpm包的地址,因此通过制作本地Yum源并指定Yum命令使⽤本地Yum源,为了使Yum命令(本机,跨⽹络节点)可以通过⽹络访问到本地源,我们使⽤Httpd这种静态资源服务器来开放我们下载所有的rpm包。

1. Linux121安装Httpd服务器

#yum⽅方式安装httpd服务器器
yum install httpd -y

#启动httpd服务器器
systemctl start httpd

#验证httpd⼯工作是否正常,默认端⼝口是80,可以省略略
http://linux121



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以上。该包在资料中提供给⼤家。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/5f59703420ec9c7d42b306cdcf86b98b..png
  


移动该安装包到/opt/lagou/software
解压缩

tar -zxvf cdh5.7.6-centos7.tar.gz

4. 使⽤Httpd盛放依赖包
创建软链接到/var/www/html下

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

验证

http://linux121/cdh57
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/8c40274b7274e59a82884934e7a6098d..jpg
  


如果提示403 forbidden

vim /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/eb4c122bc33622b41c3ddc3e3b520b7f..jpg
  


修改之后要记得重启机器!!之前修改过可以不⽤修改!!

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 安装Impala
2.1 集群规划
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/8167f3bbaf62224c3bc12ea07adfc68b..jpg
  

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 具体安装步骤
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>
2. 分发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/

3. Linux123启动metastore服务

nohup hive --service metastore &

启动hiveserver2服务

nohup hive --service hiveserver2 &

4. 修改HDFS集群hdfs-site.xml

配置HDFS集群的短路读取

什么是短路读取?

在HDFS中通过DataNode来读取数据。但是,当客户端向DataNode请求读取⽂件时,DataNode就会从磁盘读取该⽂件并通过TCP socket将数据发送到客户端。所谓“短路”是指Client客户端直接读取⽂件。很明显,这种情况只在客户端与数据放在同⼀地点(译者注:同⼀主机)时才有可能发⽣。短路读对于许多应⽤程序会带来重⼤的性能提升。

短路读取:就是Client与DataNode属于同⼀节点,⽆需再经过⽹络传输数据,直接本地读取。

要配置短路本地读,需要验证本机Hadoop是否有libhadoop.so;

进⼊以下⽬录:

cd /opt/lagou/servers/hadoop-2.9.2/lib/native/
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/238c47a3871bd6fd16f645140c313b46..png
  


短路读取配置步骤
1. 创建短路读取本地中转站

#所有节点创建以下⽬录
mkdir -p /var/lib/hadoop-hdfs

2. 修改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>

注:分发到集群其它节点。重启Hadoop集群。

#停⽌集群
stop-dfs.sh
stop-yarn.sh

#启动集群
start-dfs.sh
start-yarn.sh

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.46.jar /usr/share/java/mysql-connector-java.jar
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/d8027b4e3e2e0444117bd287ebf282a1..jpg
  


修改bigtop的java_home路径

vim /etc/default/bigtop-utils

export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_231
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/a9708d9009313d2b98d592bb05edca8c..jpg
  


注意:Apache Bigtop 是⼀个针对基础设施⼯程师和数据科学家的开源项⽬,旨在全⾯打包、测试和配置领先的开源⼤数据组件/项⽬。Impala项⽬中使⽤到了此软件。

启动Impala

#linux123启动如下角色
service impala-state-store start
service impala-catalog start
service impala-server start

#其余节点启动如下角色
service impala-server start

验证Impala启动结果

ps -ef | grep impala

[root@linux123 conf]# ps -ef | grep impala
impala 29212 1 1 23:42 ? 00:00:00
/usr/lib/impala/sbin/statestored -log_dir=/var/log/impala -
state_store_port=24000
impala 29249 1 21 23:42 ? 00:00:04
/usr/lib/impala/sbin/catalogd -log_dir=/var/log/impala
impala 29341 1 30 23:42 ? 00:00:06
/usr/lib/impala/sbin/impalad -log_dir=/var/log/impala -
catalog_service_host=linux123 -state_store_port=24000 -use_statestore -
state_store_host=linux123 -be_port=22000

[root@linux122 conf]# ps -ef | grep impala
impala 25233 1 41 23:43 ? 00:00:04
/usr/lib/impala/sbin/impalad -log_dir=/var/log/impala -
catalog_service_host=linux123 -state_store_port=24000 -use_statestore -
state_store_host=linux123 -be_port=22000

[root@linux121 conf]# ps -ef | grep impala
impala 21992 1 59 23:43 ? 00:00:04
/usr/lib/impala/sbin/impalad -log_dir=/var/log/impala -
catalog_service_host=linux123 -state_store_port=24000 -use_statestore -
state_store_host=linux123 -be_port=22000

浏览器Web界⾯验证

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

访问state stored的管理理界⾯面
http://linux123:25010/

Impalad管理界⾯
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/2fd8cd26e442aaed0151fb688aeac446..jpg
  


Statestore管理界⾯
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/7e94ff8358228d5e2121c58de5802383..jpg
  


注意:启动之后所有关于Impala的⽇志默认都在/var/log/impala 这个路径下,Linux123机器上⾯应该有三个进程,Linux121与Linux122机器上⾯只有⼀个进程,如果进程个数不对,去对应⽬录下查看报错⽇志.

消除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
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/88338f7d41c5e66d3aca287e031dc4c9..png
  


解决⽅式

rm -rf /tmp/hsperfdata_*

2.3 Impala⼊⻔案例
使⽤Yum⽅式安装Impala后,impala-shell可以全局使⽤;进⼊impala-shell命令⾏

impala-shell进⼊到impala的交互窗⼝

[root@linux123 conf]# impala-shell
Connected to linux123:21000
Server version: impalad version 2.3.0-cdh5.5.0 RELEASE (build
0c891d79aa38f297d244855a32f1e17280e2129b)
***********************************************************************************
Welcome to the Impala shell. Copyright (c) 2015 Cloudera, Inc. All rights
reserved.
(Impala Shell v2.3.0-cdh5.5.0 (0c891d7) built on Mon Nov 9 12:18:12 PST 2015)
The SET command shows the current value of all shell and query options.
***********************************************************************************
[linux123:21000] >

查看所有数据库

show databases;

Fetched 0 row(s) in 4.74s
[linux123:21000] > show databases;
Query: show databases
+------------------+
| name |
+------------------+
| _impala_builtins |
| default |
| |
+------------------+
如果想要使⽤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

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

use mydb;

-- 表如果存在则删除
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. 查询数据

[linux122:21000] > select * from t1;
Query: select * from t1
+--------------------+------+-----+--------+
| id | name | age | gender |
+--------------------+------+-----+--------+
| 392456197008193000 | 张三 | 20 | 0 |
| 267456198006210000 | 李四 | 25 | 1 |
| 892456199007203000 | 王五 | 24 | 1 |
| 492456198712198000 | 赵六 | 26 | 2 |
| 392456197008193000 | 张三 | 20 | 0 |
| 392456197008193000 | 张三 | 20 | 0 |
+--------------------+------+-----+--------+
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;

[linux122:21000] > select * from t2;
Query: select * from t2
+--------------------+------+-----+--------+
| id | name | age | gender |
+--------------------+------+-----+--------+
| 392456197008193000 | 张三 | 20 | 0 |
| 392456197008193000 | 张三 | 20 | 0 |
| 392456197008193000 | 张三 | 20 | 0 |
+--------------------+------+-----+--------+
更新元数据
使⽤Beeline连接Hive查看Hive中的数据,发现通过Impala创建的表,导⼊的数据都可以被Hive感知到。

0: jdbc:hive2://linux123:10000> show tables;
+-----------+
| tab_name |
+-----------+
| t1 |
| t2 |
+-----------+

select * from t1;

0: jdbc:hive2://linux123:10000> select * from t1;
+---------------------+----------+---------+------------+
| t1.id | t1.name | t1.age | t1.gender |
+---------------------+----------+---------+------------+
| 392456197008193000 | 张三 | 20 | 0 |
| 267456198006210000 | 李四 | 25 | 1 |
| 892456199007203000 | 王五 | 24 | 1 |
| 492456198712198000 | 赵六 | 26 | 2 |
| 392456197008193000 | 张三 | 20 | 0 |
| 392456197008193000 | 张三 | 20 | 0 |
+---------------------+----------+---------+------------+

⼩结:
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>

————————————————
本文系转载,版权归原作者CH_ENN笔记所有,链接:


https://blog.csdn.net/chengh1993/article/details/112062379    ,如若侵权请联系我们进行删除!  


《数据治理行业实践白皮书》下载地址:
https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack  


0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群