hadoop—使用java从配置单元表读取记录(通过hivemetastoreclient、hcatalog或webhcat)

z31licg0  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(430)

demo\u read数据库中有一个配置单元表t\u事件。表有超过100000条记录。如何通过JavaAPI读取记录。

bq8i3lrv

bq8i3lrv1#

实际上你不想读所有的数据。您需要将其转换并上传到某个数据库中,或者(如果数据相对较小)将其导出为通用格式(csv、json等)。
您可以使用hivecli、webhcat或jdbc配置单元驱动程序转换数据。

trnvg8h3

trnvg8h32#

可以使用配置单元jdbc驱动程序连接到配置单元表。使用下面的代码进行测试或poc是可以的,但我建议您将结束表移动到hbase(检查phoenix)或mongodb,或者一些基于关系的表,这些表具有低延迟。
为了获得更好的性能,您还可以在配置单元中使用动态分区或某种集群技术。你可以使用下面的代码,我还没有测试过它(把它作为一个例子)。

import java.sql.*;

 public class HiveDB {

 public static final String HIVE_JDBC_DRIVER = "org.apache.hadoop.hive.jdbc.HiveDriver";
 public static final String HIVE_JDBC_EMBEDDED_CONNECTION = "jdbc:hive://";
 private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";

 private Statement getConnection() throws ClassNotFoundException,
            SQLException {
        Class.forName(HIVE_JDBC_DRIVER);
        Connection connection = DriverManager.getConnection(
                HIVE_JDBC_EMBEDDED_CONNECTION, "", "");

        Statement statement = connection.createStatement();
        return statement;
    }

    public static void main(String[] args) {
       HiveDB hiveDB = new HiveDB();
       try {
         Statement statement = hiveDB.getConnection();
         //print each row
         ResultSet resultSet = statement.executeQuery("select * from demo_read.t_event");
         int columns = resultSet.getMetaData().getColumnCount();
         while (resultSet.next()) {
           for ( int i = 0 ; i < columns; ++i) {
              System.out.print(resultSet.getString(i + 1) + " " );
              if (i == 100) break; //print up to 100th rows
           }
           System.out.println();
         }
        statement.close(); //close statement
      } catch (ClassNotFoundException e) {
         //
      } catch (SQLException e) {
         //
      }
    }

 }

相关问题