温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢
1.文档编写目的
前面Fayson介绍过《如何使用HAProxy实现Impala的负载均衡》,在Kerberos环境HAProxy的配置与非Kerberos环境下是一样的,只是在Impala的配置上需要做一些修改,接下来本篇文件主要讲述如何在Kerberos环境下使用HAProxy实现Impala的负载均衡。
- 内容概述
1.修改Impala配置
2.Impala shell及JDBC测试
- 测试环境
1.CM和CDH版本为5.11.2
2.采用sudo权限的ec2-user用户操作
3.集群已启用Kerberos
4.HAProxy1.5.18
2.HAProxy安装及配置
本文不再重复如何安装及配置HAProxy了,具体的安装及配置大家可以参考Fayson前面的文章《如何使用HAProxy实现Impala的负载均衡》。
我们在ip-172-31-22-86.ap-southeast-1.compute.internal节点上安装HAProxy服务,通过浏览器访问服务正常
3.Impala配置
1.使用管理员账号登录Cloudera Manager,进入Impala服务
2.搜索“Load Balancer”,在下图所示配置HAProxy的<IP>:<PORT>
3.保存配置,回到CM主页根据提示重启相应服务
4.重启成功
4.Impala Shell测试
使用多个终端同时访问,并执行SQL语句,查看是否会通过HAProxy服务自动负载到其它Impala Daemon节点,由于集群启用了Kerberos,所以在执行Impala shell命令前,需要先获取令牌
1.获取fayson的Kerberos令牌
代码语言:txt复制[ec2-user@ip-172-31-21-45 ~]$ kinit -kt fayson.keytab fayson
[ec2-user@ip-172-31-21-45 ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: fayson@CLOUDERA.COM
Valid starting Expires Service principal
12/22/2017 09:58:57 12/23/2017 09:58:57 krbtgt/CLOUDERA.COM@CLOUDERA.COM
renew until 12/29/2017 09:58:57
[ec2-user@ip-172-31-21-45 ~]$
2.使用Impala shell访问HAProxy服务的25003端口,命令如下
代码语言:txt复制impala-shell -i ip-172-31-22-86.ap-southeast-1.compute.internal:25003
3.打开第一个终端访问并执行SQL
4.同时打开第二个终端访问并执行SQL
通过以上测试可以看到,两个终端执行的SQL不在同一个Impala Daemon,这样就实现了Impala Daemon服务的负载均衡。
5.Impala JDBC测试
如何创建Java工程,Fayson不在赘述。具体请参考《如何使用java代码通过JDBC连接Impala(附Github源码)》
1.配置JDBC的地址为HAProxy服务所在的IP端口为25004,提示:代码块部分可以左右滑动查看噢
代码语言:txt复制package com.cloudera.impalajdbc;
import com.cloudera.utils.JDBCUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import java.io.IOException;
import java.security.PrivilegedAction;
import java.sql.*;
/**
* package: com.cloudera.impala
* describe: 该示例主要讲述通过JDBC连接Kerberos环境下的Impala
* creat_user: Fayson
* email: htechinfo@163.com
* 公众号:Hadoop实操
* creat_date: 2017/11/21
* creat_time: 下午7:32
*/
public class KBSimple {
private static String JDBC_DRIVER = "com.cloudera.impala.jdbc41.Driver";
private static String CONNECTION_URL = "jdbc:impala://ip-172-31-22-86.ap-southeast-1.compute.internal:25004/default;AuthMech=1;KrbRealm=CLOUDERA.COM;KrbHostFQDN=ip-172-31-22-86.ap-southeast-1.compute.internal;KrbServiceName=impala";
static {
try {
Class.forName(JDBC_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("通过JDBC连接Kerberos环境下的Impala");
//登录Kerberos账号
try {
System.setProperty("java.security.krb5.conf", "/Volumes/Transcend/keytab/krb5.conf");
Configuration configuration = new Configuration();
configuration.set("hadoop.security.authentication" , "Kerberos");
UserGroupInformation. setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab("fayson@CLOUDERA.COM", "/Volumes/Transcend/keytab/fayson.keytab");
System.out.println(UserGroupInformation.getCurrentUser() "------" UserGroupInformation.getLoginUser());
UserGroupInformation loginUser = UserGroupInformation.getLoginUser();
loginUser.doAs(new PrivilegedAction<Object>(){
public Object run() {
Connection connection = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(CONNECTION_URL);
ps = connection.prepareStatement("select * from test_table");
rs = ps.executeQuery();
rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.disconnect(connection, rs, ps);
}
return null;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.运行代码,查看运行结果
6.总结
- 在Kerberos环境下使用HAProxy实现Impala负载均衡,需要配置Impala的Load Balance。
- 在Kerberos环境下一旦配置了Impala的LoadBalance,将不能再连单个Impala Daemon,只能连HAProxy。
- 在使用JDBC连接HAProxy时,需要注意JDBC连接串中的KrbHostFQDN要与HAProxy服务的hostname一致,否则会报认证失败的错误。
Github地址:
https://github.com/fayson/cdhproject/tree/master/jdbcdemo/src/main/java/com/cloudera/impalajdbc/KBHAProxySimple.java
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。