Docker构建学习环境(3)-部署Spark并提交WordCount任务

Spark概述

Apache Spark是一个开源集群运算框架,最初是由加州大学柏克莱分校AMPLab所开发。相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark使用了存储器内运算技术,能在数据尚未写入硬盘时即在存储器内分析运算。Spark在存储器内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍,即便是运行程序于硬盘时,Spark也能快上10倍速度。[1]Spark允许用户将数据加载至集群存储器,并多次对其进行查询,非常适合用于机器学习算法。摘自维基百科。总结一下就是,hadoop的mapreduce是将中间结果存在磁盘上,而spark是将中间结果存在主存中,所以速度比Hadoop的mapreduce快。

准备工作
环境选择
  • 宿主机系统:win10
  • hadoop版本:3.1.1(构建基于HDFS的spark)
  • Spark版本:2.4.5
  • 容器系统:ubuntu16
  • jdk:1.8
准备
  • 下载jdk1.8下载地址放入E:/docker/spark目录下
  • 下载Hadoop下载地址放入E:/docker/spark目录下,这一步不是必须的,只是因为我部署hdfs的时候选择了版本3.1.1不想重新部署,所以下载Spark时选择了Pre-build with user-provided Apache Haddop,啥意思呢?就是自定义版本的Hadoop,如果选择的Spark版本是Pre-build for Apache Haddop 2.6/2.7,那就不需要单独下载Hadoop,因为下载的Spark已经预编译了。
  • 下载spark下载地址放入E:/docker/spark目录下,选择好自己的版本,如果已经安装了Hadoop2.6/2.7建议直接下载预编译了Hadoop的版本,不需要后续配置环境参数。</
### 如何在Docker中运行Spark #### 创建和配置Docker环境以支持Spark 为了使Docker能够成功运行Spark,需要先创建适合的Docker镜像。这通常涉及到编写一个`Dockerfile`来定制化安装必要的软件包和服务。 ```dockerfile FROM ubuntu:latest RUN apt-get update && \ apt-get install -y openjdk-8-jdk && \ apt-get clean ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ WORKDIR /opt/spark-app COPY . . CMD ["bash"] ``` 上述脚本展示了基础版的Ubuntu镜像上安装OpenJDK的过程,设置了工作目录以及默认命令[^2]。 #### 启动带有Hadoop和Spark的大数据集群 对于更复杂的场景,比如想要集成Hadoop与Spark形成大数据处理平台,则可以参考特定指南完成复杂环境下的部署操作。例如,在腾讯云服务器环境下快速建立包含HDFS在内的Spark集群实例[^4]。 #### 使用预构建Docker镜像启动Spark应用 如果不想自己制作镜像,也可以直接拉取官方提供的已打包好所有依赖项的Spark Docker镜像: ```shell docker pull bitnami/spark:latest ``` 接着可以通过如下方式启动容器连接到交互式的Bash shell内执行后续指令: ```shell docker run --name my-spark-container -it --rm bitnami/spark:latest bash ``` 此时便可以在新打开的终端窗口里开始探索如何提交作业给Spark集群了[^1]。 #### 提交第一个简单的Spark应用程序 假设已经处于正确的环境中(即之前提到过的通过`exec`进入正在运行中的容器),那么现在就可以尝试着写一段Python代码作为入门级的例子来看一看效果如何: ```python from pyspark import SparkContext, SparkConf conf = SparkConf().setAppName(&#39;wordcount&#39;) sc = SparkContext(conf=conf) text_file = sc.textFile("README.md") counts = text_file.flatMap(lambda line: line.split()) \ .map(lambda word: (word, 1)) \ .reduceByKey(lambda a, b: a + b) for count in counts.collect(): print(count) ``` 这段程序会读取当前路径下的`README.md`文档内容对其中单词的数量进行统计输出[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值