目录html
全部cloudera软件下载地址java
http://archive.cloudera.com/cdh5/cdh/5/node
http://archive.cloudera.com/cdh5/mysql
impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具,impala是参照谷歌的新三篇论文(Caffeine、Pregel、Dremel)当中的Dremel实现而来,其中旧三篇论文分别是(BigTable,GFS,MapReduce)分别对应咱们即将学的HBase和已经学过的HDFS以及MapReducelinux
impala是基于hive并使用内存进行计算,兼顾数据仓库,具备实时,批处理,多并发等优势sql
impala是基于hive的大数据分析查询引擎,直接使用hive的元数据库metadata,意味着impala元数据都存储在hive的metastore当中,而且impala兼容hive的绝大多数sql语法。因此须要安装impala的话,必须先安装hive,保证hive安装成功,而且还须要启动hive的metastore服务shell
一、 impala比较快,很是快,特别快,由于全部的计算均可以放入内存当中进行完成,只要你内存足够大数据库
二、 摈弃了MR的计算,改用C++来实现,有针对性的硬件优化apache
三、 具备数据仓库的特性,对hive的原有数据作数据分析vim
四、支持ODBC,jdbc远程访问
一、基于内存计算,对内存依赖性较大
二、改用C++编写,意味着维护难度增大
三、基于hive,与hive共存亡,紧耦合
四、稳定性不如hive,不存在数据丢失的状况
Impala的架构模块:
查询执行
impalad分为frontend和backend两个层次, frondend用java实现(经过JNI嵌入impalad), 负责查询计划生成, 而backend用C++实现, 负责查询执行。
frontend生成查询计划分为两个阶段:
(1)生成单机查询计划,单机执行计划与关系数据库执行计划相同,所用查询优化方法也相似。
(2)生成分布式查询计划。 根据单机执行计划, 生成真正可执行的分布式执行计划,下降数据移动, 尽可能把数据和计算放在一块儿。
上图是SQL查询例子, 该SQL的目标是在三表join的基础上算汇集, 并按照汇集列排序取topN。
impala的查询优化器支持代价模型: 利用表和分区的cardinality,每列的distinct值个数等统计数据, impala可估算执行计划代价, 并生成较优的执行计划。 上图左边是frontend查询优化器生成的单机查询计划, 与传统关系数据库不一样, 单机查询计划不能直接执行, 必须转换成如图右半部分所示的分布式查询计划。 该分布式查询计划共分红6个segment(图中彩色无边框圆角矩形), 每一个segment是能够被单台服务器独立执行的计划子树。
impala支持两种分布式join方式, 表广播和哈希重分布:
表广播方式保持一个表的数据不动, 将另外一个表广播到全部相关节点(图中t3);
哈希重分布的原理是根据join字段哈希值从新分布两张表数据(譬如图中t1和t2)。
分布式计划中的汇集函数分拆为两个阶段执行。第一步针对本地数据进行分组聚合(Pre-AGG)以下降数据量, 并进行数据重分步, 第二步, 进一步汇总以前的汇集结果(mergeAgg)计算出最终结果。
与汇集函数相似, topN也是分为两个阶段执行, (1)本地排序取topN,以下降数据量; (2) merge sort获得最终topN结果。
Backend从frontend接收plan segment并执行, 执行性能很是关键,impala采起的查询性能优化措施有向量执行。 一次getNext处理一批记录, 多个操做符能够作pipeline。LLVM编译执行, CPU密集型查询效率提高5倍以上。IO本地化。 利用HDFS short-circuit local read功能,实现本地文件读取Parquet列存,相比其余格式性能最高提高5倍。
须要提早安装好hadoop,hive,这二个框架,而且hive须要在全部的impala安装的节点上面都要有,由于impala须要引用hive的依赖包,hadoop的框架须要支持C程序访问接口,查看下图,若是有该路径下有这么些文件,就证实支持C接口 .
因为impala没有提供tar包供咱们进行安装,只提供了rpm包,因此咱们在安装impala的时候,须要使用rpm包来进行安装,rpm包只有cloudera公司提供了,因此咱们去cloudera公司网站进行下载rpm包便可,可是另一个问题,impala的rpm包依赖很是多的其余的rpm包,能够一个个的将依赖找出来,也能够将全部的rpm包下载下来,制做成咱们本地yum源来进行安装。咱们这里就选择制做咱们本地的yum源来进行安装
,因此首先咱们须要下载到全部的rpm包,下载地址以下
http://archive.cloudera.com/cdh5/repo-as-tarball/5.14.0/cdh5.14.0-centos6.tar.gz
下载好了以后,保留下,留做备用
因为咱们下载的tar包很是大,大概5个G,解压以后也最少须要5个G的空间,而咱们的虚拟机磁盘有限,不够用了,因此咱们能够为咱们的虚拟机挂载一块磁盘,专门用于存储咱们的tar包
在咱们的虚拟机关机的状态下,在VMware当中新增一块磁盘
分区,格式化,挂载新磁盘
磁盘挂载
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
挂载完成以后,记得从新启动node03机器上面的mysql服务,datanode服务,nodemanager服务,zookeeper服务
启动mysql的服务命令:
/etc/init.d/mysqld start
将咱们5个G的压缩文件上传/data02(本身的目录下)目录下,并进行解压
#将咱们5个G的压缩文件上传/data02(本身的目录下)目录下,并进行解压 cd /data02/ tar -zxvf cdh5.14.0-centos6.tar.gz
镜像源是centos当中下载相关软件的地址,咱们能够经过制做咱们本身的镜像源指定咱们去哪里下载impala的rpm包,这里咱们使用httpd这个软件来做为服务端,启动httpd的服务来做为咱们镜像源的下载地址
这里咱们选用第三台机器做为镜像源的服务端
node03机器上执行如下命令
#node03机器上执行如下命令 yum -y install httpd service httpd start cd /etc/yum.repos.d vim localimp.repo [localimp] name=localimp baseurl=http://node03/cdh5.14.0/ gpgcheck=0 enabled=1
建立apache httpd的读取连接
ln -s /data02/cdh/5.14.0 /var/www/html/cdh5.14.0
页面访问本地yum源,出现这个界面表示本地yum源制做成功
node03/cdh5.14.0
将制做好的localimp配置文件发放到全部须要安装impala的节点上去
#将制做好的localimp配置文件发放到全部须要安装impala的节点上去 cd /etc/yum.repos.d/ scp localimp.repo node02:$PWD scp localimp.repo node01:$PWD
注意:若是须要使用httpd来代理rpm的仓库,发布成为一个http的服务访问
必定要禁用linux的selinux服务
vim /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. #SELINUX=enforcing SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
安装规划
服务名称 | node01 | node02 | node03 |
---|---|---|---|
impala-catalog | 不安装 | 不安装 | 安装 |
impala-state-store | 不安装 | 不安装 | 安装 |
impala-server | 安装 | 安装 | 安装 |
主节点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
node03 机器修改hive-site.xml内容以下
hive-site.xml配置
vim /export/servers/hive-1.1.0-cdh5.14.0/conf/hive-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node03.hadoop.com: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>123456</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> <property> <name>hive.server2.thrift.bind.host</name> <value>node03.hadoop.com</value> </property> ------------------------------------------------------------------------------------------------- #修改部份内容 ------------------------------------------------------------------------------------------------- <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> ------------------------------------------------------------------------------------------------- #修改部份内容 ------------------------------------------------------------------------------------------------- </configuration>
在 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
启动hive的metastore服务
node03
机器启动hive的metastore服务
cd /export/servers/hive-1.1.0-cdh5.14.0 nohup bin/hive --service metastore & nohup bin/hive -- service hiveserver2 &
有两个RunJar表示启动成功
:
注意:必定要保证mysql的服务正常启动,不然metastore的服务不可以启动
全部节点建立文件夹
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
添加到文件末尾:
<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> <!--/var/run/hdfs-socket为目录,dn为文件--> </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>
注意:root用户不须要这一步操做了,实际工做当中普通用户须要这一步操做
#建立文件夹 /var/run/hdfs-sockets/ #给这个文件夹赋予权限,例如若是咱们用的是普通用户,那就直接赋予普通用户的权限 #例如: 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
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
默认配置文件以及添加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的管理界面
访问statestored的管理界面
访问catalog的管理界面
下一篇计划:impala使用教程