一丶 Impala的概述
- impala是个实时的sql查询工具,类似于hive的操作方式,只不过执行的效率极高,号称当下大数据生态圈中执行效率最高的sql类软件。
- impala来自于cloudera,后来贡献给了apache。
- impala工作底层依赖于hive 与hive共用一套元数据存储,在使用impala时,必须保证hive服务是正常可靠的,至少metastore开启。
- impala最大的跟hive不同在于,不在把sql编译成MapReduce程序执行 。
- impala的sql语句几乎兼容hive的sql语句。
二丶Impala的安装部署
1.集群提前安装好hadoop,hive。
hive安装包scp在所有需要安装impala的节点上,因为impala需要引用hive的依赖包。
hadoop框架需要支持C程序访问接口,查看下图,如果有该路径下有这么文件,就证明支持C接口。
2.下载安装包,依赖包
由于impala没有提供tar包进行安装,只提供了rpm包。因此在安装impala的时候,需要使用rpm包来进行安装。rpm包只有cloudera公司提供了,所以去cloudera公司网站进行下载rpm包即可。
下载地址如下:
http://archive.cloudera.com/cdh5/repo-as-tarball/5.14.0/cdh5.14.0-centos6.tar.gz
3.配置本地yum源
3.1上传安装包解压
tar -zxvf cdh5.14.0-centos6.tar.gz
3.2配置本地yum源信息
安装 Apache Server 服务器
yum -y install httpd
service httpd start
chkconfig httpd on
配置本地 yum 源的文件
cd /etc/yum.repos.d
vim localimp.repo
[localimp]
name=localimp
baseurl=http://node-3/cdh5.14.0/
gpgcheck=0
enabled=1
创建 apache httpd 的读取链接
ln -s /cloudera_data/cdh/5.14.0 /var/www/html/cdh5.14.0
确保 linux 的 的 Selinux 关闭
临时关闭:
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
永久关闭:
[root@localhost ~]# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
重启服务 reboot
通过浏览器访问本地 yum 源,如果出现下述页面则成功。
http://192.168.227.153/cdh5.14.0/
将本地 yum 源配置文件 localimp.repo 发放到所有需要安装 impala 的节点。
cd /etc/yum.repos.d/
scp localimp.repo node-2:$PWD
scp localimp.repo node-3:$PWD
4.安装Impala
4.1主节点安装
在规划的 主节点 node-1 执行以下命令进行安装:
yum install -y impala impala-server impala-state-store impala-catalog impala-shell
4.2从节点安装
在规划的 主节点 node-2,node-3 执行以下命令进行安装:
yum install -y impala-server
5.修改hadoop,hive的配置
需要在 3 台机器整个集群上进行操作,都需要修改。hadoop、hive 是否正常
服务并且配置好,是决定 impala 是否启动成功并使用的前提。
5.1修改hive配置
在一台机器配置,scp给其他机器
vim /export/servers/hive/conf/hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node-
1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 绑定运行 hiveServer2 的主机 host,默认 localhost -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node-1</value>
</property>
<!-- 指定 hive metastore 服务请求的 uri 地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://node-1:9083</value>
</property>
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>3600</value>
</property>
</configuration>
将 hive 安装包 cp 给其他两个机器。
cd /export/servers/
scp -r hive/ node-2:$PWD
scp -r hive/ node-3:$PWD
5.2修改hadoop配置
所有节点创建下述文件夹
mkdir -p /var/run/hdfs-sockets
修改所有节点的 hdfs-site.xml 添加以下配置,修改完之后重启 hdfs 集群生效
vim etc/hadoop/hdfs-site.xml
<property>
<!--
打开 DFSClient 本地读取数据的控制,
-->
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<!--
dfs.domain.socket.path 是 Datanode 和 DFSClient 之间沟通的 Socket
的本地路径。
-->
<name>dfs.domain.socket.path</name>
<value>/var/run/hdfs-sockets/dn</value>
</property>
<property>
<name>dfs.client.file-block-storage-
locations.timeout.millis</name>
<value>10000</value>
</property>
<property>
<name>dfs.datanode.hdfs-blocks-
metadata.enabled</name>
<value>true</value>
</property>
把更新 hadoop 的配置文件,scp 给其他机器。
cd /export/servers/hadoop-2.7.5/etc/hadoop
scp -r hdfs-site.xml node-2:$PWD
scp -r hdfs-site.xml node-3:$PWD
5.3重启hadoop,hive
在node01启动hive
cd /export/servers/hive
nohup bin/hive --service metastore &
nohup bin/hive --service hiveserver2 &
5.4复制hadoop,hive配置文件
impala 的配置目录为/etc/impala/conf,这个路径下面需要把 core-site.xml,
hdfs-site.xml 以及 hive-site.xml
所有节点执行以下命令
cp -r /export/servers/hadoop-2.7.5/etc/hadoop/core-site.xml
/etc/impala/conf/core-site.xml
cp -r /export/servers/hadoop-2.7.5/etc/hadoop/hdfs-site.xml
/etc/impala/conf/hdfs-site.xml
cp -r /export/servers/hive/conf/hive-site.xml /etc/impala/conf/hive-site.xml
6.修改impala配置
6.1 修改 impala 默认配置
所有节点更改 impala 默认配置文件
vim /etc/default/impala
IMPALA_CATALOG_SERVICE_HOST=node03
IMPALA_STATE_STORE_HOST=node03
6.2 添加 mysql 驱动
通过配置/etc/default/impala 中可以发现已经指定了 mysql 驱动的位置名字。
使用软链接指向该路径即可(3 台机器都需要执行)
ln -s /export/servers/hive/lib/mysql-connector-java-
5.1.32.jar /usr/share/java/mysql-connector-java.jar
6.3修改bigtop配置
修改 bigtop 的 java_home 路径(3 台机器)
vim /etc/default/bigtop-utils
export JAVA_HOME=/export/servers/jdk1.8.0_141
7.启动,关闭impala服务
主节点 node01启动以下三个服务进程
service impala-state-store start
service impala-catalog start
service impala-server start
从节点启动 node02 与 node03 启动 impala-server
service impala-server start
查看 impala 进程是否存在
ps -ef | grep impala
关闭impala只需要改为stop即可
如果遇到关闭不了的僵尸进程:
就去/tmp把他删了
7.1 impala web ui
访问 impalad 的管理界面 http://node03:25000/
访问 statestored 的管理界面 http://node03:25010/
三丶impala-shell命令参数
1 . impala-shell 外部命令
外部命令是指不需要进入impala-shell交互命令行就可以执行的命令,可以在启动 impala-
shell 时设置,用于修改命令执行环境
- impala-shell –h 可以帮助我们查看帮助手册。也可以参考课程附件资料。比如几个常见的:
- impala-shell –r 刷新 impala 元数据,与建立连接后执行 REFRESH 语句效果相同
- impala-shell –f 文件路径 执行指的的 sql 脚本文件。
- impala-shell –i 指定连接运行 impalad 守护进程的主机。默认端口是21000。你可以连接到集群中运行 impalad 的任意主机。
- impala-shell –o 保存执行结果到文件当中去。
2 . impala-shell 内部命令
- connect hostname 连接到指定的机器 impalad 上去执行
- refresh dbname.tablename 增量刷新,刷新某一张表的元数据,主要用于刷新 hive 当中数据表里面的数据改变的情况。
- invalidate metada 全量刷新,性能消耗较大,主要用于hive中新建数据库或者数据表时刷新
- explain 用于查看sql语句执行计划explain 的值可以设置成 0,1,2,3 等几个值,其中 3 级别是最高的,可以打印
出最全的信息
set explain_level=3;
profile 命令 执行 sql 语句之后执行,可以
打印出更加详细的执行步骤,主要用于查询结果的查看,集群的调优等