Spark可以独立安装使用,也可以和Hadoop一起安装使用。本教程中,我们采用和Hadoop一起安装使用,这样,就可以让Spark使用HDFS存取数据。需要说明的是,当安装好Spark以后,里面就自带了scala环境,不需要额外安装scala,因此,“Spark安装”这个部分的教程,假设读者的计算机上,没有安装Scala,也没有安装Java(当然了,如果已经安装Java和Scala,也没有关系,依然可以继续按照本教程进行安装),也就是说,你的计算机目前只有Linux系统,其他的软件和环境都没有安装(没有Java,没有Scala,没有Hadoop,没有Spark),需要从零开始安装所有大数据相关软件。下面,需要你在自己的Linux系统上(笔者采用的Linux系统是Ubuntu16.04),首先安装Java和Hadoop,然后再安装Spark(Spark安装好以后,里面就默认包含了Scala解释器)。由于Ubuntu 16.04已经自带了Python 3.5版本,所以你的系统如果是Ubuntu 16.04,那么就不需要重新安装Python了。本教程也将以python3语法进行教学。
本教程的具体运行环境如下:

  • Ubuntu16.04以上
  • Hadoop 2.7.1以上
  • Java JDK 1.8以上
  • Spark 2.1.0 以上
  • Python 3.4以上

一. 安装Hadoop

如果你的计算机上已经安装了Hadoop,本步骤可以略过。这里假设没有安装。如果没有安装Hadoop,请访问链接. 注意,在这个Hadoop安装教程中,就包含了Java的安装,所以,按照这个教程,就可以完成JDK和Hadoop这二者的安装. 此外安装Hadoop主要是为了使用HDFS. 下面会就HDFS如何使用做一些说明.

首先启动HDFS组件

cd /usr/local/hadoop
./sbin/start-dfs.sh

启动结束后,HDFS开始进入可用状态。如果你在HDFS文件系统中,还没有为当前Linux登录用户创建目录(本教程统一使用用户名hadoop登录Linux系统),请使用下面命令创建:

./bin/hdfs dfs -mkdir -p /user/hadoop

也就是说,HDFS文件系统为Linux登录用户开辟的默认目录是“/user/用户名”(注意:是user,不是usr),本教程统一使用用户名hadoop登录Linux系统,所以,上面创建了“/user/hadoop”目录,再次强调,这个目录是在HDFS文件系统中,不在本地文件系统中。创建好以后,下面我们使用命令查看一下HDFS文件系统中的目录和文件:

./bin/hdfs dfs -ls .

上面命令中,最后一个点号“.”,表示要查看Linux当前登录用户hadoop在HDFS文件系统中与hadoop对应的目录下的文件,也就是查看HDFS文件系统中“/user/hadoop/”目录下的文件,所以,下面两条命令是等价的:

./bin/hdfs dfs -ls .
./bin/hdfs dfs -ls /user/hadoop

如果要查看HDFS文件系统根目录下的内容,需要使用下面命令:

./bin/hdfs dfs -ls /

下面,我们把本地文件系统中的“/usr/local/spark/mycode/wordcount/word.txt”上传到分布式文件系统HDFS中(放到hadoop用户目录下):

./bin/hdfs dfs -put /usr/local/spark/mycode/wordcount/word.txt .

然后,用命令查看一下HDFS的hadoop用户目录下是否多了word.txt文件,可以使用下面命令列出hadoop目录下的内容:

./bin/hdfs dfs -ls .

可以看到,确实多了一个word.txt文件,我们使用cat命令查看一个HDFS中的word.txt文件的内容,命令如下:

./bin/hdfs dfs -cat ./word.txt

上面命令执行后,就会看到HDFS中word.txt的内容了。

二. 安装Spark

在Linux系统中打开浏览器,访问Spark官方下载地址, 按照如图下载.

由于我们已经自己安装了Hadoop,所以,在“Choose a package type”后面需要选择“Pre-build with user-provided Hadoop [can use with most Hadoop distributions]”,然后,点击“Download Spark”后面的“spark-2.1.0-bin-without-hadoop.tgz”下载即可。下载的文件,默认会被浏览器保存在“/home/hadoop/下载”目录下。需要说明的是,Pre-build with user-provided Hadoop: 属于“Hadoop free”版,这样,下载到的Spark,可应用到任意Hadoop 版本。

Spark部署模式主要有四种:Local模式(单机模式)、Standalone模式(使用Spark自带的简单集群管理器)、YARN模式(使用YARN作为集群管理器)和Mesos模式(使用Mesos作为集群管理器)。

