专栏首页云上大数据EMR入门学习之使用Java连接Hive(十)
原创

EMR入门学习之使用Java连接Hive(十)

背景

Hive 中集成了 Thrift 服务。Thrift 是 Facebook 开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发。Hive 的 HiveServer2 就是基于 Thrift 的,所以能让不同的语言如 Java、Python 来调用 Hive 的接口。对于 Java,Hive 提供了 jdbc 驱动,用户可以使用 Java 代码来连接 Hive 并进行一系列操作。

本节将演示如何使用 Java 代码来连接 HiveServer2

一、使用maven创建一个工程

添加pom依赖:

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>2.3.3</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.8.4</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.8.4</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.8.4</version>
</dependency>

继续在 pom.xml 中添加打包和编译插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

二、查看hiveserver2的端口号

[root@10 ~]# su Hadoop
[hadoop@10 root]$ cd /usr/local/service/hive/
[hadoop@10 hive]$ cat conf/hive-site.xml

<property>

<name>hive.server2.thrift.port</name>

<value>7001</value>

</property>

即HiveServer2 的端口号是7001

三、添加集群安全组入站规则

在创建EMR集群的时候,可能我们没有开HiveServer2的端口号,所以无法使用Java连接到hive,所以在这里我们必须在安全组添加HiveServer2的入站规则,具体操作则是进入控制台,找到EMR集群,点击右侧的【详情】进入并复制安全组ID,如图:

接下来在控制台,通过左上方的【云产品】->【云服务器】->【安全组】,右侧搜索安全组ID,Ctrl+v复制安全组ID搜索,点击进入,添加入站规则,如图添加HiveServer2端口的入站规则:

四 、具体代码如下

说明:hive的超级用户是hadoop。

import java.sql.*;

public class HiveTest {

    private static String driverName =
            "org.apache.hive.jdbc.HiveDriver";
    public static void main(String[] args)
            throws SQLException {
        try {
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.exit(1);
        }
        Connection con = DriverManager.getConnection(
                "jdbc:hive2://*.*.*.*:7001/default", "hadoop", "");
        Statement stmt = con.createStatement();
        String tableName = "HiveTestByJava";
        stmt.execute("drop table if exists " + tableName);
        stmt.execute("create table " + tableName +
                " (key int, value string)");
        System.out.println("Create table success!");
        // show tables
        String sql = "show tables '" + tableName + "'";
        System.out.println("Running: " + sql);
        ResultSet res = stmt.executeQuery(sql);
        if (res.next()) {
            System.out.println(res.getString(1));
        }
        // describe table
        sql = "describe " + tableName;
        System.out.println("Running: " + sql);
        res = stmt.executeQuery(sql);
        while (res.next()) {
            System.out.println(res.getString(1) + "\t" + res.getString(2));
        }
        sql = "insert into " + tableName + " values (42,\"hello\"),(48,\"world\")";
        stmt.execute(sql);
        sql = "select * from " + tableName;
        System.out.println("Running: " + sql);
        res = stmt.executeQuery(sql);
        while (res.next()) {
            System.out.println(String.valueOf(res.getInt(1)) + "\t"
                    + res.getString(2));
        }
        sql = "select count(1) from " + tableName;
        System.out.println("Running: " + sql);
        res = stmt.executeQuery(sql);
        while (res.next()) {
            System.out.println(res.getString(1));
        }
    }
}

结果:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • EMR入门学习之通过SparkSQL操作示例(七)

    导语:Spark 为结构化数据处理引入了一个称为 Spark SQL 的编程模块。它提供了一个称为 DataFrame 的编程抽象,并且可以充当分布式 SQL ...

    和大数据一起走过的路程
  • EMR入门学习之创建EMR集群(二)

    集群是弹性 MapReduce( EMR )提供托管 服务的基本单元,也是用户使用和管理 EMR 服务的主要对象。本文为您介绍通过腾讯云官网控制台,快速创建 E...

    和大数据一起走过的路程
  • EMR入门学习之集群的监控与告警(四)

    登录【控制台】,选择【弹性MapReduce】进入左侧的【集群监控】,可以看到监控分为服务监控与主机监控

    和大数据一起走过的路程
  • Java IO流

    package cn.bdqn.demo; import java.io.File; import java.io.FileInputStream; impo...

    房上的猫
  • QJson第三方JSON处理库

    JSON(JavaScript对象表示法)是一种轻量级的数据交换格式。它可以表示整数,实数,字符串,值的有序序列以及名称/值对的集合。

    Qt君
  • 联想ThinkSystem机器安装2008R2详细教程

    自联想发布新品服务器以来,关于新品机器能否安装2008的声音此起彼伏尤其是阵列卡的驱动让众多尝试安装的人折了腰,现在我将整个安装过程做个详细的教程,希望能帮到各...

    Mr.Mao Notes
  • 企业级SpringBoot与Dubbo的并用

    SpringBoot越来越热门以至于达到烂大街可见的程度,而Dubbo这个基于二进制的微服务框架又捐献给Apache孵化,如果不会如何使用那么是不是很不好意思呢...

    lyb-geek
  • 用Python分析支付宝轻定投收益--Python数学建模实例

    免责声明 本人对金融理财一窍不通,本文纯属个人自娱自乐,如造成投资误导概不负责 另欢迎理财达人批评指正 前两天发现支付宝里面多了个轻定投的功能,作为一名缺钱缺...

    小小科
  • Flutter 省会选择器

    上篇怎么说了Flutter的数据通信简单流程,这次我们基于此写一个plugin实现省会选择器

    大话swift
  • 互动直播推出有趣新特性

    腾讯视频云为您提供:云直播、互动直播、点播、音视频通信、鉴黄等能力,我们把腾讯18年的音视频技术积累,变成全套的服务和源码,提供给您!

    腾讯云视频

扫码关注云+社区

领取腾讯云代金券