windows配置单机spark环境

背景介绍:把python代码修改为pyspark,并在CDH集群上运行。
整个工作的流程大致如下:

  1. windows单机python代码,包括探索性数据分析、特征提取以及模型训练。
  2. 在windows上配置PySpark环境,并将python代码改为pyspark
  3. 配置CDH集群的python环境,提交测试
  4. 在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
  • winutilshadoop 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验证是否成功,应该输入如下内容
  • CDH spark 升级 cdh pyspark_CDH spark 升级

使用PySpark开发

python环境

把Spark安装路径下的python\pyspark文件夹复制到系统Python的包文件夹下,例如在Anaconda环境中,复制到D:\Anaconda3\Lib\site-packages目录下

安装Python包py4j,在命令行运行pip install py4j,或者离线安装。

验证PySpark配置成功,在命令行输入pyspark,应该输出如下内容

CDH spark 升级 cdh pyspark_python_02

在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_HOMEHADOOP_HOME以及SPARK_LOCAL_HOSTNAME

CDH spark 升级 cdh pyspark_SPARK_03