我的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
?这样我就可以运行这段代码片了吗?
答案 0 :(得分:1)
最后我能够连接到画面。 ;):) 所以我基本上遵循了以下步骤:
按照以下命令在提取的目录中构建spark:
sbt/sbt package
sbt/sbt -Phive -Phive-thriftserver assembly
运行一名主人和一名工人。
启动thrift服务器。无需配置,因为它将在内部使用Hive MetaStore。只有我们想要远程Metastore。确保在classpath(hive-site.xml)中有远程配置文件。
./sbin/start-thriftserver.sh
5.检查直线连接
./bin/beeline -u jdbc:hive2://192.168.56.101:10000
1.我包含了之前在我的lib路径中构建的Spark Jar。还在build.sbt
中为jdbc配置单元驱动程序添加了一个依赖项libraryDependencies += "org.apache.hive" % "hive-jdbc" % "0.12.0"
以下是我用于从本地计算机上的数据创建表的代码。
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)
我可以通过执行以下操作来连接:
首先摄取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
开始画面会话。通过SparkSQL(Beta)连接器创建与thrift服务器的连接。
在Tableau中,将以下内容添加到“初始SQL”
create temporary table test
using org.apache.spark.sql.json
options (path '/user/data/json/test/*’);
cache table test;
然后选择“New Custom SQL”并发出类似:
的内容select * from test;
您将看到您的表格出现。
HTH。
-Todd
答案 2 :(得分:0)
将您的hive-site.xml复制到intellij项目的resources文件夹中