• java jdbc 操作 hive 建表 load 数据


     // 需要引入 hadoop & hive  jar 
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    /**
    *   演示了通过java jdbc 操作hive  ,一般企业环境不会这么做 ,hive 目的是去java 编程能力
    *   京东等企业是通过shell or python  封装 hive -e sql 命令进行数据操作 
    *   需要在hive 节点启动 hive --service hiveserver2&
    **/
     
    public class HiveApp {
         
        private static String driver = "org.apache.hive.jdbc.HiveDriver";
        private static String url = "jdbc:hive2://Master:10000/default";
        private static String user = "root"; //一般情况下可以使用匿名的方式,在这里使用了root是因为整个Hive的所有安装等操作都是root
        private static String password = "";
     
        public static void main(String[] args) {
            ResultSet res = null;
             
            try {
                /**
                 * 第一步:把JDBC驱动通过反射的方式加载进来
                 */
                Class.forName(driver);
                 
                /**
                 * 第二步:通过JDBC建立和Hive的连接器,默认端口是10000,默认用户名和密码都为空
                 */
                Connection conn = DriverManager.getConnection(url, user, password); 
                 
                /**
                 * 第三步:创建Statement句柄,基于该句柄进行SQL的各种操作;
                 */
                Statement stmt = conn.createStatement();
                 
                /**
                 * 接下来就是SQL的各种操作;
                 * 第4.1步骤:建表Table,如果已经存在的话就要首先删除;
                 */
                String tableName = "testHiveDriverTable";
                stmt.execute("drop table if exists " + tableName );
                
                 
                stmt.execute("create table " + tableName + " (id int, name string)" + "ROW FORMAT DELIMITED FIELDS TERMINATED BY '	' LINES TERMINATED BY '
    '");
                /**
                 *  第4.2步骤:查询建立的Table;
                 */
                String sql = "show tables '" + tableName + "'";
                System.out.println("Running: " + sql);
                res = stmt.executeQuery(sql);
                if (res.next()) {
                  System.out.println(res.getString(1));
                }
                /**
                 *  第4.3步骤:查询建立的Table的schema;
                 */
                sql = "describe " + tableName;
                System.out.println("Running: " + sql);
                res = stmt.executeQuery(sql);
                while (res.next()) {
                  System.out.println(res.getString(1) + "	" + res.getString(2));
                }
              
                /**
                 *  第4.4步骤:加载数据进入Hive中的Table;
                 */
                String filepath = "/root/Documents/data/sql/testHiveDriver.txt";
                sql = "load data local inpath '" + filepath + "' into table " + tableName;
                System.out.println("Running: " + sql);
                stmt.execute(sql);
              
                /**
                 *  第4.5步骤:查询进入Hive中的Table的数据;
                 */
                sql = "select * from " + tableName;
                System.out.println("Running: " + sql);
                res = stmt.executeQuery(sql);
                while (res.next()) {
                  System.out.println(String.valueOf(res.getInt(1)) + "	" + res.getString(2));
                }
              
                /**
                 *  第4.6步骤:Hive中的对Table进行统计操作;
                 */
                sql = "select count(1) from " + tableName;   //在执行select count(*) 时候会生成mapreduce 操作  ,那么需要启动资源管理器 yarn  : start-yarn.sh 
                System.out.println("Running: " + sql);
                res = stmt.executeQuery(sql);
               
                while (res.next()) {
                  System.out.println("Total lines :" + res.getString(1));
                }    
                 
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   
             
             
     
        }
     
    }

  • 相关阅读:
    设计模式(三)原型模式
    PageHelper在Mybatis中的使用
    设计模式(二) 单例模式
    设计模式(一)简单工厂、工厂方法和抽象工厂
    Java网络编程
    循环控制语句if 、for、case、while
    处理海量数据的grep、cut、awk、sed 命令
    shell脚本的输入以及脚本拥有特效地输出
    shell的变量以及常见符号
    shell的使用技巧
  • 原文地址:https://www.cnblogs.com/TendToBigData/p/10501269.html
Copyright © 2020-2023  润新知