连接到 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 方面
- 从apche spark站点下载tar文件并Untar
按照以下命令在提取的目录中构建 spark:
sbt/sbt package
sbt/sbt -Phive -Phive-thriftserver assembly
运行一主一工
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 侧:
- 正在尝试从 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"
以下是我用于从本地计算机上的数据创建 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()
}
}
我可以通过执行以下操作进行连接:
首先提取 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”)
开始 $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
开始 tableau 会话。通过 SparkSQL (Beta) 连接器创建到 thrift 服务器的连接。
在 Tableau 中,将以下内容添加到“Initial SQL”
create temporary table test
using org.apache.spark.sql.json
options (path '/user/data/json/test/*’);
cache table test;
- 刷新连接。
然后 select “New Custom SQL” 并发出如下内容:
select * from test;
您会看到您的 table 出现。
HTH.
-托德
将您的 hive-site.xml 复制到您的 intellij 项目的资源文件夹中
我的 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 方面
- 从apche spark站点下载tar文件并Untar
按照以下命令在提取的目录中构建 spark:
sbt/sbt package
sbt/sbt -Phive -Phive-thriftserver assembly
运行一主一工
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 侧:
- 正在尝试从 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"
以下是我用于从本地计算机上的数据创建 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() } }
我可以通过执行以下操作进行连接:
首先提取 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”)
开始 $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
开始 tableau 会话。通过 SparkSQL (Beta) 连接器创建到 thrift 服务器的连接。
在 Tableau 中,将以下内容添加到“Initial SQL”
create temporary table test using org.apache.spark.sql.json options (path '/user/data/json/test/*’); cache table test;
- 刷新连接。
然后 select “New Custom SQL” 并发出如下内容:
select * from test;
您会看到您的 table 出现。
HTH.
-托德
将您的 hive-site.xml 复制到您的 intellij 项目的资源文件夹中