深圳西鄉(xiāng)建網(wǎng)站武漢搜索排名提升
文章目錄
- 集成hive metastore
- SQL測試
- spark-sql 語法
- SQL執(zhí)行流程
- 兩種數(shù)倉架構(gòu)的選擇
- hive on spark數(shù)倉配置
- 經(jīng)驗
spark-sql沒有元數(shù)據(jù)管理功能,只有sql 到RDD的解釋翻譯功能,所以需要和hive的metastore服務(wù)集成在一起使用。
集成hive metastore
在spark安裝目錄conf下,新增hive-site.xml配置文件,內(nèi)容如下:
<configuration><!-- 指定存儲元數(shù)據(jù)metastore要連接的地址 --><property><name>hive.metastore.uris</name><value>thrift://127.0.0.1:9083</value><description>URI for client to connect to metastore server</description></property><!--配置數(shù)據(jù)表數(shù)據(jù)存儲目錄--><property><name>hive.metastore.warehouse.dir</name><value>/home/datahouse/hive/warehouse</value></property>
</configuration>
然后,就是要保證,hive + hadoop的數(shù)倉已能正常運行。因為spark需要使用hive的metastore服務(wù),所以hive的相關(guān)服務(wù)得正常運行??梢詤⒖?【數(shù)據(jù)倉庫】hive + hadoop數(shù)倉搭建實踐文章。
集成完成后就可以開始啟動spark-sql了。
SQL測試
到spark 的bin目錄,執(zhí)行
./spark-sql
如下:
[root@yd-ss bin]# ./spark-sql
24/12/27 14:49:53 WARN Utils: Your hostname, yd-ss resolves to a loopback address: 127.0.0.1; using XX.XX.XX.XX instead (on interface bond0)
24/12/27 14:49:53 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
24/12/27 14:49:54 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Spark master: local[*], Application Id: local-1735282198034
spark-sql>
執(zhí)行如下腳本:
show database;
輸出:
spark-sql> show databases;
db_msg
default
test
Time taken: 6.644 seconds, Fetched 3 row(s)
可以看到之前在hive+hadoop數(shù)倉下建的庫都可以通過spark-sql 查出來了,因為兩者共用了一個metastore服務(wù),元數(shù)據(jù)是一樣的,數(shù)倉地址也是一樣的。
spark-sql 語法
由于spark-sql 使用的元數(shù)據(jù)管理是hive的元數(shù)據(jù)服務(wù),所以,spark-sql的語法可以理解為和hive SQL是一樣的。
SQL執(zhí)行流程
上圖是hive sql 和 spark sql的執(zhí)行流程圖及框架圖??梢钥闯?#xff1a;
1 hive 偏重的是 hive sql 解釋 和 元數(shù)據(jù)管理,分布式計算和存儲依賴于hadoop的MR和HDFS;
2 spark 偏重的是spark sql 解釋 和 RDD分布式計算,元數(shù)據(jù)管理和分布式存儲依賴于hive 的 metastore服務(wù)和hadoop的HDFS;
3 提供兩種數(shù)倉數(shù)據(jù)分析工具 hive sql 和 spark sql,都可以使用數(shù)據(jù)庫客戶端工具去連接訪問。
兩種數(shù)倉架構(gòu)的選擇
上圖,體現(xiàn)了兩種數(shù)倉的架構(gòu)。
hive + hadoop 數(shù)倉:分布式計算使用MR,性能計算很慢,在BI數(shù)據(jù)集配置時,經(jīng)常會超時;
spark + hive (metastore) + hadoop(HDFS)數(shù)倉:分布式計算使用spark RDD ,性能計算快,但還要維護hive ,架構(gòu)較復(fù)雜;
如果基于hive + hadoop 數(shù)倉,將MR分布式計算框架換成 Spark RDD的計算框架,是不是就很完美了,強強聯(lián)合。
hive on spark數(shù)倉配置
hive sql 會被解釋為Spark RDD 計算執(zhí)行。
一開始也是懷著激動的心來的,因為hive on MR 實在是太慢了,spark又非???#xff0c;兩者強強聯(lián)合,豈不是最佳實踐。網(wǎng)上也搜到了很多教程,但都是對于hive的低版本的。但是現(xiàn)實卻發(fā)生了變化。
在進行該配置之前,需要了解下hive和spark的匹配關(guān)系。
hive 4.0 版本的源碼pom中已經(jīng)看不到引用的spark版本了,有可能在4.0版本放棄了spark的支持。
經(jīng)過查找4.0版本的官方文檔,可以看到:
https://hive.apache.org/docs/latest/overview-of-major-changes_283118379/
可以看到直接就是移除了spark,還不是廢棄。最新的版本hive4.0已經(jīng)不支持spark集成了。這也是為什么在hive sql 會話下,執(zhí)行
set hive.execution.engine=spark;
會報錯
[42000][1] Error while processing statement: 'SET hive.execution.engine=spark' FAILED in validation : Invalid value.. expects one of [mr, tez].
如果想繼續(xù)使用hive on spark 架構(gòu),就只能使用hive 4.0 以前的版本了。
在hive4.0之前的版本hive3.1.3中,依賴的spark 版本為2.3.0,太舊了。
但是可以嘗試基于hive3.1.3的源碼,修改saprk的版本為新版本重新編譯。這里不再往下探究。
畢竟hive4.0 已經(jīng)移除了spark,數(shù)倉搭建技術(shù)還是以hive為主,因為它穩(wěn)定。官方提供了Tez的執(zhí)行引擎替代MR。也能提高hive的執(zhí)行效率。
經(jīng)驗
1 hive 4.0移除了saprk支持,只能使用MR和Tez,意味著往后版本,hive on spark就不存在了,若想使用,需要將hive換到4,0以前的版本;
2 spark on hive可以繼續(xù)使用,但這個是以spark為主,利用hive的元數(shù)據(jù)服務(wù);但總是感覺沒有hive專業(yè);
3 hive4.0往后當(dāng)數(shù)倉使用,需要集成TEz引擎,以提升效率。