搭建spark和hdfs的集群环境会消耗一些时间和精力,处于学习和开发阶段的同学关注的是spark应用的开发,他们希望整个环境能快速搭建好,从而尽快投入编码和调试,今天咱们就借助docker,极速搭建和体验spark和hdfs的集群环境;

实战环境信息

以下是本次实战涉及的版本号:

  1. 操作系统:CentOS7
  2. hadoop:2.8
  3. spark:2.3
  4. docker:17.03.2-ce
  5. docker-compose:1.23.2

极速搭建spark集群(含hdfs集群)

  1. 在CentOS7机器上建一个文件夹(例如test),进入此文件夹;
  2. 在新建的文件夹内执行如下命令,即可搭建好spark和hdfs集群:
wget https://raw.githubusercontent.com/zq2599/blog_demos/master/sparkdockercomposefiles/docker-compose.yml \
&& wget https://raw.githubusercontent.com/zq2599/blog_demos/master/sparkdockercomposefiles/hadoop.env \
&& docker-compose up -d

没错,执行上面的命令就够了,只要静候命令执行完成,整个spark和hdfs集群环境就搭建好了;

查看环境

接下来检查一下整个环境是否正常,假设当前CentOS电脑的IP地址是192.168.1.101

  1. 用浏览器查看hdfs,如下图,可见有三个DataNode,地址是:http://192.168.1.101:50070
  2. 用浏览器查看spark,如下图,可见只有一个worker,地址是:http://192.168.1.101:8080

    注意:spark的worker数量,以及worker内存的分配,都可以通过修改docker-compose.yml文件来调整;

准备实战数据

  1. 登录CentOS7电脑,在刚才执行命令的目录下,发现多了几个文件夹,如下所示,注意input_files和jars这两个,稍后会用到:
[root@hedy 009]# ls -al
总用量 8
drwxr-xr-x.  6 root root  105 2月  10 00:47 .
drwxr-xr-x. 10 root root   94 2月  10 00:47 ..
drwxr-xr-x.  4 root root   34 2月  10 00:47 conf
drwxr-xr-x.  2 root root    6 2月  10 00:47 data
-rw-r--r--.  1 root root 3046 2月  10 00:47 docker-compose.yml
-rw-r--r--.  1 root root 1189 2月  10 00:47 hadoop.env
drwxr-xr-x.  2 root root    6 2月  10 00:47 input_files
drwxr-xr-x.  2 root root    6 2月  10 00:47 jars
  1. 稍后的实战是经典的WordCount,也就是将指定文本中的单词出现次数统计出来,因此要先准备一个文本文件,我这里在网上找了个英文版的《乱世佳人》,文件名为GoneWiththeWind.txt,读者您请自行准备一个英文的txt文件,放入input_files文件夹中;
  2. 执行以下命令,即可在hdfs上创建/input文件夹,再将GoneWiththeWind.txt上传到此文件夹中:
docker exec namenode hdfs dfs -mkdir /input \
&& docker exec namenode hdfs dfs -put /input_files/GoneWiththeWind.txt /input

您可能会有疑问:txt文件在宿主机上,hdfs是docker容器,怎么能上传上去呢?您看过docker-compose.yml就会发现,宿主机的input_files目录已经挂载到namenode容器上了,所以上面的命令其实就是将容器内的文件上传到hdfs上去;
4. 用浏览器查看hdfs,如下图,可见txt文件已经上传到hdfs上:

spark_shell实战WordCount

  1. 在CentOS电脑的命令行输入以下命令,即可创建一个spark_shell:
docker exec -it master spark-shell --executor-memory 512M --total-executor-cores 2

如下所示,已经进入了spark_shell的对话模式:

