连接到 IntelliJ 中的现有 Hive(使用 SBT 作为构建)

Connect to Existing Hive in IntelliJ (using SBT as build)

我的 ubuntu 机器上有一个现有的配置单元。我只是想通过 Apache Spark SQL 在配置单元中创建一个 table。我使用 IntelliJ 进行开发。

我的build.sbt如下

name := "TabConnect"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies +=  "org.apache.spark" %% "spark-core" % "1.2.0"

libraryDependencies +=  "org.apache.spark" %% "spark-sql" % "1.2.0"

libraryDependencies +=  "org.apache.spark" %% "spark-streaming" % "1.2.0"

libraryDependencies +=  "org.apache.spark" %% "spark-mllib" % "1.2.0"

所以我没有包含 hive,因为我已经有 hive。现在我只想使用 Spark sql 在配置单元中创建一个 table。我的代码如下

import org.apache.spark.SparkContext

object Tabconnect {

  def main(args: Array[String]) {


    val sc = new SparkContext("local", "name")

    val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)

    sqlContext.sql("CREATE TABLE IF NOT EXISTS Demo (key INT, value STRING)")


  }
}

现在我应该在哪里添加配置单元依赖项,因为它会给我错误,因为它不识别配置单元。我在用户邮件列表中询问,得到的答案是我应该将 hive-site.xml 复制到 $SPARK_HOME/conf/,但我没有 Spark 目录。由于 build.sbt 从 maven repo 或本地 ivy2 存储库中获取所有内容。

那么我应该在哪里复制hive-site.xml?这样我就可以 运行 这个代码片段?

我终于可以连接到 tableau。 ;) :) 所以我基本上遵循了这些步骤:

在 Spark 方面

  1. 从apche spark站点下载tar文件并Untar
  2. 按照以下命令在提取的目录中构建 spark:

    sbt/sbt package

    sbt/sbt -Phive -Phive-thriftserver assembly

  3. 运行一主一工

  4. Start 旧版服务器。无需配置,因为它将在内部使用 Hive MetaStore。只有当我们想要 remote Metastore 时。确保在远程配置文件的类路径 (hive-site.xml) 中有配置文件。

    ./sbin/start-thriftserver.sh

5.Check 直线的连通性

./bin/beeline -u jdbc:hive2://192.168.56.101:10000​ 

在 tableau 侧:

  1. 正在尝试从 Simba 连接。 转到连接到数据 -> 其他数据库(ODBC) -> 驱动程序 -> Simba Spark ODBC 驱动程序 -> 数据库是默认的。并将用户身份验证作为我的计算机用户名(在本例中为 ubuntu VM)

关于通过 intelliJ 连接的一部分

1.I 在我的 lib 路径中包含了我之前构建的 Spark Jar。还在 build.sbt

中为 jdbc 配置单元驱动程序添加了一个依赖项
libraryDependencies += "org.apache.hive" % "hive-jdbc" % "0.12.0"
  1. 以下是我用于从本地计算机上的数据创建 table 的代码。

    import java.sql.{Connection, DriverManager}
    import org.apache.spark.SparkContext
    import org.apache.spark.rdd.JdbcRDD
    import org.apache.spark.sql.hive
    import org.apache.spark.sql.hive.HiveContext
    
    object ThriftRun {
    
      def main(args: Array[String]) {
    
    val driver = "org.apache.hive.jdbc.HiveDriver"
    
    val url = "jdbc:hive2://localhost:10000/default"
    val username = ""
    val password = ""
    
    // there's probably a better way to do this
    var connection:Connection = null
    
    try {
      // make the connection
      Class.forName(driver)
      connection = DriverManager.getConnection(url, username, password)
    
      // create the statement, and run the select query
      val statement = connection.createStatement()
      val tableName = "patient_external"
    
      //hive takes a directory of file as path, not a file. data is the directory where the data file resides
    
      var resultSet = statement.executeQuery("CREATE EXTERNAL TABLE patient_external(pid INT, pname STRING, drug STRING," +
        "gender STRING,tot_amt INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION " +
        "'/home/ashu/IdeaProjects/thrift/data'")
    
      val sql = "show tables '" + tableName + "'"
      println("Running: " + sql)
    
      resultSet = statement.executeQuery(sql)
    
      while ( resultSet.next() ) {
        println(resultSet.getString(1))
      }
    } catch {
      case e => e.printStackTrace
    }
    connection.close()
      }
    
    }
    

我可以通过执行以下操作进行连接:

  1. 首先提取 csv 文件或 json 并保存到文件系统:

    import org.apache.spark.sql.SQLContext
    import com.databricks.spark.csv._
    val sqlContext = new SQLContext(sc)
    val demo = sqlContext.csvFile("/user/data/csv/demo.csv")
    demo.toJSON.saveAsTextFile("/user/data/json/test”)
    
  2. 开始 $SPARK_HOME/sbin/start-thirftserver:

    ./sbin/start-thriftserver.sh --master spark://radtech.io:7077 --total-executor-cores 2 --driver-class-path --hiveconf hive.server2.thrift.port=10001 --hiveconf hive.server2.thrift.bind.host radtech.io
    
  3. 开始 tableau 会话。通过 SparkSQL (Beta) 连接器创建到 thrift 服务器的连接。

  4. 在 Tableau 中,将以下内容添加到“Initial SQL”

    create temporary table test
    using org.apache.spark.sql.json
    options (path '/user/data/json/test/*’);
    
    cache table test;
    
    1. 刷新连接。

然后 select “New Custom SQL” 并发出如下内容:

select * from test;

您会看到您的 table 出现。

HTH.

-托德

将您的 hive-site.xml 复制到您的 intellij 项目的资源文件夹中