集群准备

安装Hadoop,Hive

  • Impala的安装需要提前装好Hadoop,Hive这两个框架

  • Impala数据存储在HDFS上

  • 在所有的Impala安装的节点上⾯都要有Hive,因为Impala需要引⽤Hive的依赖包,并且Impala直接使用Hive元数据管理数据

  • hadoop的框架需要⽀持C程序访问接⼝,查看下图,如果有该路径有.so结尾⽂件,就证明⽀持C接⼝。


准备Impala的所有依赖包

Cloudera公司对于Impala的安装只提供了rpm包没有提供tar包;所以我们选择使⽤Cloudera的rpm包进⾏Impala的安装,但是另外⼀个问题,Impala的rpm包依赖⾮常多的其他的rpm包,我们可以⼀个个的将依赖找出来,但是这种⽅式实在是浪费时间。

Linux系统中对于rpm包的依赖管理提供了⼀个⾮常好的管理⼯具叫做Yum,类似于Java⼯程中的包管理⼯具Maven,Maven可以⾃动搜寻指定Jar所需的其它依赖并⾃动下载来。Yum同理可以⾮常⽅便的让我们进⾏rpm包的安装⽆需关系当前rpm所需的依赖。但是与Maven下载其它依赖需要到中央仓库⼀样Yum下载依赖所需的源也是在放置在国外服务器并且其中没有安装Impala所需要的rpm包,所以默认的这种Yum源可能下载依赖失败。所以我们可以⾃⼰指定Yum去哪⾥下载所需依赖。

rpm⽅式安装:需要⾃⼰管理rpm包的依赖关系;⾮常麻烦;解决依赖关系使⽤yum;默认Yum源是没有Impala的rpm安装包,所以我们⾃⼰准备好所有的Impala安装所需的rpm包,制作Yum本地源,配置Yum命令去到我们准备的Yun源中下载Impala的rpm包进⾏安装


本地Yum源⽅式


Yum源是Centos当中下载软件rpm包的地址,因此通过制作本地Yum源并指定Yum命令使⽤本地Yum源,为了使Yum命令(本机,跨⽹络节点)可以通过⽹络访问到本地源,我们使⽤Httpd这种静态资源服务器来开放我们下载所有的rpm包。

1. Linux121安装Httpd服务器

1
2
3
4
5
6
7
8
#yum⽅式安装httpd服务器
yum install httpd -y

#启动httpd服务器
systemctl start httpd

#验证httpd⼯作是否正常,默认端⼝是80,可以省略
http://Linux121

2. 新建⼀个测试⻚⾯

1
2
3
4
5
6
7
8
9
10
-- 进入httpd默认存放⻚⾯路径
cd /var/www/html/
-- 新建⼀个⻚⾯test.html
vim test.html

<html>
<div style="font-size:100px">
this is a new page!!
</div>
</html>

访问:http://linux121/test.html ,查看测试页面。

注:后续可以把下载的rpm包解压放置到此处便可以供⼤家访问。

3. 下载Impala安装所需rpm包

Impala所需安装包需要到Cloudera提供地址下载:http://archive.cloudera.com/cdh5/repo-as-tarball/5.7.6/cdh5.7.6-centos7.tar.gz

注意:该tar.gz包是包含了Cloudera所提供的⼏乎所有rpm包,但是为了⽅便我们不再去梳理其中依赖关系,全部下载来,整个⽂件⽐较⼤,有3.8G。选择⼀个磁盘空间够的节点,后续还要把压缩包解压所以磁盘空间要剩余10G以上。该包在资料中提供给⼤家。


上传该安装包到/opt/lagou/software,并解压缩到

1
2
cd /opt/lagou/software
tar -zxvf cdh5.7.6-centos7.tar.gz

4. 使⽤Httpd盛放依赖包

1
2
-- 创建软链接到/var/www/html下
ln -s /opt/lagou/software/cdh/5.7.6 /var/www/html/cdh57

验证: http://linux121/cdh57/ ,查看依赖是否已显示。


如果提示403 forbidden,此时需要 vim /etc/selinux/config 修改配置,将SELINUX=enforcing改为SELINUX=disabled


修改之后要记得重启机器!!之前修改过可以不⽤修改!!

5. 修改Yum源配置⽂件

1
2
3
4
5
6
7
8
9
10
11
cd /etc/yum.repos.d

#创建⼀个新的配置⽂件
vim local.repo