这里介绍Local模式(单机模式)的 Spark安装。我们选择Spark 2.1.0版本,并且假设当前使用用户名hadoop登录了Linux操作系统。

sudo tar -zxf ~/下载/spark-2.1.0-bin-without-hadoop.tgz -C /usr/local/
cd /usr/local
sudo mv ./spark-2.1.0-bin-without-hadoop/ ./spark
sudo chown -R hadoop:hadoop ./spark          # 此处的 hadoop 为你的用户名

安装后,还需要修改Spark的配置文件spark-env.sh

cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh

编辑spark-env.sh文件(vim ./conf/spark-env.sh),在第一行添加以下配置信息:

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

有了上面的配置信息以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据。如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据。

然后通过如下命令,修改环境变量.

vim ~/.bashrc

在.bashrc文件中添加如下内容

export JAVA_HOME=/usr/lib/jvm/default-java
export HADOOP_HOME=/usr/local/hadoop
export SPARK_HOME=/usr/local/spark
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=python3
export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH

PYTHONPATH环境变量主要是为了在Python3中引入pyspark库,PYSPARK_PYTHON变量主要是设置pyspark运行的python版本。
        .bashrc中必须包含JAVA_HOME,HADOOP_HOME,SPARK_HOME,PYTHONPATH,PYSPARK_PYTHON,PATH这些环境变量。如果已经设置了这些变量则不需要重新添加设置。
        接着还需要让该环境变量生效,执行如下代码:

source ~/.bashrc

配置完成后就可以直接使用,不需要像Hadoop运行启动命令。
        通过运行Spark自带的示例,验证Spark是否安装成功。

cd /usr/local/spark
bin/run-example SparkPi

执行时会输出非常多的运行信息,输出结果不容易找到,可以通过 grep 命令进行过滤(命令中的 2>&1 可以将所有的信息都输出到 stdout 中,否则由于输出日志的性质,还是会输出到屏幕中):

bin/run-example SparkPi 2>&1 | grep "Pi is"

这里涉及到Linux Shell中管道的知识,详情可以参考Linux Shell中的管道命令

过滤后的运行结果如下图示,可以得到π 的 5 位小数近似值:

三. Spark的启动参数以及在pySpark中运行代码

启动spark, 命令如下:

bin/pyspark

如果没有设置PYSPARK_PYTHON环境变量,则使用如下命令启动pyspark:

PYSPARK_PYTHON=python3
./bin/pyspark

pyspark命令及其常用的参数如下:

./bin/pyspark --master <master-url>

Spark的运行模式取决于传递给SparkContext的Master URL的值。Master URL可以是以下任一种形式:

  • local 使用一个Worker线程本地化运行SPARK(完全不并行)
  • local[*] 使用逻辑CPU个数数量的线程来本地化运行Spark
  • local[K] 使用K个Worker线程本地化运行Spark(理想情况下,K应该根据运行机器的CPU核数设定)
  • spark://HOST:PORT 连接到指定的Spark standalone master。默认端口是7077
  • yarn-client 以客户端模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR 环境变量中找到
  • yarn-cluster 以集群模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR 环境变量中找到
  • mesos://HOST:PORT 连接到指定的Mesos集群。默认接口是5050

需要强调的是,这里我们采用“本地模式”(local)运行Spark,关于如何在集群模式下运行Spark,可以参考后面的“在集群上运行Spark应用程序”。

在Spark中采用本地模式启动pyspark的命令主要包含以下参数:

  • master:这个参数表示当前的pyspark要连接到哪个master,如果是local[*],就是使用本地模式启动pyspark,其中,中括号内的星号表示需要使用几个CPU核心(core)
  • jars: 这个参数用于把相关的JAR包添加到CLASSPATH中;如果有多个jar包,可以使用逗号分隔符连接它们

比如,要采用本地模式,在4个CPU核心上运行pyspark:

cd /usr/local/spark
./bin/pyspark --master local[4]

或者,可以在CLASSPATH中添加code.jar,命令如下:

cd /usr/local/spark
./bin/pyspark --master local[4] --jars code.jar 

可以执行“pyspark –help”命令,获取完整的选项列表,具体如下:

cd /usr/local/spark
./bin/pyspark --help

上面是命令使用方法介绍,下面正式使用命令进入pyspark环境,可以通过下面命令启动pyspark环境:

bin/pyspark

该命令省略了参数,这时,系统默认是“bin/pyspark–master local[*]”,也就是说,是采用本地模式运行,并且使用本地所有的CPU核心。启动pyspark后,就会进入“>>>”命令提示符状态,如下图所示:

