快:基于docker一键搭建spark单机环境的WordCount APP实现

前言

spark 是一个大数据处理技术栈,广义的spark包括 spark sql,spark shell,HDFS 和 YARN。

本文将向您介绍:

  • 使用使用最快的方式安装 spark
  • 如何快速开发一个字符频数统计(Word count)的小项目
  • 如何使用 docker 管理镜像和容器

安装 docker

前往https://www.docker.com/注册 docker 账号,登录后就可以前往 docker hub:https://hub.docker.com/下载社区版 docker desktop。

docker 首页

docker hub 下载 docker

下载 spark

使用 docker 拉取一个社区上传的 spark 镜像,集成 JDK 等基础环境。

https://github.com/big-data-europe/docker-spark

创建一个 master 节点

$ docker run --name spark-master -h spark-master -e ENABLE_INIT_DAEMON=false -p 8080:8080 -v ${PWD}:/app -d bde2020/spark-master:2.4.1-hadoop2.7

使用 -p 暴露 8080 端口的服务到物理机上来,使用 -v 做一个磁盘文件和 container 内文件夹映射,方便存放文件,在物理机上编辑,在 container 里运行。

打开创建的节点

$ docker exec -it spark-master bash

使用 bash 脚本解释器打开 spark-master 这个镜像所创建的容器实例

探索

spark

根目录下有 spark 文件夹

通过上图可知,spark 的核心可执行文件,存放在 /spark/bin下,包括常用的 spark-shellpyspark

使用浏览器打开 http://localhost:8080/

volume

还记得上文提到的 -v 吗?我们 cd/app目录查看一下:

/app 目录对应的就是物理系统中的路径

在上例使用 docker run 中,命令中使用了 ${PWD},刚好就代表了C:\Users\username,所以这个目录里面的文件看起来才这么眼熟。

WordCount

代码

本例使用 PyCharm 编写,将在 C:\Users\username\PycharmProjects\wordcount-app\ 目录下创建 wc.py 和 文本文件 f.txt

from __future__ import print_function

import sys
from operator import add

from pyspark.sql import SparkSession

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: wordcount <file>", file=sys.stderr)
        sys.exit(-1)

    spark = SparkSession.builder.appName("PythonWordCount").getOrCreate()

    lines = spark.read.text(sys.argv[1]).rdd.map(lambda r: r[0])
    counts = lines.flatMap(lambda x: x.split(' ')) \
        .map(lambda x: (x, 1)) \
        .reduceByKey(add)
    output = counts.collect()
    for (word, count) in output:
        print("%s: %i" % (word, count))

    spark.stop()

f.txt

运行

$ cd /app/PycharmProjects/wordcount-app
$ ls
f.txt  wc.py

现在调用 spark-submit 执行字数频数统计任务:

$ /spark/bin/spark-submit wc.py f.txt
19/07/16 08:32:58 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
19/07/16 08:32:59 INFO SparkContext: Running Spark version 2.4.1
19/07/16 08:32:59 INFO SparkContext: Submitted application: PythonWordCount
19/07/16 08:32:59 INFO SecurityManager: Changing view acls to: root
19/07/16 08:32:59 INFO SecurityManager: Changing modify acls to: root

......more output ......

word: 3
peace: 3
love: 4
robot: 3
world: 3

......more output ......

19/07/16 08:33:04 INFO ShutdownHookManager: Deleting directory /tmp/spark-93623c9e-c565-4f64-9292-c14ae33e5877/pyspark-81229ef9-606d-4872-b0b3-0d6b68ea0526
19/07/16 08:33:04 INFO ShutdownHookManager: Deleting directory /tmp/spark-0166d051-ff96-4b18-b24f-8e4523617988
19/07/16 08:33:04 INFO ShutdownHookManager: Deleting directory /tmp/spark-93623c9e-c565-4f64-9292-c14ae33e5877

参考文献


  1. 1.阿男. 使用Docker快速安装部署Spark | 阿男的小窝[EB/OL]. http://weinan.io/2018/05/04/spark.html, 2018-05-04
  2. 2.big-data-europe. big-data-europe/docker-spark: Apache Spark docker image[EB/OL]. https://github.com/big-data-europe/docker-spark, 2015-10-08

   转载规则


《快:基于docker一键搭建spark单机环境的WordCount APP实现》 Harbor Zeng 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
中英双语论文解析:RDD,基于内存的集群计算容错抽象 中英双语论文解析:RDD,基于内存的集群计算容错抽象
Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing(RDD:基于内存的集群计算容错抽象)Abstract 摘要We present Resilient Distributed Datasets (RDDs), a distributed memory abstrac
下一篇 
如何使用docker搭建hadoop的cdh版本单节点伪集群开发测试环境 如何使用docker搭建hadoop的cdh版本单节点伪集群开发测试环境
前言docker 是一个容器化技术的程序。不仅适用于微服务集群部署,而且作为开发者个人使用,也是十分方便的,比如我们可以快速安装数据库,缓存等中间件,丝毫不影响物理机的系统环境,不会因为卸载,更新等,带来不可预知的问题,也减少了重装系统的可能性。 在容器化技术,docker 一直走在前列,docker 是用 go 语言编写的一个容器平台,他的基本单位是容器,每个容器就像一个独立的操作系统一样,可
  目录