#添加如下内容
[local]
name=local
baseurl=http://Linux121/cdh57/
gpgcheck=0
enabled=1

name:对于当前源的描述,值要与上面[]里的值一致

baseurl:访问当前源的地址信息

gpgcheck: 1 0,gpg校验

enabled:1/0,是否使⽤当前源

6. 分发local.repo⽂件到其它节点

1
rsync-script local.repo

安装Impala

集群规划

服务名称 Linux121 Linux122 Linux123
impala-catalogd 不安装 不安装 安装
impala-statestored 不安装 不安装 安装
impala-server 安装 安装 安装

impala-server:这个进程是Impala真正⼯作的进程,官⽅建议把impala-server安装在datanode节点,更靠近数据(短路读取),进程名impalad

impala-statestored:健康监控⻆⾊,主要监控impala-server,impala-server出现异常时告知给其它impala-server;进程名叫做statestored

impala-catalogd :管理和维护元数据(Hive),impala更新操作;把impala-server更新的元数据通知给其它impala-server,进程名catalogd

官⽅建议statestore与catalog安装在同⼀节点上!!

安装步骤

安装依赖

  • 在Linux123
1
2
3
4
5
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
  • 在Linux121和Linux122
1
2
yum install impala-server -y
yum install impala-shell -y

配置Impala

1. 修改hive-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@Linux123 ~]# cd /opt/lagou/servers/hive-2.3.7/conf

[root@Linux123 conf]# vim hive-site.xml

<!--指定metastore地址,之前添加过可以不⽤添加 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://Linux121:9083,thrift://Linux123:9083</value>
</property>
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>3600</value>
</property>

2. 分发Hive安装包到集群节点

1
2
3
rsync -r /opt/lagou/servers/hive-2.3.7/ Linux122:/opt/lagou/servers/hive-2.3.7/

rsync -r /opt/lagou/servers/hive-2.3.7/ Linux121:/opt/lagou/servers/hive-2.3.7/

3. Linux123启动服务

1
2
3
4
5
-- 启动metastore服务
nohup hive --service metastore &

-- 启动hiveserver2服务
nohup hive --service hiveserver2 &

4. 修改HDFS集群hdfs-site.xml,配置HDFS集群的短路读取

什么是短路读取?

在HDFS中通过DataNode来读取数据。但是,当客户端向DataNode请求读取⽂件时,DataNode就会从磁盘读取该⽂件并通过TCP socket将数据发送到客户端。所谓“短路”是指Client客户端直接读取⽂件。很明显,这种情况只在客户端与数据放在同⼀地点(译者注:同⼀主机)时才有可能发⽣。短路读对于许多应⽤程序会带来重⼤的性能提升。短路读取:就是Client与DataNode属于同⼀节点,⽆需再经过⽹络传输数据,直接本地读取。

要配置短路本地读,需要验证本机Hadoop是否有libhadoop.so


  1. 创建短路读取本地中转站
1
2
#所有节点创建⼀下⽬录
mkdir -p /var/lib/hadoop-hdfs
  1. 修改hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cd /opt/lagou/servers/hadoop-2.9.2/etc/hadoop
vim hdfs-site.xml

<!--打开短路读取开关 -->
<!-- 打开短路读取配置-->
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<!--这是⼀个UNIX域套接字的路径,将⽤于DataNode和本地HDFS客户机之间的通信 -->
<property>
<name>dfs.domain.socket.path</name>
<value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
<!--block存储元数据信息开发开关 -->
<property>
<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.file-block-storage-locations.timeout</name>
<value>30000</value>
</property>
  1. 分发到集群其它节点。重启Hadoop集群。
1
2
3
4
5
6
7
rsync  /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml Linux121:/opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml

rsync /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml Linux122:/opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml

#停⽌,启动Hadoop集群
[root@Linux121 ~]# stop-dfs.sh
[root@Linux121 ~]# start-dfs.sh

5. Impala具体配置

  1. 引⽤HDFS,Hive配置

使⽤Yum⽅式安装impala默认的Impala配置⽂件⽬录为 /etc/impala/conf,Impala的使⽤要依赖Hadoop,Hive框架,所以需要把Hdfs,Hive的配置⽂件告知Impala。

执⾏以下命令把Hdfs,Hive的配置⽂件软链接到/etc/impala/conf下,所有节点都要执⾏此命令!

1
2
3
4
5
ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/core-site.xml /etc/impala/conf/core-site.xml

