Scala远程访问Hive数据仓库

  通过Hue等远程WebUI界面访问Hive,效率往往受到网络限制,并且不能将Hive数据仓库的内容实现导入导出到本地,因此,今天笔者就通过简单的Scala代码远程连接Hive,查询Hive表数据并将数据转存到本地。另外,用Scala查询到数据后,我们还可以将查询到的ResultSet集合转化为RDD或者DataFrame进行scala的算子运算,非常方便,这些实现,笔者会后续更新。
        接下来,我们实现Scala连接服务器上的Hive,导出数据到本地这一功能。
第一步:启动HiveServer2
    在服务器端启动hive的远程连接服务,命令如下:
hive --service hiveserver2 10000

启动并指定了服务端口,一般,hive远程连接端口默认配置为10000,因此,也可以直接写为

hive --service hiveserver2
第二步:新建Scala工程,导入Hadoop及Hive的依赖jar包,注意,一定要将所有包导入工程下,否则可能会报错
第三步:import连接包

import java.io.{File, PrintWriter}
import java.sql.DriverManager
import java.sql.SQLException
import java.sql.Connection
import java.sql.ResultSet
import java.sql.Statement

第四步:配置驱动及连接方式

val driverName:String = "org.apache.hadoop.hive.jdbc.HiveDriver"
  try {
    Class.forName(driverName)
  } catch{
    case e: ClassNotFoundException =>
      println("Missing Class",e)
  }

第五步:连接查询,取数据

def main(args: Array[String]): Unit = {
    //host为服务器IP,dc_app连接的数据库名
    val con:Connection = DriverManager.getConnection("jdbc:hive2://host/dc_app")
    val stmt:Statement=con.createStatement()
    ////查询的结果放到的ResultSet
    val res:ResultSet = stmt.executeQuery("show tables")
    //查看一下都有哪些表格
    while (res.next()){
      println(res.getString(1))
    }
    //查询某一张表,放进JSONObject,存入文件
    val jSONArray:JSONArray=new JSONArray()
    val rs:ResultSet=stmt.executeQuery("select * from dc_app.app_province_sales_mon")
    //该表格的列数
    println(rs.getMetaData.getColumnCount)
    //第一行第一列的列名
    println(rs.getMetaData.getColumnName(1))
    //写入位置
    val writer = new PrintWriter(new File("C:\\Users\\yangt\\Desktop\\es.txt"))
    //封装成JSON数组
      writer.println("[")
    //遍历封装成JSONObject,写入文件
    while (rs.next()){
      val jSONObject:JSONObject = new JSONObject()
      for (i <- 1 to rs.getMetaData.getColumnCount){
        if (rs.getObject(i) != null){
          jSONObject.put(rs.getMetaData.getColumnName(i).split("\\.")(1),rs.getString(i))
        } else {
          jSONObject.put(rs.getMetaData.getColumnName(i).split("\\.")(1),"null")
        }
      }
      writer.println(jSONObject+",")
      println(jSONObject.toString)
      jSONArray.add(jSONObject)
    }
      writer.println("]")
      writer.close()
  }

猜你喜欢

转载自blog.csdn.net/kakaluoteyy/article/details/80084089