日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SparkSQL操作Hive

發布時間:2025/1/21 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SparkSQL操作Hive 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

title: SparkSQL操作Hive
date: 2020-05-12 16:12:55
tags:

  • Spark

Apache Hive 是 Hadoop 上的 SQL 引擎,Spark SQL 編譯時可以包含 Hive 支持,也可以不包含。包含 Hive 支持的 Spark SQL 可以支持 Hive 表訪問、UDF (用戶自定義函數)以及 Hive 查詢語言(HiveQL/HQL)等。需要強調的一點是,如果要在 Spark SQL 中包含Hive 的庫,并不需要事先安裝 Hive。一般來說,最好還是在編譯 Spark SQL 時引入 Hive支持,這樣就可以使用這些特性了。如果你下載的是二進制版本的 Spark,它應該已經在編譯時添加了 Hive 支持。

若要把 Spark SQL 連接到一個部署好的 Hive 上,你必須把 hive-site.xml 復制到Spark 的配置文件目錄中($SPARK_HOME/conf)。即使沒有部署好 Hive,Spark SQL 也可以運行。 需要注意的是,如果你沒有部署好 Hive,Spark SQL 會在當前的工作目錄中創建出自己的 Hive 元數據倉庫,叫作 metastore_db。此外,如果你嘗試使用 HiveQL 中的CREATE TABLE (并非 CREATE EXTERNAL TABLE)語句來創建表,這些表會被放在你默
認的文件系統中的 /user/hive/warehouse 目錄中(如果你的 classpath 中有配好的hdfs-site.xml,默認的文件系統就是 HDFS,否則就是本地文件系統)。spark-shell 默認是 Hive 支持的;代碼中是默認不支持的,需要手動指定(加一個參數即可)。

內嵌的Hive

如果使用 Spark 內嵌的 Hive, 則什么都不用做, 直接使用即可.
Hive 的元數據存儲在 derby 中, 默認倉庫地址:$SPARK_HOME/spark-warehouse

scala> spark.sql("show tables").show 。。。 +--------+---------+-----------+ |database|tableName|isTemporary| +--------+---------+-----------+ +--------+---------+-----------+ scala> spark.sql("create table aa(id int)") 。。。 scala> spark.sql("show tables").show +--------+---------+-----------+ |database|tableName|isTemporary| +--------+---------+-----------+ | default|aa | false | +--------+---------+-----------+

向表加載本地數據

scala> spark.sql("load data local inpath 'input/ids.txt' into table aa") 。。。 scala> spark.sql("select * from aa").show +---+ | id| +---+ | 1| | 2| | 3| | 4| +---+

在實際使用中, 幾乎沒有任何人會使用內置的 Hive !!!

外部的 HIVE

如果想連接外部已經部署好的 Hive,需要通過以下幾個步驟:
? Spark 要接管 Hive 需要把 hive-site.xml 拷貝到 conf/目錄下
? 把 Mysql 的驅動 copy 到 jars/目錄下
? 如果訪問不到 hdfs,則需要把 core-site.xml 和 hdfs-site.xml 拷貝到 conf/目錄下
? 重啟 spark-shell

scala> spark.sql("show tables").show 20/04/25 22:05:14 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException +--------+--------------------+-----------+ |database| tableName|isTemporary| +--------+--------------------+-----------+ | default| emp| false| | default|hive_hbase_emp_table| false| | default| relevance_hbase_emp| false| | default| staff_hive| false| | default| ttt| false| | default| user_visit_action| false| +--------+--------------------+-----------+

運行 Spark SQL CLI

Spark SQL CLI 可以很方便的在本地運行 Hive 元數據服務以及從命令行執行查詢任務。在Spark 目錄下執行如下命令啟動 Spark SQL CLI,直接執行 SQL 語句,類似一 Hive 窗口

bin/spark-sql

運行 Spark beeline

Spark Thrift Server 是 Spark 社區基于 HiveServer2 實現的一個 Thrift 服務。旨在無縫兼容HiveServer2。因為 Spark Thrift Server 的接口和協議都和 HiveServer2 完全一致,因此我們部署好 Spark Thrift Server 后,可以直接使用 hive 的 beeline 訪問 Spark Thrift Server 執行相關語句。Spark Thrift Server 的目的也只是取代 HiveServer2,因此它依舊可以和 Hive Metastore進行交互,獲取到 hive 的元數據。
如果想連接 Thrift Server,需要通過以下幾個步驟:
? Spark 要接管 Hive 需要把 hive-site.xml 拷貝到 conf/目錄下
? 把 Mysql 的驅動 copy 到 jars/目錄下
? 如果訪問不到 hdfs,則需要把 core-site.xml 和 hdfs-site.xml 拷貝到 conf/目錄下
? 啟動 Thrift Server

sbin/start-thriftserver.sh

? 使用 beeline 連接 Thrift Server

bin/beeline -u jdbc:hive2://linux1:10000 -n root

代碼操作

導入依賴

<dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.12</artifactId><version>3.0.0</version> </dependency> <dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.2.1</version> </dependency> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version> </dependency>

拷貝hive-site.xml 文件

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

代碼實現

//創建 SparkSession val spark: SparkSession = SparkSession .builder() .enableHiveSupport() .master("local[*]") .appName("sql") .getOrCreate()

注意:在開發工具中創建數據庫默認是在本地倉庫,通過參數修改數據庫倉庫的地址:
config("spark.sql.warehouse.dir", "hdfs://linux1:8020/user/hive/warehouse")
如果在執行操作時,出現如下錯誤:

可以代碼最前面增加如下代碼解決:
System.setProperty("HADOOP_USER_NAME", "root")
此處的 root 改為你們自己的 hadoop 用戶名稱

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的SparkSQL操作Hive的全部內容,希望文章能夠幫你解決所遇到的問題。

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