[root@hedy ~]# docker exec -it master spark-shell --executor-memory 512M --total-executor-cores 2
2019-02-09 17:13:44 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://localhost:4040
Spark context available as 'sc' (master = spark://master:7077, app id = app-20190209171354-0000).
Spark session available as 'spark'.
Welcome to____              __/ __/__  ___ _____/ /___\ \/ _ \/ _ `/ __/  '_//___/ .__/\_,_/_/ /_/\_\   version 2.3.0/_/Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131)
Type in expressions to have them evaluated.
Type :help for more information.scala>
  1. 继续输入以下命令,也就是scala版的WordCount:
sc.textFile("hdfs://namenode:8020/input/GoneWiththeWind.txt").flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _).sortBy(_._2,false).take(10).foreach(println)
  1. 稍后控制台就会输出整个txt中出现次数最多的十个单词,以及对应的出现次数,如下:
scala> sc.textFile("hdfs://namenode:8020/input/GoneWiththeWind.txt").flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _).sortBy(_._2,false).take(10).foreach(println)
(the,18264)
(and,14150)
(to,10020)
(of,8615)
(a,7571)
(her,7086)
(she,6217)
(was,5912)
(in,5751)
(had,4502)scala>
  1. 用浏览器查看spark,如下图,可见任务正在执行中(因为shell还没有退出),地址是:http://192.168.1.101:8080
  2. 输入Ctrl+c,退出shell,释放资源;

至此,spark_shell的实战就完成了,如果您是位java开发者,请接着往下看,咱们一起来实战java版spark应用的提交运行;

java实战WordCount

关于接下来的java版的WordCount,本文直接将jar下载下来用,而这个jar对应的源码以及开发过程,请参考文章《第一个spark应用开发详解(java版)》

  1. 在docker-compose.yml文件所在目录下,有个jars目录,进入此目录执行以下命令,就会将实战用到的jar文件下载到jars目录:
wget https://raw.githubusercontent.com/zq2599/blog_demos/master/sparkdockercomposefiles/sparkwordcount-1.0-SNAPSHOT.jar
  1. 执行以下命令,即可向spark提交java应用执行:
docker exec -it master spark-submit \
--class com.bolingcavalry.sparkwordcount.WordCount \
--executor-memory 512m \
--total-executor-cores 2 \
/root/jars/sparkwordcount-1.0-SNAPSHOT.jar \
namenode \
8020 \
GoneWiththeWind.txt
  1. 任务执行过程中,控制台会输出大量信息,其中有类似以下的内容,就是统计结果:
2019-02-09 17:30:32 INFO  WordCount:90 - top 10 word :
the 18264
and 14150
to  10020
of  8615
a   7571
her 7086
she 6217
was 5912
in  5751
had 4502
  1. 用浏览器查看hdfs,如下图,可见/output目录下创建了一个子文件夹20190209173023,这个文件夹下有两个文件,其中名为part-00000的就是本次实战输出的结果:
  2. 在hdfs的网页上看见/output目录下的子文件夹名称为20190209173023,因此执行以下命令,即可在控制台看到part-00000文件的内容:
docker exec namenode hdfs dfs -cat /output/20190209173023/part-00000

看到的part-00000的内容如下:

[root@hedy jars]# docker exec namenode hdfs dfs -cat /output/20190209173023/part-00000
(18264,the)
(14150,and)
(10020,to)
(8615,of)
(7571,a)
(7086,her)
(6217,she)
(5912,was)
(5751,in)
(4502,had)

以上就是极速搭建spark集群的实战,虽然操作简单,但是整个环境存在以下几处瑕疵:

  1. 只有一个worker,并行执行能力较差;
  2. hdfs容器的磁盘空间是在docker的安装路径下分配的,遇到大文件时容器将系统空间占满;
  3. spark master的4040端口没有开放,无法观察应用运行的情况;
  4. worker的8080端口都没有开放, 无法观察worker的运行情况,也不能查看业务运行日志;

针对上述问题,我对docker-compose.yml做了改进,您可以执行以下命令快速搭建整个集群环境,要注意的是下面的命令会启动6个worker,比较消耗内存,如果您的电脑内存低于10G,很可能启动容器失败,此时建议您打开docker-compose.yml文件,对worker的配置做适当删减:

wget https://raw.githubusercontent.com/zq2599/blog_demos/master/files/sparkcluster/docker-compose.yml \
&& wget https://raw.githubusercontent.com/zq2599/blog_demos/master/sparkdockercomposefiles/hadoop.env \
&& docker-compose up -d

如果您想了解更多优化的细节,例如磁盘如何调整,master和worker开放的web端口如何访问,请参考《docker下的spark集群,调整参数榨干硬件》;

至此,docker下的spark集群的搭建和体验我们都快速完成了,希望此文能助您快速搭建环境,聚焦业务开发;

欢迎关注我的公众号:程序员欣宸

docker下,极速搭建spark集群(含hdfs集群)相关推荐

  1. Spark基础学习笔记06:搭建Spark On YARN模式的集群

    文章目录 零.本讲学习目标 一.在Spark Standalone模式的集群基础上修改配置 二.运行Spark应用程序 (一)启动Hadoop的HDFS和YARN (二)运行Spark应用程序 (三) ...

  2. Docker下极速体验Kafka

    快速体验Kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,从本章开始我们先极速体验,再实战docker下搭建kafka环境,最后开发一个java web应用来体验kafka服务. 我们一起 ...

  3. Docker下gitlab搭建 实操步骤

    首先确保当前服务器安装了docker,并已配置镜像加速,配置方法如下 配置docker镜像加速 centos vim /etc/docker/daemon.json (如果文件不存在请新建该文件)加入 ...

  4. docker下的spark集群,调整参数榨干硬件

    本文是<docker下,极速搭建spark集群(含hdfs集群)>的续篇,前文将spark集群搭建成功并进行了简单的验证,但是存在以下几个小问题: spark只有一个work节点,只适合处 ...

  5. Spark基础学习笔记06:搭建Spark On YARN集群

    文章目录 零.本讲学习目标 一.Spark On YARN架构 (一)client提交方式 (二)cluster提交方式 二.搭建Spark On YARN集群 (一)搭建Spark Standalo ...

  6. 搭建Spark On YARN集群

    文章目录 零.本讲学习目标 一.Spark On YARN架构 (一)client提交方式 (二)cluster提交方式 二.搭建Spark On YARN集群 (一)搭建Spark Standalo ...

  7. 从0开始搭建Hadoop2.x高可用集群(HDFS篇)

    从0开始搭建Hadoop2.x高可用集群(HDFS篇) 演示目标 演示环境 注意事项 准备虚拟机 关闭防火墙 检查系统时间 修改host 设置免密登录 卸载OpenJDK 安装软件 准备HDFS 配置 ...

  8. Windows家庭版下基于Docker的hadoop、Spark集群搭建

    Windows家庭版下基于Docker的hadoop.Spark集群搭建 目录 Windows家庭版下基于Docker的hadoop.Spark集群搭建 1.实验目的 2.实验平台 3.实验内容和要求 ...

  9. docker下,一行命令搭建elasticsearch6.5.0集群(带head插件和ik分词器)

    docker下,一行命令搭建elasticsearch6.5.0集群(带head插件和ik分词器) 2019年01月27日 21:06:12 博陵精骑 阅读数:794 标签: dockerelasti ...

最新文章

  1. 【Qt】ubuntu QtCreator的pro文件中使用pkg-config
  2. [LeetCode]题解(python):150-Evaluate Reverse Polish Notation
  3. 对 Python 开发者而言,IPython 仍然是 Jupyter Notebook 的核心
  4. 卷积网络基础知识---Group Convolution分组卷积
  5. python做ui自动化_[python]RobotFramework自定义库实现UI自动化
  6. Quartz学习笔记
  7. 红外感应自动出水水龙头的电路原理
  8. dagger android 学习(二):AndroidInjector的使用
  9. html2个表单,单个html angular2中的多个表单
  10. WPF 和 windows Form Application的区别
  11. 英特尔 620 显卡 驱动 七代cpu_英特尔的智能“整体厨房”
  12. 周志华教授专著《集成学习:基础与算法》上市,豆瓣满分森林书破解AI实践难题...
  13. Domino的压缩数据库的Load Compact命令
  14. 打开VM虚拟机,遇见问题“无法连接MKS:套接字连接次数太多;正在放弃。”
  15. 深入HBase架构解析(二)【转】
  16. iOS 越狱手机 ikeymonitor 插件检测
  17. Jmeter使用教程
  18. WPS快捷键提高工作效率
  19. Android 9.0系统源码_包管理机制(二)PackageInstaller安装APK
  20. html实现下载功能(两种方式)

热门文章

  1. css 特效 火球 光,JS+CSS实现炫酷光感效果
  2. 浅谈Mifare ultralight原理
  3. 什么是共用体?如何定义和使用共用体?
  4. 计算机网络技术极实践应用,计算机网络技术及在实践中的应用
  5. asp.net电子地图
  6. Python爬取扇贝Python必背词汇
  7. kafka Steams详解
  8. Qt解压带有密码的加密文件
  9. plsql配置连接oracle,不安装oracle客户端
  10. ondblclick