jdbc连接Hive

jdbc连接Hive

1.使用sqoop将stu表导入到hive中

​ 数据库表位于hadoop102上的test数据库

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/test \
--username root \
--password 000000 \
--table stu \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table stu_hive

可以在hive目录下敲 bin/hive 进入到hive客户端

//查看所有的表

show tables;

2.使用jdbc连接并访问hive

1.在hadoop102上面验证jdbc是否能连接hive

可以先敲命令,查看hive服务是否启动,10000是hive的端口号

sudo netstat -anp|grep 10000

如果里面有进程,说明hive服务正在运行,否则需要启动hive服务

[xikuang@hadoop102 hive]$ bin/hive --service hiveserver2   

启动 beeline 客户端(需要多等待一会)

[xikuang@hadoop102 hive]$ bin/beeline -u jdbc:hive2://hadoop102:10000 -n xikuang

如果连接成功,说明jdbc是可以连接hive数据库的;

2.在maven web project中添加hive-jdbc依赖


    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>2.3.0</version>
    </dependency>
    <!--junit 单元测试 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.9</version>
      <scope>test</scope>
    </dependency>

3.在src/test/java目录下单元测试相应的api

TestHiveJDBC.java

@Before表示执行junit之前的操作

@After表示执行Junit之后的操作

@Test 表示正在执行的单元测试

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.sql.*;

/**
 * jdbc操作hive
 */
public class TestHiveJDBC {
    
    private static String driverName="org.apache.hive.jdbc.HiveDriver";
    private static String url="jdbc:hive2://hadoop102:10000";
    private static String user="xikuang";
    private static String password="000000";


    private static Connection conn=null;
    private static Statement stmt=null;
    private static ResultSet rs=null;

    //加载驱动,创建连接
    @Before
    public void init() throws ClassNotFoundException, SQLException {

        Class.forName(driverName);
        conn= DriverManager.getConnection(url,user,password);
        stmt=conn.createStatement();
        System.out.println(conn);
    }
    //创建数据库
    @Test
    public void createDataBase() throws SQLException {
        String sql="create database hive_jdbc_test";
        System.out.println("running:"+sql);
        stmt.execute(sql);
    }

    //查看所有数据库
    @Test
    public void showDataBases() throws SQLException {
        String sql="show databases";
        System.out.println("running: "+sql);
        rs=stmt.executeQuery(sql);
        while(rs.next()){
            String name = rs.getString(1);
            System.out.println(name);
        }
    }
    //删除数据库
    @Test
    public void dropDatabase() throws SQLException {
        stmt.execute("drop database if exists hive_jdbc_test CASCADE ");
    }
    //查询所有表
    @Test
    public void showTables() throws SQLException {
        rs=stmt.executeQuery("show tables");
        while (rs.next()){
            String tableName = rs.getString(1);
            System.out.println(tableName);
        }
    }
    //查找 表中数据
    @Test
    public void queryAll() throws SQLException {
        rs=stmt.executeQuery("select * from stu_hive");
        while (rs.next()){
            int id = rs.getInt(1);
            String name = rs.getString(2);
            String sex = rs.getString(3);
            System.out.println(id+" "+name+" "+sex);
        }
    }



    //统计查询
    @Test
    public void getCount() throws SQLException {
        rs=stmt.executeQuery("select count(1) from staff");
        while(rs.next()){
            int count = rs.getInt(1);
            System.out.println("count: "+count);

        }
    }
    @Test
    public void createExTab() throws SQLException {

        stmt.execute("create external table if not exists student_ext ( " +
                "name string , " +
                "age int , " +
                "agent string  ," +
                "adress struct<street:STRING,city:STRING>) " +
                "row format delimited " +
                "fields terminated by ',' " +
                "collection items terminated by ':'" +
                "lines terminated by '\n' " +
                "stored as textfile " +
                "location '/testData/hive/student1' ");
    }


    @After
    public void close() throws SQLException {
        if(rs!=null){
            rs.close();
        }
        if(stmt!=null){
            stmt.close();
        }
        if(conn!=null){
            conn.close();
        }
    }
}

一次性联邦聚类是一种利用异质性的方法,以获得胜利的策略。在传统的聚类任务中,数据通常集中在一个中央位置进行处理,这存在着数据隐私的风险。而一次性联邦聚类的方法通过将数据分布在不同的本地设备上进行处理,从而能够更好地保护数据隐私。 使用一次性联邦聚类的一个主要优势就是能够处理异构数据。在现实世界中,我们常常面对来自不同来源、结构和属性的数据。传统的聚类算法通常只适用于特定类型的数据,这限制了其广泛的应用。而一次性联邦聚类能够处理来自多个设备的异构数据,并在保持数据本地的同时进行聚类分析。通过融合来自不同设备的数据特征,一次性联邦聚类可以提供更全面、准确的聚类结果。 除了处理异构数据的能力,一次性联邦聚类还具有更好的数据隐私保护。在一次性联邦聚类中,本地设备上的数据不需要传输到中央位置,而是在本地进行处理。这种本地计算的方式可以降低数据隐私泄露的风险,保护用户的个人隐私。同时,一次性联邦聚类还可以采用加密和隐私保护技术,如差分隐私,进一步增强数据隐私保护。 总而言之,一次性联邦聚类是一种利用异质性的策略,能够充分利用来自多个设备的数据特征。它既可以处理来自不同来源的异构数据,又能够保护数据隐私。在当前数据驱动的社会中,一次性联邦聚类为我们提供了一种强大的工具,可以在数据分析和隐私保护方面取得重大的进展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值