环境准备
开发环境准备
| 准备项 | 说明 |
| 安装JDK | JDK 8、JDK11 ,推荐使用 konaJDK,下载地址 |
| 安装和配置 IDE | 按需选择,比如 IntelliJ IDEA 或 Eclipse,示例使用IDEA |
| 安装 Maven | 开发环境基础配置,负责构建 Java 应用程序 |
| Maven 配置准备 | 如果需要本地调试,需要参考 <strong>示例说明</strong> 配置 Maven settings.xml,推荐 Maven 3.6.3,下载地址 |
导入示例工程代码
以下以 IntelliJ IDEA 举例,将示例工程代码导入进行说明。
下载样例代码
https://g-necm8077.coding.net/public/tencentcloud-tbds-examples/tbds-examples/git/files/master
克隆或者直接下载master代码都可以
git clone https://g-necm8077.coding.net/public/tencentcloud-tbds-examples/tbds-examples
导入项目,然后选择JDK、MAVEN和settings文件




样例代码说明
功能说明
演示的实例是样例代码通过JDBC的方式连接和访问Impala引擎
代码逻辑说明
请将 src/impala-examples/impala-jdbc-examples/pom.xml 中的 hadoop.version 升级到您使用的版本。
5313 版本对应:<hadoop.version>3.2.2-TBDS-5.3.1.3</hadoop.version>
public class ImpalaJDBCExample {
private static final Logger LOGGER = LoggerFactory.getLogger(ImpalaJDBCExample.class);
public static void main(String[] args) {
// 参数校验
if (args.length < 5) {
System.err.println(
"Kerberos Usage: ImpalaJDBCExample <impala-host> <impala-port> <principal> <keytab> <sql>");
System.exit(1);
}
// args 共5个
// args[0]、args[1]表示impala daemon的ip和端口,拼接jdbc的url
// args[2]、args[3]分别是用户使用的principal和keytab,用于kerberos认证
// args[4] 为要执行的 sql 语句
final String impalaHost = args[0];
final String impalaPort = args[1];
String principal = args[2];
String keytab = args[3];
final String sql = args[4];
final String krbRealm = principal.substring(principal.lastIndexOf("@") + 1);
// kerberos认证
LOGGER.info("kerberos auth begin");
try {
Configuration conf = new Configuration();
conf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(principal, keytab);
} catch (IOException e) {
LOGGER.error("kerberos auth error", e);
}
LOGGER.info("kerberos auth end");
UserGroupInformation loginUser = null;
try {
loginUser = UserGroupInformation.getLoginUser();
} catch (IOException e) {
LOGGER.error("get login user error", e);
System.exit(1);
}
loginUser.doAs(new PrivilegedAction<Object>() {
public Object run() {
// 加载驱动
try {
Class.forName("com.cloudera.impala.jdbc.Driver");
} catch (Exception e) {
LOGGER.error("driver class load error", e);
}
Connection connection = null;
try {
// 创建连接
String url = String.format(
"jdbc:impala://%s:%s/;AuthMech=1;KrbRealm=%s;KrbHostFQDN=%s;KrbServiceName=hadoop",
impalaHost, impalaPort, krbRealm, impalaHost);
LOGGER.info("url = {}", url);
connection = DriverManager.getConnection(url);
LOGGER.info("jdbc connection created");
// 执行SQL
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
int columnSize = resultSet.getMetaData().getColumnCount();
LOGGER.info("======execute sql result======");
while (resultSet.next()) {
for (int j = 1; j < columnSize; j++) {
LOGGER.info(resultSet.getString(j));
}
}
} catch (Exception e) {
LOGGER.error("execute sql error", e);
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
LOGGER.error("close connection error", e);
}
}
return null;
}
});
}
}
编译出包,拷贝到 TE 机器,执行以下命令连接 impala 查询。
java -jar ImpalaJDBCExample-1.0.jar ${impala_daemon_hostname} 27009 hadoop/10-206-0-90@TBDS-3AP6176L /var/krb5kdc/emr.keytab "show databases"