前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EMR入门学习之使用Java连接Hive(十)

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

原创
作者头像
披荆斩棘
修改2019-11-20 12:27:08
1.2K0
修改2019-11-20 12:27:08
举报
文章被收录于专栏:乘风破浪乘风破浪

背景

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

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

一、使用maven创建一个工程

添加pom依赖:

代码语言:javascript
复制
<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 中添加打包和编译插件:

代码语言:javascript
复制
<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的端口号

代码语言:javascript
复制
[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。

代码语言:javascript
复制
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));
        }
    }
}

结果:

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
    • 一、使用maven创建一个工程
      • 二、查看hiveserver2的端口号
        • 三、添加集群安全组入站规则
          • 四 、具体代码如下
          相关产品与服务
          弹性 MapReduce
          弹性 MapReduce (EMR) 是基于云原生技术和泛 Hadoop 生态开源技术的安全、低成本、高可靠的开源大数据平台。提供易于部署及管理的 Hive、Spark、HBase、Flink、StarRocks、Iceberg、Alluxio 等开源大数据组件,帮助客户高效构建云端企业级数据湖技术架构。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档