日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

spark代码连接hive_Spark SQL入门到实战之(7)spark连接hive(spark-shell和eclipse两种方式)...

發布時間:2025/3/20 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark代码连接hive_Spark SQL入门到实战之(7)spark连接hive(spark-shell和eclipse两种方式)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、在服務器(虛擬機)spark-shell連接hive

1.1 將hive-site.xml拷貝到spark/conf里

cp /opt/apache-hive-2.3.2-bin/conf/hive-site.xml /opt/spark-2.2.1-bin-hadoop2.7/conf/

1.2 將mysql驅動拷貝到spark/jar里

cp /opt/apache-hive-2.3.2-bin/bin/mysql-connector-java-5.1.46-bin.jar /opt/spark-2.2.1-bin-hadoop2.7/jars/

1.3 啟動spark-shell,輸入代碼測試

spark-shell

import org.apache.spark.sql.hive.HiveContext

val hiveContext=new HiveContext(sc)

hiveContext.sql("select * from test").show()

1.4 異常及解決

在執行hiveContext.sql("select * from test").show() 報了一個異常:

The root scratch dir: /tmp/hive on HDFS should be writable. Current permissions are: rwxr-xr-x;

解決辦法:

1.4.1 更改HDFS目錄/tmp/hive的權限:

hadoop fs -chmod 777 /tmp/hive

1.4.2 同時刪HDFS與本地的目錄/tmp/hive:

hadoop fs -rm -r /tmp/hiverm -rf /tmp/hive

這次錯誤采用的是第二種解決辦法,有的情況下用第一種方法,比如一次在啟動hive時候報這種錯誤~。

錯誤截圖:

2、win10+eclipse上連接hive

2.1 將hive-site.xml拷貝到項目中的resources文件夾下

2.2 在sbt里添加對應版本的mysql依賴

"mysql" % "mysql-connector-java" % "5.1.46"

2.3 代碼

2.3.1 舊版api(1.6以上)

package com.dkl.leanring.spark.sqlimportorg.apache.spark.SparkConfimportorg.apache.spark.sql.SQLContextimportorg.apache.spark.sql.hive.HiveContextimportorg.apache.spark.SparkContext/**

* 舊版本spark-hive測試*/object OldSparkHiveDemo {def main(args: Array[String]): Unit ={

val conf= new SparkConf().setAppName("OldSparkHiveDemo").setMaster("local")

val sc=new SparkContext(conf)

val sqlContext=new SQLContext(sc)importsqlContext.implicits._

val hiveCtx=new HiveContext(sc)

hiveCtx.sql("select * from test").show()

val data= Array((3, "name3"), (4, "name4"), (5, "name5"))

val df= sc.parallelize(data).toDF("id", "name")

df.createOrReplaceTempView("user")

hiveCtx.sql("insert into test select id,name from user")

hiveCtx.sql("select * from test").show()

}

}

(注:其中df.createOrReplaceTempView("user")改為df.registerTempTable("user"),因為createOrReplaceTempView方法是2.0.0才有的,registerTempTable是舊版的方法,1.6.0就有了,嫌麻煩就不改代碼重新貼圖了)

2.3.2 新版api

package com.dkl.leanring.spark.sqlimportorg.apache.spark.sql.SparkSession/**

* 新版本spark-hive測試*/object NewSparkHiveDemo {def main(args: Array[String]): Unit ={

val spark=SparkSession

.builder()

.appName("Spark Hive Example")

.master("local")

.config("spark.sql.warehouse.dir", "/user/hive/warehouse/")

.enableHiveSupport()

.getOrCreate()importspark.implicits._importspark.sql

sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")

val data= Array((1, "val1"), (2, "val2"), (3, "val3"))

var df= spark.createDataFrame(data).toDF("key", "value")

df.createOrReplaceTempView("temp_src")

sql("insert into src select key,value from temp_src")

sql("SELECT * FROM src").show()

}

}

2.4 異常及解決方法

在執行insert語句時會出現如下異常信息:

原因是:啟動 Spark 應用程序的win用戶對spark.sql.warehouse.dir沒有寫權限

解決辦法:

hadoop fs -chmod 777 /user/hive/warehouse/

附異常信息截圖:

總結

以上是生活随笔為你收集整理的spark代码连接hive_Spark SQL入门到实战之(7)spark连接hive(spark-shell和eclipse两种方式)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。