windows配置单机spark环境
背景介绍:把python代码修改为pyspark,并在CDH集群上运行。
整个工作的流程大致如下:
- windows单机python代码,包括探索性数据分析、特征提取以及模型训练。
- 在windows上配置PySpark环境,并将python代码改为pyspark
- 配置CDH集群的python环境,提交测试
- 在Spark集群上训练模型,以及模型工程化做预测
本文主要介绍第二部分,windows上配置PySpark环境
Windows上配置PySpark测试环境
目的:就是将python代码修改为PySpark后,能够在本地用测试数据测试。
环境:
- windows 7/10
- Spark 2.1.0
- Hadoop 2.6.0
安装Spark
从官网下载Spark遇到了无法下载的问题,从这里下载本质是一样的,选择spark-2.1.0-bin-hadoop2.6.tgz
- 添加环境变量
SPARK_HOME
,值为安装路径,如D:\spark
- 在环境变量Path中增加值:
%SPARK_HOME%\bin
和%SPARK_HOME%\sbin - 如果下载的Spark版本>=2.3,建议进一步添加环境变量- -
SPARK_LOCAL_HOSTNAME
,值为localhost
- 进入Spark的配置目录conf,复制一个
log4j.properties.template
文件并命名为log4j.properties
,打开log4j.properties
文件,进行如下修改
# log4j.rootCategory=INFO, console
log4j.rootCategory=WARN, console
- 同样在Spark的配置目录conf,复制一个spark-env.sh.template文件并命名为spark-env.sh,打开并增加以下一行代码
SPARK_LOCAL_IP = 127.0.0.1
安装Hadoop
官网下载Hadoop hadoop-2.6.0.tar.gz
,下载winutils。
- 添加环境变量
HADOOP_HOME
,值为安装路径,如D:\hadoop
- 在环境变量Path中增加值:
%HADOOP_HOME%\bin
和%HADOOP_HOME%\sbin
- 进入Hadoop的配置目录
etc\hadoop
,打开文件hadoop-env.cmd
,修改Java的安装路径,如果Java安装在Program Files可以通过设置为PROGRA~1
解决空格报错的问题,如
set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_121
- 将
winutils
下hadoop 2.6.0
的bin文件夹覆盖到Hadoop安装目录的bin文件夹,确保其中含有winutils.exe
文件 - 新建tmp\hive文件夹,如D:\tmp\hive,注意:如果Hadoop放在D盘,就在D盘下新建该文件夹。命令行导航到Hadoop的bin目录,执行以下授权操作,如
winutils.exe chmod -R 777 C:\tmp\hive
- 后在power-shell中输入
hadoop version
测试是否安装成功 - 运行
spark-shell
验证是否成功,应该输入如下内容
使用PySpark开发
python环境
把Spark安装路径下的python\pyspark
文件夹复制到系统Python的包文件夹下,例如在Anaconda环境中,复制到D:\Anaconda3\Lib\site-packages
目录下
安装Python包py4j
,在命令行运行pip install py4j
,或者离线安装。
验证PySpark配置成功,在命令行输入pyspark
,应该输出如下内容
在PyCharm中使用PySpark
测试python代码
from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.sql import Row
import pyspark
import datetime
import json
import os
import sys
spark_name = os.environ.get('SPARK_HOME', None)
if not spark_name:
raise ValueError('spark环境没有配置好')
data = []
data.append([1480, 1, 1, '0', 'test'])
schema = ['id', 'class_id', 'grade_id', 'classes', 'name']
spark = SparkSession.builder.master("local").appName(
"test").enableHiveSupport().getOrCreate()
spark.sparkContext.setLogLevel('ERROR')
df_test = spark.createDataFrame(data, schema)
df_test.show()
设置程序运行配置,打开Run->Edit Configuration
,按照如下图所示内容新建一个配置,其中环境变量必须加入SPARK_HOME
、HADOOP_HOME
以及SPARK_LOCAL_HOSTNAME