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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SparkSQL操作Hive

發(fā)布時(shí)間:2025/1/21 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SparkSQL操作Hive 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

  • Spark

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

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

內(nèi)嵌的Hive

如果使用 Spark 內(nèi)嵌的 Hive, 則什么都不用做, 直接使用即可.
Hive 的元數(shù)據(jù)存儲(chǔ)在 derby 中, 默認(rèn)倉庫地址:$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 | +--------+---------+-----------+

向表加載本地?cái)?shù)據(jù)

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| +---+

在實(shí)際使用中, 幾乎沒有任何人會(huì)使用內(nèi)置的 Hive !!!

外部的 HIVE

如果想連接外部已經(jīng)部署好的 Hive,需要通過以下幾個(gè)步驟:
? Spark 要接管 Hive 需要把 hive-site.xml 拷貝到 conf/目錄下
? 把 Mysql 的驅(qū)動(dòng) 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| +--------+--------------------+-----------+

運(yùn)行 Spark SQL CLI

Spark SQL CLI 可以很方便的在本地運(yùn)行 Hive 元數(shù)據(jù)服務(wù)以及從命令行執(zhí)行查詢?nèi)蝿?wù)。在Spark 目錄下執(zhí)行如下命令啟動(dòng) Spark SQL CLI,直接執(zhí)行 SQL 語句,類似一 Hive 窗口

bin/spark-sql

運(yùn)行 Spark beeline

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

sbin/start-thriftserver.sh

? 使用 beeline 連接 Thrift Server

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

代碼操作

導(dǎo)入依賴

<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 文件拷貝到項(xiàng)目的 resources 目錄中

代碼實(shí)現(xiàn)

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

注意:在開發(fā)工具中創(chuàng)建數(shù)據(jù)庫默認(rèn)是在本地倉庫,通過參數(shù)修改數(shù)據(jù)庫倉庫的地址:
config("spark.sql.warehouse.dir", "hdfs://linux1:8020/user/hive/warehouse")
如果在執(zhí)行操作時(shí),出現(xiàn)如下錯(cuò)誤:

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

與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。