现在,你就可以在里面输入python代码进行调试了。比如,下面在命令提示符后面输入一个表达式“8 * 2 + 5”,然后回车,就会立即得到结果:

8 * 2 + 5

四. 本地文件统计词频

(1) 首先编一些语聊便于统计词频

进入Linux系统,打开“终端”,进入Shell命令提示符状态,然后,执行如下命令新建目录:

cd /usr/local/spark
mkdir mycode
cd mycode
mkdir wordcount
cd wordcount

然后,在“/usr/local/spark/mycode/wordcount”目录下新建一个包含了一些语句的文本文件word.txt,命令如下:

vim word.txt

可以在文本文件中随意输入一些单词,用空格隔开,我们会编写Spark程序对该文件进行单词词频统计。然后,按键盘Esc键退出vim编辑状态,输入“:wq”保存文件并退出vim编辑器。

(2) 借用pyspark进行词频统计

from pyspark.sql import SparkSession
from pyspark import SparkContext, SparkConf
from pyspark.sql.types import Row, StructType, StructField, StringType# spark加载本地文件
sc = SparkContext('local', 'test')
textFile = sc.textFile("file:///usr/local/spark/mycode/wordcount/word.txt")
wordCount = textFile.flatMap(lambda line: line.split(" ")).map(lambda word: (word,1)).reduceByKey(lambda a, b : a + b)
wordCount.foreach(print)# 将textFile保存到文件中, 是为了使用saveAsTextFile这个函数
textFile.saveAsTextFile("file:///usr/local/spark/mycode/wordcount/writeback")

上面代码中,sc.textFile()中的这个textFile是sc的一个方法名称,这个方法用来加载文件数据。这两个textFile不是一个东西,不要混淆。实际上,前面的变量textFile,你完全可以换个变量名称. 这里使用相同名称,就是有意强调二者的区别。
注意,要加载本地文件,必须采用“file:///”开头的这种格式。执行上上面这条命令以后,并不会马上显示结果,因为,Spark采用惰性机制,只有遇到“行动”类型的操作,才会从头到尾执行所有操作。

上面的saveAsTextFile()括号里面的参数是保存文件的路径,不是文件名。saveAsTextFile()是一个“行动”(Action)类型的操作,所以,马上会执行真正的计算过程,从word.txt中加载数据到变量textFile中,然后,又把textFile中的数据写回到本地文件目录“/usr/local/spark/mycode/wordcount/writeback/”下面,现在让我们切换到Linux Shell命令提示符窗口中,执行下面命令:

cd /usr/local/spark/mycode/wordcount/writeback/
ls

执行结果类似下面:

part-00000 _SUCCESS

也就是说,该目录下包含两个文件,我们可以使用cat命令查看一下part-00000文件(注意:part-后面是五个零)

cat part-00000

显示结果,是和上面word.txt中的内容一样的。

五. HDFS统计词频

from pyspark.sql import SparkSession
from pyspark import SparkContext, SparkConf
from pyspark.sql.types import Row, StructType, StructField, StringType# spark加载HDFS
sc = sc = SparkContext('local', 'test')
textFile = sc.textFile("hdfs://localhost:9000/user/liuxu/word.txt")
wordCount = textFile.flatMap(lambda line: line.split(" ")).map(lambda word: (word,1)).reduceByKey(lambda a, b : a + b)
wordCount.foreach(print)

从HDFS中的读取数据 和 从本地文件中读取数据的主要区别在于sc.textFile()里面的文件路径不一致.

六. 词频统计代码注释

textFile.flatMap(labmda line : line.split(” “)) - 会遍历textFile中的每行文本内容,当遍历到其中一行文本内容时,会把文本内容赋值给变量line,并执行Lamda表达式line : line.split(” “)。line : line.split(” “)是一个Lamda表达式,左边表示输入参数,右边表示函数里面执行的处理逻辑,这里执行line.split(” “),也就是针对line中的一行文本内容,采用空格作为分隔符进行单词切分,从一行文本切分得到很多个单词构成的单词集合。这样,对于textFile中的每行文本,都会使用Lamda表达式得到一个单词集合,最终,多行文本,就得到多个单词集合。textFile.flatMap()操作就把这多个单词集合“拍扁”得到一个大的单词集合。

        map(lambda word : (word, 1)),这个map操作会遍历这个集合中的每个单词,当遍历到其中一个单词时,就把当前这个单词赋值给变量word,并执行Lamda表达式word : (word, 1),这个Lamda表达式的含义是,word作为函数的输入参数,然后,执行函数处理逻辑,这里会执行(word, 1),也就是针对输入的word,构建得到一个tuple,形式为(word,1),key是word,value是1(表示该单词出现1次)

