當前位置:編程學習大全網 - 源碼下載 - spark從hive數據倉庫中讀取的數據可以使用sparksql進行查詢嗎

spark從hive數據倉庫中讀取的數據可以使用sparksql進行查詢嗎

1、為了讓Spark能夠連接到Hive的原有數據倉庫,我們需要將Hive中的hive-site.xml文件拷貝到Spark的conf目錄下,這樣就可以通過這個配置文件找到Hive的元數據以及數據存放。

在這裏由於我的Spark是自動安裝和部署的,因此需要知道CDH將hive-site.xml放在哪裏。經過摸索。該文件默認所在的路徑是:/etc/hive/conf 下。

同理,spark的conf也是在/etc/spark/conf。

此時,如上所述,將對應的hive-site.xml拷貝到spark/conf目錄下即可

如果Hive的元數據存放在Mysql中,我們還需要準備好Mysql相關驅動,比如:mysql-connector-java-5.1.22-bin.jar。

2、編寫測試代碼

val conf=new SparkConf().setAppName("Spark-Hive").setMaster("local")

val sc=new SparkContext(conf)

//create hivecontext

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

sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ") //這裏需要註意數據的間隔符

sqlContext.sql("LOAD DATA INPATH '/user/liujiyu/spark/kv1.txt' INTO TABLE src ");

sqlContext.sql(" SELECT * FROM jn1").collect().foreach(println)

sc.stop()

3、下面列舉壹下出現的問題:

(1)如果沒有將hive-site.xml拷貝到spark/conf目錄下,會出現:

分析:從錯誤提示上面就知道,spark無法知道hive的元數據的位置,所以就無法實例化對應的client。

解決的辦法就是必須將hive-site.xml拷貝到spark/conf目錄下

(2)測試代碼中沒有加sc.stop會出現如下錯誤:

ERROR scheduler.LiveListenerBus: Listener EventLoggingListener threw an exception

java.lang.reflect.InvocationTargetException

在代碼最後壹行添加sc.stop()解決了該問題。

  • 上一篇:港口限速源代碼
  • 下一篇:來源網站視頻資料
  • copyright 2024編程學習大全網