ln -s /opt/lagou/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml /etc/impala/conf/hdfs-site.xml

ln -s /opt/lagou/servers/hive-2.3.7/conf/hive-site.xml /etc/impala/conf/hive-site.xml
  1. Impala⾃身配置

所有节点创建mysql的驱动包的软链接

1
2
3
4
#创建节点
mkdir -p /usr/share/java

ln -s /opt/lagou/servers/hive-2.3.7/lib/mysql-connector-java-5.1.46.jar /usr/share/java/mysql-connector-java.jar

所有节点更改Impala默认配置⽂件以及添加mysql的驱动包

1
2
3
4
5
vim /etc/default/impala

<!--修改如下内容 -->
IMPALA_CATALOG_SERVICE_HOST=Linux123
IMPALA_STATE_STORE_HOST=Linux123
  1. 所有节点修改bigtop的java_home路径
1
2
3
vim /etc/default/bigtop-utils

export JAVA_HOME=/opt/lagou/servers/jdk1.8.0_161

注意:Apache Bigtop 是⼀个针对基础设施⼯程师和数据科学家的开源项⽬,旨在全⾯打包、测试和配置领先的开源⼤数据组件/项⽬。Impala项⽬中使⽤到了此软件。

  1. 启动Impala
1
2
3
4
5
6
7
# Linux123启动如下⻆⾊
service impala-state-store start
service impala-catalog start
service impala-server start

# 其余节点Linux121,Linux122启动如下⻆⾊
service impala-server start
  1. 验证Impala启动结果
1
2
3
4
5
6
7
8
9
10
11
12
ps -ef | grep impala

[root@linux123 conf]# ps -ef | grep impala
impala 29212 1 1 23:42 ? 00:00:00 /usr/lib/impala/sbin/statestored -log_dir=/var/log/impala -state_store_port=24000
impala 29249 1 21 23:42 ? 00:00:04 /usr/lib/impala/sbin/catalogd -log_dir=/var/log/impala
impala 29341 1 30 23:42 ? 00:00:06 /usr/lib/impala/sbin/impalad -log_dir=/var/log/impala -catalog_service_host=linux123 -state_store_port=24000 -use_statestore -state_store_host=linux123 -be_port=22000

[root@linux122 conf]# ps -ef | grep impala
impala 25233 1 41 23:43 ? 00:00:04 /usr/lib/impala/sbin/impalad -log_dir=/var/log/impala -catalog_service_host=linux123 -state_store_port=24000 -use_statestore -state_store_host=linux123 -be_port=22000

[root@linux121 conf]# ps -ef | grep impala
impala 21992 1 59 23:43 ? 00:00:04 /usr/lib/impala/sbin/impalad -log_dir=/var/log/impala -catalog_service_host=linux123 -state_store_port=24000 -use_statestore -state_store_host=linux123 -be_port=22000

浏览器Web界⾯验证

访问impalad的管理界⾯: http://linux123:25000/


访问statestored的管理界⾯: http://linux123:25010/


注意:启动之后所有关于Impala的⽇志默认都在/var/log/impala 这个路径下,Linux123机器上⾯应该有三个进程,Linux121与Linux122机器上⾯只有⼀个进程,如果进程个数不对,去对应⽬录下查看报错⽇志.

  1. 消除Impala影响,所有节点都要执⾏

由于使⽤Yum命令安装Impala,我们选择使⽤yum⾃动进⾏Impala依赖的安装和处理,所以本次安装默认会把Impala依赖的所有框架都会安装,⽐如Hadoop,Hive,Mysql等,为了保证我们⾃⼰安装的Hadoop等使⽤正常我们需要删除掉Impala默认安装的其它框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
which hadoop
/usr/bin/hadoop

which hive
/usr/bin/hive

#使⽤which命令 查找hadoop,hive等会发现,命令⽂件是/usr/bin/hadoop ⽽⾮我们⾃⼰安装的路径,需要把这些删除掉,所有节点都要执⾏
rm -rf /usr/bin/hadoop
rm -rf /usr/bin/hdfs
rm -rf /usr/bin/hive
rm -rf /usr/bin/beeline
rm -rf /usr/bin/hiveserver2

#重新⽣效环境变量
source /etc/profile
  1. jps 时出现没有名字的进程 或者process information unavailable

解决方法,执行以下命令

1
rm -rf /tmp/hsperfdata_*