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。

你可能感兴趣的:(Spark,Hive)