文章目录
impala
impala是cloudera 公司开源提供的一个sql交互查询的工具,兼具hive的优势,具有批量处理以及实时处理等优势。
impala的优点与缺点:
impala的优点:快,非常快
impala的缺点:内存消耗大,官方推荐每台机器最少128G的内存
impala不提供数据的存储功能,只提供数据的计算的功能。
impala与hive的关系:紧耦合的关系
impala的架构
impala-server:
从节点,计算几点,主要负责执行我们的查询的任务的计算,官方建议 impala-server与每一个datanode安装在一起
impala-catalog:
主节点 主要是存储了元数据信息在两个地方,一个在内存当中,一个在磁盘当中。impala当中的元数据管理的服务
impala-statestore:
主节点,状态存储区,主要存储了一些sql执行的进度信息,状态信息等等
impala的查询计划
impala的查询计划分为两个阶段:
fronted : 使用java来实现,负责生成我们的查询计划
backend :使用的C++来实现,主要负责的是执行我们的查询
fronted前台的查询计划分为两个阶段
第一个阶段:生成单机版的查询计划
第二个阶段:生成分布式的查询计划,将单机版的查询计划,发送到其他机器上
sql语句的优化,其实就是查询计划的优化,单机版的优化策略与分布式的优化策略是一样的
impala的安装
impala没有直接提供 tar.gz的安装包,只提供了源码包和rpm的包
安装可以有两种方式
第一种:使用源码自己编译
第二种:使用rpm包的方式来进行安装
impala的rpm包的下载地址这里依赖包很多,可以采用下面的方法。
rpm的repository仓库的下载地址
这个包含所有软件的rpm的包,后面其他软件也可以用rpm装了。
impala-server三台机器都要安装,涉及到hadoop的一个重要特性,短路读取
挂载磁盘
由于下载的tar包非常大,虚拟机磁盘有限,所以我们可以为我们的虚拟机挂载一块磁盘,专门用于存储我们的tar包。
在第三台虚拟机下新增一块硬盘,
选择将虚拟磁盘拆分成多个文件,选择合适的磁盘大小。
磁盘挂载
df -lh
fdisk -l
开始分区
fdisk /dev/sdb 这个命令执行后依次输 n p 1 回车 回车 w
fdisk -l
格式化我们的分区
mkfs -t ext4 -c /dev/sdb1 格式化我们的分区
mkdir /data02
将我们的分区挂载到/data02目录下
mount -t ext4 /dev/sdb1 /data02
df -lh
将我们的挂载磁盘设置开机启动,避免开机之后挂载的磁盘就没了
echo “/dev/sdb1 /data02 ext4 defaults 0 0” >> /etc/fstab
上传压缩包并解压
cd /data02/
tar -zxvf cdh5.14.0-centos6.tar.gz
制作本地yum源
node03机器上执行以下命令
yum -y install httpd
开启httpd服务,开启后可直接访问node03/
出现test page表示安装成功
service httpd start
这里的locallimp名字需要保持一致
cd /etc/yum.repos.d
vim localimp.repo
[localimp]
name=localimp
baseurl=http://node03/cdh5.14.0/
gpgcheck=0
enabled=1
这里node03/访问的根路径是:/var/www/html
配置中访问的是:/node03/cdh5.14.0/
创建apache httpd的读取链接
ln -s /data02/cdh/5.14.0 /var/www/html/cdh5.14.0
页面访问本地yum源,出现界面表示本地yum源制作成功
将制作好的localimp配置文件发放到所有需要安装impala的节点上去
cd /etc/yum.repos.d/
scp localimp.repo node02:$PWD
scp localimp.repo node01:$PWD
开始安装impala
主节点node03执行以下命令进行安装
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
从节点node01与node02安装以下服务
yum install impala-server -y
所有节点配置impala
- node03 hive-site.xml配置
vim /export/servers/hive-1.1.0-cdh5.14.0/conf/hive-site.xml
添加以下properties
<property>
<name>hive.metastore.uris</name>
<value>thrift://node03.hadoop.com:9083</value>
</property>
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>3600</value>
</property>
- 将hive的安装包发送到node02与node01机器上
在node03机器上面执行
cd /export/servers/
scp -r hive-1.1.0-cdh5.14.0/ node02:$PWD
scp -r hive-1.1.0-cdh5.14.0/ node01:$PWD
- node03启动hive的metastore服务
cd /export/servers/hive-1.1.0-cdh5.14.0
nohup bin/hive --service metastore &
nohup bin/hive -- service hiveserver2 &
- 所有hadoop节点修改hdfs-site.xml添加以下内容
所有节点创建文件夹
mkdir -p /var/run/hdfs-sockets
修改所有节点的hdfs-site.xml添加以下配置,修改完之后重启hdfs集群生效
vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml
添加以下properties
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<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>
将更改过后的文件复制到其他两台机器
scp hdfs-site.xml node02:$PWD
scp hdfs-site.xml node03:$PWD
赋权限
chown -R hadoop:hadoop /var/run/hdfs-sockets/
因为我这里直接用的root用户,所以不需要赋权限了
-
重启hdfs文件系统
node01服务器上面执行以下命令
cd /export/servers/hadoop-2.6.0-cdh5.14.0/
sbin/stop-dfs.sh
sbin/start-dfs.sh -
创建hadoop与hive的配置文件的连接
impala的配置目录为 /etc/impala/conf
这个路径下面需要把core-site.xml,hdfs-site.xml以及hive-site.xml拷贝到这里来,这里采用软连接的方式:
所有节点执行以下命令创建链接到impala配置目录下来
ln -s /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml /etc/impala/conf/core-site.xml
ln -s /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml /etc/impala/conf/hdfs-site.xml
ln -s /export/servers/hive-1.1.0-cdh5.14.0/conf/hive-site.xml /etc/impala/conf/hive-site.xml
- 修改impala的配置文件
所有节点更改impala默认配置文件以及添加mysql的连接驱动包
vim /etc/default/impala
IMPALA_CATALOG_SERVICE_HOST=node03
IMPALA_STATE_STORE_HOST=node03
所有节点创建mysql的驱动包的软连接
ln -s /export/servers/hive-1.1.0-cdh5.14.0/lib/mysql-connector-java-5.1.38.jar /usr/share/java/mysql-connector-java.jar
修改bigtop的java_home路径
vim /etc/default/bigtop-utils
export JAVA_HOME=/export/servers/jdk1.8.0_141
- 启动impala服务
主节点node03启动以下三个服务进程
service impala-state-store start
service impala-catalog start
service impala-server start
从节点启动node01与node02启动impala-server
service impala-server start
查看impala进程是否存在
ps -ef | grep impala
启动之后所有关于impala的日志默认都在/var/log/impala 这个路径下,node03机器上面应该有三个进程,node02与node01机器上面只有一个进程,如果进程个数不对,去对应目录下查看报错日志。
浏览器页面访问:
访问impalad的管理界面
http://node03:25000/
访问statestored的管理界面
http://node03:25010/
访问catalog的管理界面
http://node03:25020
impala使用
impala的语法兼容绝大部分的hive的语法,除了有一些hive的UDF
hive里面的各种hql的语法,包括hive的各种函数,impala基本上都有
hive里面运行的hql的语句一些任务,基本上可以无缝的迁移到impala里面来
impala的shell的交互
不进入impala的shell客户端
查看帮助文档
impala-shell -h
不进入impala的客户端,直接执行我们的查询语句
impala-shell -q “select * from xxx”
与 hive bin/hive -e "select * from xxx"类似
不进入impala的客户端,直接执行我的sql脚本文件
impala-shell -f xxx.sql
与hive bin/hive -f xxx.sql类似
impala-shell -r 全局的刷新
先进入impala的客户端,然后全量的刷新hive的元数据。如果元数据比较多,比较消耗服务器的性能,不推荐使用。
进入impala shell客户端
impala-shell
connect node02;转到node02客户端去
refresh dbname.tablname 局部的刷新 适用于已经存在了的hive表,刷新表的元数据信息,例如hive表增加或者减少了分区
invalidate metadata 全局的刷新 全量的刷新hive当中的元数据信息到impala里面来,性能消耗比较大,适用于hive当中新建数据库或者新建数据库表的情况
explain select * from stu; 查看sql语句的执行计划
profile:适用于查看上一条sql语句的执行的情况
notice
impala不仅可以读取hive当中的数据库以及数据库表信息,并且也可以创建数据库以及数据库表信息
create database myimp;
//权限问题可以用 hdfs dfs -chmod -R 777 /user/hive/warehouse
impala创建了一个数据库,或者一个数据库表,需不需要刷新impala的元数据信息?
不需要,因为impala当中有一个进程catalog,catalog主要是impala当中存储元数据信息的地方
impala当中表数据导入
从hdfs加载数据
load data inpath ‘/user/impala/’ into table user;
insert into table xxx select * from xxx