示例工程开发

最近更新时间: 2026-03-13 09:03:00

环境准备

开发环境准备

准备项说明
安装JDKJDK 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"