《Spark编程基础(Python版)》 | 实验2 | Spark和Hadoop的安装
一、实验目的
(1)掌握在Linux虚拟机中安装Hadoop和Spark的方法;
(2)熟悉HDFS的基本使用方法;
(3)掌握使用Spark访问本地文件和HDFS文件的方法。
二、实验平台
操作系统:Ubuntu 20.04;
Spark版本:3.0.2;
Hadoop版本:2.7.3。
TODO: Python版本:3.4.3。
三、实验内容和要求
1.安装Hadoop和Spark
进入Linux系统,参照本教程官网“实验指南”栏目的“Hadoop的安装和使用”,完成Hadoop伪分布式模式的安装。完成Hadoop的安装以后,再安装Spark(Local模式)。
参考:
1.1 准备
1 | FROM ubuntu:20.04 AS base |
1.2 安装 Java
1 | # 2. 安装 Java |
1.3 安装 Hadoop
1 | # 3. 安装 Hadoop |
1.3 Hadoop伪分布式配置
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,
伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。
Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
1.3.1 配置文件
接下来,准备 core-site.xml 文件,内容如下:
1 | <configuration> |
hdfs-site.xml 文件,内容如下:
1 | <configuration> |
Hadoop配置文件说明
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),
因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),
不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,
而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。
所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
注意:
core-site.xml, hdfs-site.xml 均放于与 Dockerfile 同级目录
配置文件:
1 | # 3.1 Hadoop伪分布式配置 |
1.3.2 执行 NameNode 的格式化
配置完成后,执行 NameNode 的格式化:
1 | # 3.2 配置完成后,执行 NameNode 的格式化 |
1.3.3 配置 ssh 免密登录
1 | # 3.3 配置 ssh 免密登录 |
1.3.4 Java环境变量
hadoop-env.sh
1 | # Licensed to the Apache Software Foundation (ASF) under one |
1 | # 3.4 Java环境变量 |
1.3.5 启动 Hadoop
构建镜像
1 | docker build -t spark-python-2 . |

构建过程出现如上图,说明成功格式化。
从镜像中启动,并将宿主机50070端口 映射到 容器内50070端口,最后进入容器内bash终端
1 | docker run -it --name spark-python-2-container -p 50070:50070 spark-python-2 bash |
启动ssh
1 | /etc/init.d/ssh start |
接着开启 NameNode 和 DataNode 守护进程
1 | start-dfs.sh |

1 | jps |

补充:
停止 hadoop
1 stop-dfs.sh

1.4 安装 Spark
由于我们已经自己安装了Hadoop,所以这里选择 spark-3.0.2-bin-without-hadoop.tgz
Spark部署模式主要有四种:
Local模式(单机模式)
Standalone模式(使用Spark自带的简单集群管理器)
YARN模式(使用YARN作为集群管理器)
Mesos模式(使用Mesos作为集群管理器)
这里介绍Local模式(单机模式)的 Spark安装。
1 | # 4. 安装 Spark |
spark-env.sh
1 |
|
spark-env.sh :
有了上面的配置信息以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据。
如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据。 配置完成后就可以直接使用,不需要像Hadoop运行启动命令。 通过运行Spark自带的示例,验证Spark是否安装成功。
1.4.1 运行示例
1 | $SPARK_HOME/bin/run-example SparkPi 2>&1 | grep "Pi is" |

2.HDFS常用操作
使用hadoop用户名登录进入Linux系统,启动Hadoop,参照相关Hadoop书籍或网络资料,或者也可以参考本教程官网的“实验指南”栏目的“HDFS操作常用Shell命令”,使用Hadoop提供的Shell命令完成如下操作:
(1) 启动Hadoop,在HDFS中创建用户目录“/user/hadoop”;
(2) 在Linux系统的本地文件系统的“/home/hadoop”目录下新建一个文本文件test.txt,并在该文件中随便输入一些内容,然后上传到HDFS的“/user/hadoop”目录下;
(3) 把HDFS中“/user/hadoop”目录下的test.txt文件,下载到Linux系统的本地文件系统中的“/home/hadoop/下载”目录下;
(4) 将HDFS中“/user/hadoop”目录下的test.txt文件的内容输出到终端中进行显示;
(5) 在HDFS中的“/user/hadoop”目录下,创建子目录input,把HDFS中“/user/hadoop”目录下的test.txt文件,复制到“/user/hadoop/input”目录下;
(6) 删除HDFS中“/user/hadoop”目录下的test.txt文件,删除HDFS中“/user/hadoop”目录下的input子目录及其子目录下的所有内容。
3. Spark读取文件系统的数据
(1)在pyspark中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数;
(2)在pyspark中读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;
(3)编写独立应用程序,读取HDFS系统文件“/user/hadoop/test.txt”(如果该文件不存在,请先创建),然后,统计出文件的行数;通过 spark-submit 提交到 Spark 中运行程序。
四、实验报告
《Spark编程基础》实验报告 | ||
---|---|---|
题目: | 姓名: | 日期: |
实验环境: | ||
实验内容与完成情况: | ||
出现的问题: | ||
解决方案(列出遇到的问题和解决办法,列出没有解决的问题): |
参考
感谢帮助!