Spark系列 —— 本地Spark連接遠程集羣Hive(Scala/Python)

背景

    很多時候,我們在編寫好Spark應用程序之後,想要讀取Hive表測試一下,但又不想操作 (打jar包——>上傳集羣——>spark-submit) 這些步驟時,那我們就可以在本地直連Hive,直接運行你的Spark應用程序中的main函數即可。代碼如下(版本爲Spark2.0+):

 

Scala版本

代碼如下:

import org.apache.spark.sql.SparkSession

object SparkDemo {
	val spark = SparkSession
		.builder()
		.appName("Spark to Hive")
		.master("local[4]")
		.config("hive.metastore.uris", "thrift://bigdata01:9083,thrift://bigdata02:9083")
		.enableHiveSupport()
		.getOrCreate()
	
	val df = spark.read.table("db.table")
	df.show(false)

	spark.close()
}

代碼中在創建SparkSession實例時的配置項 “hive.metastore.uris” 的值以個人情況而定,具體配置對應的是你集羣中Hive安裝目錄下的這個文件 …/conf/hive-site.xml 中的 hive.metastore.uris,這個配置表示Hive的Metastore Server所在的節點。

注意:一般來講,bigdata01,bigdata02都是集羣中節點的別名,並不是具體的IP地址,所以你還需要把集羣某個節點下文件 /etc/hosts 中的配置拷貝到你Windows電腦(本人用的Windows)的這個 C:\Windows\System32\drivers\etc\hosts 文件中,這樣才能在本地訪問集羣Hive的元數據服務器節點。具體配置就長下面這個樣子:

10.1.11.10           bigdata01
10.1.11.11           bigdata02
10.1.11.12           bigdata03
...

 

pyspark版本

代碼如下:

import os
from pyspark.sql import SparkSession

os.environ["SPARK_HOME"] = "F:\App\spark-2.3.1-bin-hadoop2.6"

if __name__ == '__main__':
	spark = SparkSession\
        .builder \
        .appName("Spark to Hive") \
        .master("local[4]") \
        .config("hive.metastore.uris", "thrift://bigdata01:9083,thrift://bigdata02:9083") \
        .enableHiveSupport()\
        .getOrCreate()
	
	df = spark.read.table("db.table")
	df.show(truncate=False)

	spark.stop()

pyspark版本跟Scala不同的地方在於,pyspark運行時會依賴Spark的一些文件,因此需要設置環境變量SPARK_HOME,你可以到Spark官網下載與你所使用Spark相對應的版本,文件名稱類似spark-2.3.3-bin-hadoop2.6.tgz,下載之後,解壓到你電腦指定目錄下即可,最後將解壓後的根目錄作爲SPARK_HOME。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章