在ambari中安装部署Impala

大数据

2017-12-08

3847

0

一、Impala简介

 Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。

二、Impala的架构组件

1、Impala Daemon

Impala的核心组件是运行在各个节点上面的impalad这个守护进程(Impala daemon),它负责读写数据文件,接收从impala-shell、Hue、JDBC、ODBC等接口发送的查询语句,并行化查询语句和分发工作任务到Impala集群的各个节点上,同时负责将本地计算好的查询结果发送给协调器节点(coordinator node)。

你可以向运行在任意节点的Impala daemon提交查询,这个节点将会作为这个查询的协调器(coordinator node),其他节点将会传输部分结果集给这个协调器节点。由这个协调器节点构建最终的结果集。在做实验或者测试的时候为了方便,我们往往连接到同一个Impala daemon来执行查询,但是在生产环境运行产品级的应用时,我们应该循环(按顺序)的在不同节点上面提交查询,这样才能使得集群的负载达到均衡。

Impala daemon不间断的跟statestore进行通信交流,从而确认哪个节点是健康的能接收新的工作任务。它同时接收catalogd daemon(从Impala 1.2之后支持)传来的广播消息来更新元数据信息,当集群中的任意节点create、alter、drop任意对象、或者执行INSERT、LOAD DATA的时候触发广播消息。

2、Impala Statestore

Impala Statestore检查集群各个节点上Impala daemon的健康状态,同时不间断地将结果反馈给各个Impala daemon。这个服务的物理进程名称是statestored,在整个集群中我们仅需要一个这样的进程即可。如果某个Impala节点由于硬件错误、软件错误或者其他原因导致离线,statestore就会通知其他的节点,避免其他节点再向这个离线的节点发送请求。

由于statestore是当集群节点有问题的时候起通知作用,所以它对Impala集群并不是有关键影响的。如果statestore没有运行或者运行失败,其他节点和分布式任务会照常运行,只是说当节点掉线的时候集群会变得没那么健壮。当statestore恢复正常运行时,它就又开始与其他节点通信并进行监控。

3、Impala Catalog

Imppalla catalog服务将SQL语句做出的元数据变化通知给集群的各个节点,catalog服务的物理进程名称是catalogd,在整个集群中仅需要一个这样的进程。由于它的请求会跟statestore daemon交互,所以最好让statestored和catalogd这两个进程在同一节点上。

catalog服务减少了REFRESH和INVALIDATE METADATA语句的使用。在之前的版本中,当在某个节点上执行了CREATE DATABASE、DROP DATABASE、CREATE TABLE、ALTER TABLE、或者DROP TABLE语句之后,需要在其它的各个节点上执行命令INVALIDATE METADATA来确保元数据信息的更新。同样的,当你在某个节点上执行了INSERT语句,在其它节点上执行查询时就得先执行REFRESH table_name这个操作,这样才能识别到新增的数据文件。

三、在ambari中部署Impala

1、制作离线impala的镜像源

Impala的安装包是在CDH中,在线安装的话,在许多环境中是不可行的,需要制作离线镜像源。

1)安装yum-utils

yum install yum-utils

2)添加cdh的repo

在/etc/yum.repos.d/中创建cdh.repo

[cloudera-cdh5]
# Packages for Cloudera's Distribution for Hadoop, Version 5, on RedHat	or CentOS 6 x86_64
name=Cloudera's Distribution for Hadoop, Version 5
baseurl=https://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/5/
gpgkey =https://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera    
gpgcheck = 1

3)使用reposync命令同步CDH数据源到本地

reposync -r cloudera-cdh5

PS:如果速度太慢,可以更换中国科技大学的代理镜像源,不过此代理不稳定。

https://cloudera.proxy.ustclug.org/cdh5/redhat/6/x86_64/cdh/5/

4)使用apache发布同步的镜像及添加离线repo

略。(不懂的话可以参考ambari的离线部署

2、安装ambari-impala-service插件

Impala是cloudera 开源的,HDP并没有提供impala的服务组件,所以需要编写一个Impala的ambari插件才能整合进ambari。由于插件已经有前人编写好了,这里直接使用,不重复造轮子了。

Impala-ambari插件地址:

https://github.com/julyme/ambari-impala-service      fork from cas-bigdatalab

1)使用以下git命令来下载插件

 

VERSION=`hdp-select status hadoop-client | sed 's/hadoop-client - \([0-9]\.[0-9]\).*/\1/'`

sudo git clone https://github.com/julyme/ambari-impala-service.git /var/lib/ambari-server/resources/stacks/HDP/$VERSION/services/IMPALA

下载完插件后需要重启ambari-server

PS:此插件是兼容版本较高的ambari,在2.1.2.1版本使用时,出现python的script的代码错误。

根据错误提示,现解决方法有两种:

a、在以下script代码中添加get_stack_root方法。

/usr/lib/python2.6/site-packages/resource_management/libraries/script/script.py

@staticmethod
  def get_stack_root():
    """
    Get the stack-specific install root directory
    :return: stack_root
    """
    from resource_management.libraries.functions.default import default
    stack_name = Script.get_stack_name()
return default("/configurations/cluster-env/stack_root", "/usr/{0}".format(stack_name.lower()))

b、重构Impala-ambari-service插件(未实现)

3、安装Impala

按ambari的正常的安装步骤即可完成安装。

4、修改相关的配置文件

1、在ambari上的hdfs的hdfs-core文件添加自定义属性

<property>
    <name>dfs.client.read.shortcircuit</name> 
   <value>true</value>
</property>

<property>
    <name>dfs.client.read.shortcircuit.skip.checksum</name>
        <value>false</value>
</property>

<property> 
    <name>dfs.datanode.hdfs-blocks-metadata.enabled</name> 
    <value>true</value>
</property>

2、在ambari上的hdfs的hdfs-site添加自定义属性

<property>
    <name>dfs.datanode.hdfs-blocks-metadata.enabled</name> 
    <value>true</value>
</property>
<property> 
    <name>dfs.block.local-path-access.user</name> 
    <value>impala</value>
</property>
<property>
    <name>dfs.client.file-block-storage-locations.timeout.millis</name>
    <value>60000</value>
</property>

3、重启HDFS

5、启动Impala

在Impala中启动Impala后,可以使用Impala-shell来测试。

 

 

转载请注明出处: http://www.julyme.com/20171208/97.html

发表评论

全部评论:0条

Julyme

感觉还行吧。

Julyme的IT技术分享



/sitemap