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

时间:2015-02-09 06:00:45

标签: intellij-idea hive sbt apache-spark

我的ubuntu机器上有一个现有的配置单元。我只是想在hive中通过Apache Spark SQL创建一个表。我使用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"

所以我没有收集蜂巢,因为我已经有蜂巢了。现在我只想使用Spark sql在hive中创建一个表。我的代码如下

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依赖项,因为它会给我错误,因为它无法识别hive。我在用户邮件列表中询问,并得到了我应该将hive-site.xml复制到$SPARK_HOME/conf/但我没有Spark目录的答案。由于build.sbt从maven repo或本地ivy2存储库获取所有内容。

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

3 个答案:

答案 0 :(得分:1)

最后我能够连接到画面。 ;):) 所以我基本上遵循了以下步骤:

在Spark方面

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

    sbt/sbt package

    sbt/sbt -Phive -Phive-thriftserver assembly

  4. 运行一名主人和一名工人。

  5. 启动thrift服务器。无需配置,因为它将在内部使用Hive MetaStore。只有我们想要远程Metastore。确保在classpath(hive-site.xml)中有远程配置文件。

    ./sbin/start-thriftserver.sh

  6. 5.检查直线连接

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

    在画面上:

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

      连接

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

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

        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 :(得分:0)

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

  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. 开始画面会话。通过SparkSQL(Beta)连接器创建与thrift服务器的连接。

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

    create temporary table test
    using org.apache.spark.sql.json
    options (path '/user/data/json/test/*’);
    
    cache table test;
    
    1. 刷新连接。
  5. 然后选择“New Custom SQL”并发出类似:

    的内容
    select * from test;
    

    您将看到您的表格出现。

    HTH。

    -Todd

答案 2 :(得分:0)

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