开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第二阶段): CDH 搭 建_Impala】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/677/detail/11779
CDH 搭 建_Impala
安装倒数第二个工具,impala,安装的目的是因为 kudu 只支持一些 nosyl,有增,删,改等操作,这些api有时候使用起来也没那么舒服,所以需要使用 kudu 和 impala 整合一下,使用 imoala 进行 sql 解析,解析完成之后,执行计划直接落到 sql中,在 kudu 中进行 project,来进行一些相关的操作,然后将这些内容查询出来,这就是 kudu 和 impala之间的一些配合使用。Kudu 没有 SQL 解析引擎,因为 Cloudera 准备使用 Impala 作为 Kudu 的 SQL 引擎,所以既然使用 Kudu 了,Impala 几乎也是必不可少的,安装 Impala 之前,先了解以下 Impala 中有哪些服务。
一、 CDH 搭建_Impala
Catalog Impala 的元信息仓库[但是不同的是这个 Catalog 强依赖 Hive 的 MetaStore, 会从 Hive 处获取元信息 Catalog Impala 的元信息仓库,这点跟我们想象的不太一样,Impala 是强依赖于 hive 的,catalog 是 java 写的,要去读取 hive 的 metastore,要和 hive 进行配合。意思就是说自身会产生数据,但是是会和hive 的 metastore进行同步的。
StateStore 是 Impala 的协调节点,负责异常恢复相当于 kudu metastore 这样一个角色。Kudu 本身也是类似于 mpp 的一个架构,,impala 也是一个类似于 mpp 的一个架构。Impala 和 kudu 从架构上来看是非常相似的。StateStore 就是一个非常轻的主节点,负责异常恢复以及协调工作。
还有一个最重要的服务,ImpalaServer Impala 是 MPP 架构,这是 Impala 处理数据的组件,会读取 HDFS,所以-般和 DataNode 部署在一起, 提升性能,每个 DataNode 配一个 ImpalaServer 用于执 行 impala 的一些计划,例如使用impala来执行一个 secure,假如有三个 note 语句,中间有一个impala,可以编写一段secure语句: select*from xxx
,因为要查询数据,所以这条数据会发给 impala,但是 impala 和 hive一样,本身并不存储数据,因此他就访问一些数据库,这就叫做 impala server,从进程的角度叫做 impalad。Impalad 就是 impala中最重要的一个部分。一个 impala 就对应一个 hdf 中的 datanode,三个 impala 可以寻找三个不同的 datanode,来进行不同的任务,所以 impalad 就是负责具体的任务执行的。这个 impalad 负责某个语句之后会同步给其他人的。所以, cdh01上应该有 Catalog 和StateStore, 而不应该有 ImpalaServer ,因为 cdh01 中没有 DataNode
接下来进行安装,首先需要查看在什么样的节点上安装什么样的程序,然后就安装所需的软件包,之后进行配置,再之后就进行启动,检验配置是否完成。在 cdh01上安装 impala-state-store,impala-catalog,不安装 server 和 impalad,因为在cdh01 上没有 datanode,在 cdh02 上安装一个 impala-server,因为 chh02上是有 datanode 的。
1. 安装 cdh01中的软件包
安装主节点 cdh01所需要的软件包yum install -y impala impala-state-store impala-catalog impala -shell
进入 cdh01中:
[ root@cdh01 kudu]# yum install -y impala impala-state-store impala-catalog impala -shell
2、安装其他一些节点所需要的安装包
复制到 cdh02中
yum install -y impala impala-server
cdh03:
yum install -y impala impala-server
在 cdh03中只装 impala-server,并不安装 state store,statelog 等,
Impala 样的一些安装就进行完成了:
进入 cdh02中,
[ root@cdh02 kudu]# yum install -y impala impala-server
进入 cdh03上
[ root@cdh03 kudu]# yum install -y impala impala-server
3、对所有节点进行配置
Impala 是强依赖 hive 的,hive 又需要读取hdif中的一些内容,impala 也要读取 hive 中 的一些内容,如果要读取 hive 中的内容,就需要两个相应的配置文件,如果和 hive 整合,来读取 metastore 中的一些内容的话,还需要一个配置文件叫做 hive-site.xml。现在要将这三个文件都链接到 impala 中。仍旧使用 ln-s 软链接到 hadoop core-site,链接到 impala 的 conf 内
软链接 Impala 所需要的 Hadoop 配置文件,和 Hive 的配置文件 Impala 需要访问 Hive 的 MetaStore ,所以需要 hive-site. xml 来读取其位置 Impala 需要访问 HDFS ,所以需要读取 hdfs-site. xml来获取访问信息,同时也需要读取 core-site.xml 获取一些信息Ln -S /etc/hadoop/conf/core-site.xml /etc/ impala/conf/core-site. xml
Ln -S /etc/hadoop/conf/hdfs-site. xml /etc/impala/conf/hdfs-site. xml
In -S /etc/hive/conf/hive-site. xml /etc/impala/conf/hive-site. xml
配置 Impala 的主服务位置,以供 ImpalaServer(Impalad) 访问,修改 Impala 的默认配置文 件/etc/default/impala, /etc/default 往往放置 CDH 版本中各组件的环境变量类的配置文件 IMPALA_ CATALOG_ SERVICE_ HOST=cdh01
IMPALA_ STATE_ STORE HOST=cdh01
使用Ln -S /etc/hadoop/conf/core-site.xml,进行到软链接,连接到 impala,conf中,
操作:
拷贝三条指令到小窗口中,然后执行
[ root@cdh01 ~]# Ln -S /etc /hadoop/conf/core-site. xml /etc/ impala/conf/core-site . xmL
[ root@cdh02 ~]# Ln -S /etc /hadoop/conf/hdfs-site. xml /etc/ impala/con f/hdfs-site . xml
[ root@cdh03 ~]# Ln -S /etc/hive/conf/hive-site. xml /etc/ impala/conf/hive-site. Xm
配置完成
修改内容:
修改环境变量都需要进入:etc,default 下,
[ root@cdh01 kudu]# cd /etc /de fault/
[ root@cdh0l default]# Ls
[ root@cdh0l default]#vim.impala
IMPALA_ 默认访问的是127.0.0.1
CATALOGSERVICE_HOST=127.0.0.iIMPALA_STATE_STORE_HOST=127.0.0.1
修改为cdh01,这样在 cdh02 和 cdh03上就都能访问了。
IMPALASTATE STORE PORT=24000
IMPALA_ BACKEND_PORT=22000
IMPALA LoG_DIR=/var/log/ impala
IMPALA_CATALOG_ARGS=" -log
dir=${IMPALA_LOG_DIR]"
IMPALA_STATE_STORE_ARGS=" "
进入这个环境变量,在此处添加内容,要添加在 hive 的 kudumaster 的位置,因为要使用 impala访问 kudu,就必须能访问到 kudu,就需要添加一些 kudu 的 master,这一步的添加也可以不做,这一步在创建 impala 表的时候,可以手动指定 impala 的位置,一般情况是需要整合的。将光标放到双引号里面,回车,然后四个空格,因为整个ARGS是一个字符串,得配到字符串里面,配到外面就没有用了。
--kudu_masters_hosts=cdh01: 7051“
Cdh02:
[ root@cdh02~]# vi /etc/ default/impala
因为要修改环境变量,环境变量一般都在default,就cdh版本来说。
第一步修改CATALOG地址IMPALA_CATALOG_SERVICE_HoST=cdh01
IMPALA_CATALOG_STORE_HoST=cdh01
光标置于引号内,四个空格,
--kudu master hosts=cdh01:7051"
保存并且退出
如果有多个 master,就需要在数据之间用逗号隔开
Cdh03:
[ root@cdh02~]# vi /etc/ default/impala
IMPALA_CATALOG_SERVICE-HOST=cdh01
IMPALA_CATALOG_STORE_HoST=cdh01
--kudu master hosts=cdh01:7051"
整个配置就配置完成了,就可以进行相应的启动了
4.启动
Cdh03
[ root@cdh03 ~]# vi /etc/default/impala
[ root@cdh03 ~]# service impala-server start
started Impala Server ( impalad) :
[root@cdh03~]#Redirectingstdoutto/var/log/impala/impalad.INFORedirecting stderr to /var/log/impala/impalad.ERROR
现在此处有一个报错,报错到 impala error 中,
查看错误:
[root@cdh03~]# tail -100f /var/log/impala/impalad.ERROR
Call From cdh83.itcast.cn/127.0.0.1 to cdhe1:8020 failed on connection exception: java.net.ConnectException:Connection refused;Formoredetailssee:http://wiki.apache.org/hadoop/ConnectionRefused
现在问题在于连接不到8020,8020本来是 cativity 状态的,现在问题就很好的确定了。本来出现问题是需要重新进行一遍,这个问题是希望大家看到,这个问题如何解决,简单来说,现在问题在于连接不到8020。
解决:先进入 cdh01上,
[root@cdh01 hadoop~hdfs]# vi /etc /hosts
可以看到host文件,在这个文件中,可以找到主机名,
127.0.0. 1cdh01.itcast.cn cdh02 localhost localhost.localdomain localhost4 localhost4.localdomain4
localhostlocalhost.localdomain localhost6 localhost6.localdomain6
192.168.169.101 cdh01.itcast.cn cdh01
192.168.169.102 cHh02.itcast.cn cdh02
192.168.169.103 cdh03.itcast.cn cdh03
cdh01.itcast.cn这是找到的第一个主机名,对应的ip是:127.0.0. 1所以问题在于会将8020和50070都绑定到127.0.0.1
解决办法:
删掉 cdh01.itcast.cn,直接把 hostname 删掉,
[ root@cdh01 hadoop-hdfs]#vi /etc/hosts
[root@cdh01 hadoop-hdfs]# service hadoop-hdfs-name restarthadoop-hdfs-name : unrecognized service
[root@cdh01 hadoop-hdfs]# service hadoop-hdfs-namenode restartstopping namenode
Stopped Hadoop namenode :
starting namenode,logging to /varflog/hadoop-hdfs /hadoop-hdfs -namenode-cdh01.itcast.cn.out
进入浏览器,访问:192.1698.169.101:50070
确定8020是否也能访问,
[ root@cdhe1 hadoop-hdfs]# netstat -nlp
能看到8020已经绑定到192.168.169.101这个 host 上了。下面这些是绑定在127上面,就不可以。
所以host里面的内容还是有要求的。最好的修改方式是将127的定义挪到最后一行,也是可以的。回到 cdh03上,
[ root@cdh03 ~]# ls
anaconda-ks.cfginstall.log install.log.syslog
可以查看25000的端口,对应的是 impala 的端口,默认情况下需要等待一会才能启动
然后打开浏览器,输入03的 ip 地址,192.168.169.101:25000,暂时无法访问,所以继续进行,再回来进行测试。
Cdh02:
[root@cdh02 impala]# service impala-server start
started Impala Server ( impalad) :
Cdh01:
[root@cdh01 hadoop-hdfs]# service impala-state-store startStarted Impala State Store Server (statestored):
[oK]
[root@cdh01 hadoop-hdfs]# service impala-catalog start
Started Impala Catalog Server (catalogd):
[OK]
[ root@cdhe1 hadoop-hdfs]#
打开浏览器:cdh03
Cdh02:192.168.169.102:25000
两个 impala 都可以访问,说明搭建成功。但要注意,host name 从上至下第一个 ip 地址是什么,8020会绑定第一个地址,所以要修改 host。