爲了在有限的資源上學習大數據處理與分析技術,借鑑Linux以及部分網上的教程,在Windows10平臺搭建Spark環境。本文將簡單記錄搭建流程以及其中遇到的坑。
Spark的部署模式主要有四種:
- Local模式(單機模式)
- Standalone模式(使用Spark自帶的簡單集羣管理器)
- YARN模式(使用YARN作爲集羣管理器)
- Mesos模式(使用Mesos作爲集羣管理器)
安裝Java
- 到 Oracle Java 官網下載JDK並安裝,安裝路徑建議直接選擇
C:\Java
,不要安裝在Program Files
中(路徑有空格會導致後面配置Hadoop比較麻煩)
安裝Spark
-
到 Apache Spark 官網下載預編譯的壓縮文件,解壓到某個路徑中不含空格的文件夾下,也就成爲Spark的安裝路徑,如
D:\spark
- 添加環境變量
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
-
到 Apache Hadoop 官網下載預編譯的壓縮包(這裏爲了更好對應,選擇下載2.7版本),解壓到某個路徑中不含空格的文件夾下,也就稱爲Hadoop的安裝路徑,如
D:\hadoop
- 添加環境變量
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,把下載到的
bin
文件夾覆蓋到Hadoop安裝目錄的bin
文件夾,確保其中含有winutils.exe
文件 -
新建
tmp\hive
文件夾,如C:\tmp\hive
,命令行導航到Hadoop的bin
目錄,執行以下授權操作winutils.exe chmod -R 777 C:\tmp\hive
-
最後在命令行輸入
hadoop version
測試是否安裝成功
- 添加環境變量
驗證Spark安裝成功
使用Spark開發第一個程序
Python
安裝PySpark
- 把Spark安裝路徑下的
python\pyspark
文件夾複製到系統Python的包文件夾下,例如在Anaconda環境中,複製到D:\Anaconda3\Lib\site-packages
目錄下 - 安裝Python包
py4j
,在命令行運行pip install py4j
- 驗證PySpark配置成功,在命令行輸入
pyspark
,應該輸出如下內容驗證PySpark環境可用
在PyCharm中使用PySpark
下面以一個經典的詞頻統計(Word Count)程序爲例,學習PySpark的使用,詞頻統計是一個很經典的分佈式程序,這裏用到中文分詞庫jieba,去除停用詞再進行計數
- 新建Python工程,並新建腳本
wordcount.py
- 在網上隨便找一篇新聞報道,複製內容到文本文件
news.txt
,記住其路徑 - 到GitHub上搜索中文停用詞資源,如從 https://github.com/stopwords-iso/stopwords-zh/blob/master/stopwords-zh.txt 下載得到
stopwords-zh.txt
- 打開腳本並輸入如下代碼
# -*- coding: utf-8 -*-
|
-
設置程序運行配置,打開
Run->Edit Configuration
,按照如下圖所示內容新建一個配置,其中環境變量必須加入SPARK_HOME
、HADOOP_HOME
以及SPARK_LOCAL_HOSTNAME
-
程序提交到Spark運行
上述詞頻統計代碼也可以直接提交到Spark運行,方法如下:
Scala & Java
Java
- 在 IntelliJ IDEA 新建一個Maven工程
-
在項目的Maven配置文件
pom.xml
中加入Spark-core依賴,根據安裝的Spark版本到 Maven Repository 倉庫找到對應的Maven依賴文本,如:<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.3</version>
</dependency> -
打開工程目錄下的主程序文件,通常爲
./src/main/java/App.java
,編寫詞頻統計代碼 - 下面將以兩種形式進行編寫,Java Lambda的代碼風格接近Python,易於閱讀;而Java原生模式則稍顯複雜
Java Lambda
import org.apache.spark.SparkConf;
|
- 最後打開輸出結果文件夾的
part-00000
文件,輸出各個單詞的統計數:(Spark,7)
(and,7)
(the,5)
(Apache,5)
(of,4)
(for,3)
...
Java 原生模式
import org.apache.spark.SparkConf;
|
- 最後結果與上面情況類似