Windows配置Spark连接远程集群
本地Spark环境
- 在使用Spark连接远程集群的过程中要依赖本地的Spark环境,也就是在Windows本地需要有Spark,我这里使用的是2.4的windows spark,如果使用的是CDH配置的Hive集群,那么记得要选择CDH可关联使用的Spark版本
- 由于需要连接到集群上的Spark环境,我们需要本地拥有线上的hdfs-site.xml放在本地的Spark目录中的conf文件夹中,CDH版本的配置文件可以在CM管理平台上查看,这一步很重要!!!
python findspark
- 由于是windows系统,预期会出现找不到Spark环境的问题,那么可pip安装一个findspark的python包
pip install findspark
Spark代码配置
- 基础的Spark配置可以参考如下(其中SPARK HOME位置可自行变更为系统内对应Spark包位置即可):
- hive.metastore.uris:元数据服务器的URI
- dfs.ha.namenodes.[nameservice ID]:命名空间中所有NameNode的唯一标示名称。可以配置多个,使用逗号分隔。该名称是可以让DataNode知道每个集群的所有NameNode。当前,每个集群最多只能配置两个NameNode。在这里如果是自己配置,当然是知道nameservice ID的,如果不知道的话可以暂且去除该config,Spark读取过程中会显现出该nameservice ID
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/9/29 18:22
# @Author : Vic
# @Site :
# @File : main.py
# @Software: PyCharm
import findspark
from pyspark.sql import SparkSession
import os
findspark.init()
os.environ["SPARK_HOME"] = "D:\\Spark"
def spark_connect():
spark = SparkSession \
.builder \
.appName("my_app_name") \
.config("hive.metastore.uris", "thrift://host:port") \
.config("dfs.ha.namenodes.nameservices1", "host1,host2") \
.enableHiveSupport() \
.getOrCreate()
spark.sparkContext.setLogLevel("Error")
sql = "show databases"
df = spark.sql(sql)
df.show()
return spark
if __name__ == '__main__':
spark_connect()