程序执行到这里,已经得到一个RDD,这个RDD的每个元素是(key,value)形式的tuple。最后,针对这个RDD,执行reduceByKey(labmda a, b : a + b)操作,这个操作会把所有RDD元素按照key进行分组,然后使用给定的函数(这里就是Lamda表达式:a, b : a + b),对具有相同的key的多个value进行reduce操作,返回reduce后的(key,value),比如(“hadoop”,1)和(“hadoop”,1),具有相同的key,进行reduce以后就得到(“hadoop”,2),这样就计算得到了这个单词的词频。

Spark教程(三)—— 安装与使用相关推荐

  1. WindowsServer2012 R2 64位中文标准版(IIS8.5)下手动搭建PHP环境详细图文教程(二)安装IIS8.5...

    //来源:http://www.imaoye.com/Technology/WindowsServer2012R264IIS85.html 阿里云服务器ECS Windows Server 2012 ...

  2. PyQt5教程(三)——Eric6的安装(详细)

                                               Eric6的安装 经过前两篇的介绍(Python和PyQt5的安装),本偏开始介绍Eric6的安装: PyQt5教 ...

  3. 大数据之Spark教程

    Apache Spark是一个集群计算设计的快速计算.它是建立在Hadoop MapReduce之上,它扩展了 MapReduce 模式,有效地使用更多类型的计算,其中包括交互式查询和流处理.这是一个 ...

  4. [学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程

    文章目录 视频资料: 思维导图 一.Spark基础入门(环境搭建.入门概念) 第二章:Spark环境搭建-Local 2.1 课程服务器环境 2.2 Local模式基本原理 2.3 安装包下载 2.4 ...

  5. 九、Spark模块和安装

    @Author : By Runsen @Date : 2020/6/21 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  6. python3.6.3安装过程_python3.6.3安装图文教程 TensorFlow安装配置方法

    本文主要介绍Python3.6及TensorFlow的安装和配置流程. 一.Python官网下载自己电脑和系统对应的Python安装包. 网址:下载地址 一直往下拉到Files,这里我下载的是Wind ...

  7. Spark 简介与安装部署

    本教程为实验楼原创,转载请注明课程链接:https://www.shiyanlou.com/courses/456 1. 课程说明 本教程是实验楼Spark大数据动手实验训练营第一节,登录实验楼官网可 ...

  8. MIP开发教程(三) 使用MIP-CLI工具调试组件

    一 . 在 mip-extensions 仓库中创建新的组件 二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发 ...

  9. Docker教程(三) Docker网络访问和数据管理

    Docker教程(三) Docker网络访问和数据管理 本文链接:https://blog.csdn.net/yuan_xw/article/details/77504077 Docker教程(三) ...

最新文章

  1. Linux的cat、more、less有什么区别
  2. luogu P1037 【产生数】
  3. c++ PVOID封装成C#
  4. 前端基础21:正则基础
  5. python最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数
  6. 为什么只有360公开支持华为系统,其他公司都不敢表态?
  7. P1290 欧几里德的游戏
  8. Java判断字符串的数字类型(小数、整数)
  9. 15-3 并发调度器
  10. C# 中用DES 对称Key,IV 加密,前端crypto.js 解密
  11. 大肇庆!这里不愧是“黑客教父”郭盛华的故乡,人杰地灵,景色优美
  12. java基于springboot的毕业生简历模板分享管理系统
  13. 线性调频信号与脉冲压缩
  14. 中文翻译The Django Book
  15. 财务软件服务器装什么系统,财务软件用哪种云服务器
  16. windows下安装kali linux子系统详细教程
  17. 没钱租云服务器,家庭局域网映射公网IP,中国联通家庭智能网关排坑指南
  18. 咕咕王小谢的C语言之路————第一章 初遇C语言 第三集 变量与常量
  19. 舌尖上的职场(三)我来买单!
  20. Python处理Excel表中单元格带有换行的数据

热门文章

  1. LeetCode-Revers_Bits
  2. tensorFlow2基本操作(三)
  3. 厚物科技《什么是PXI》
  4. 由电源IC芯片管理的,通过电感实现DC-DC升压电路详解
  5. Verilog学习笔记(一)
  6. 考进中科院计算所:我的经历和体会
  7. 获取汉字偏旁部首 Python版本
  8. js内容混淆,返回内容加密
  9. 【LQ系列】 BASIC-16~BASIC-19
  10. 3014C语言_运算符