前言

在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境,我们已经部署好了一个Spark的开发环境。
本文的目标是写一个Spark应用,并可以在集群中测试。

创建一个Scala的工程- SimpleAPP

  • 建一个目录SimpleAPP
mkdir SimpleAPP
mkdir -p SimpleAPP/src/main/scala
  • 建一个SimpleAPP/src/main/scala/SimpleApp.scala文件
    这个程序会进行MapReduce计算,计算从1到输入参数n的平方和。
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConfobject SimpleApp {def main(args: Array[String]) {squareSum(10000)}private def squareSum(n: Long): Long = {val conf = new SparkConf().setAppName("Simple Application")val sc = new SparkContext(conf)val squareSum = sc.parallelize(1L until n).map { i => i * i}.reduce(_ + _)println(s"============== The square sum of $n is $squareSum. ==============")squareSum}
}
  • 建一个SimpleAPP/build.sbt文件
name := "Simple Application Project"version := "1.0"scalaVersion := "2.11.8"libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.0"

构建你的工程

  • 构建工程
# move to the project folder
cd SimpleAPP# build the project
sbt package

Output:

[info] Packaging .../target/scala-2.11/simple-application-project_2.11-1.0.jar ...
[info] Done packaging.

粗体的部分是构建出来的jar文件相对路径。需要记住,运行的时候有用。

  • 运行工程
    使用spark提供的命令运行我们的spark应用。
    --master local[4]表示在local模式下运行,使用4个线程。
# run the project in local with 4 threads
$SPARK_HOME/bin/spark-submit --master local[4] --class SimpleApp target/scala-2.11/simple-application-project_2.11-1.0.jar

输出 (会有很多的log输出):

...
============== The square sum of 10000 is 333283335000. ==============
...

现在,我们完成了一个简单的spark工程的开发。下一步,看看如何在集群中运行。

启动一个standalone集群环境。

部署一个standalone集群环境不是本文要讲的内容。
所以,现在我们只使用单机上的集群功能。
如果想部署一个有多个机器的standalone集群环境,可以查看在官网上的说明。部署起来也比较简单。

基本概念

  • Master server
    集群环境中,主从架构里的主服务器。
    可以有多个master server,只能有一个是leader,其它的都是standby。(我猜的)
    Spark使用ZooKeeper的实现主服务器的灾难恢复。

  • Slave worker
    集群环境中,主从架构里的从服务器。

  • Master URL
    在standalone集群环境中,master服务器启动后,master服务器提供了一个master URL用于和slave workers交互。
    默认的Master URL是:spark://$(hostname):7077
    实际的Master URL可以在master服务器的日志中找到。
    这个Master URL用于:

    • 启动slave workers。
    • Spark应用的--master配置。
  • Master Web UI
    在master服务器启动后,master服务器提供了一个web应用,可以通过浏览器来查看运行的状态。
    默认的Master Web UI URL是:http://localhost:8080
    实际的Master Web UI URL可以在master服务器的日志中找到。

  • Slave Web UI
    在Slave worker启动后,slave worker提供了一个web应用,可以通过浏览器来查看运行的状态。
    默认的Slave Web UI URL是:http://localhost:8081
    实际的Slave Web UI URL可以在master服务器的日志中找到。

启动master和slave服务

  • 启动master服务器
# start master
$SPARK_HOME/sbin/start-master.sh

输出:

starting org.apache.spark.deploy.master.Master, logging to /opt/spark/logs/spark-steven-org.apache.spark.deploy.master.Master-1-sycentos.localdomain.out

  • 如果需要,查看一个Master URL
# We need get the spark master url
cat $SPARK_HOME/logs/spark-steven-org.apache.spark.deploy.master.Master-1-sycentos.localdomain.out | grep Master:
# or
cat $SPARK_HOME/logs/spark-$(whoami)-org.apache.spark.deploy.master.Master-1-$(hostname).out | grep Master:

输出:

16/09/23 19:45:37 INFO Master: Started daemon with process name: 4604@sycentos.localdomain
16/09/23 19:45:42 INFO Master: Starting Spark master at spark://sycentos.localdomain:7077
16/09/23 19:45:42 INFO Master: Running Spark version 2.0.0
16/09/23 19:45:44 INFO Master: I have been elected leader! New state: ALIVE
16/09/23 19:59:26 INFO Master: Registering worker 10.0.2.15:36442 with 4 cores, 2.7 GB RAM
16/09/23 20:15:13 INFO Master: 10.0.2.15:42662 got disassociated, removing it.
16/09/23 20:15:13 INFO Master: 10.0.2.15:36442 got disassociated, removing it.
16/09/23 20:15:13 INFO Master: Removing worker worker-20160923195923-10.0.2.15-36442 on 10.0.2.15:36442
16/09/23 20:15:39 INFO Master: Registering worker 10.0.2.15:42462 with 4 cores, 2.7 GB RAM

Note: Master: I have been elected leader! New state: ALIVE
粗体就是Master URL.

  • 启动slave
$SPARK_HOME/sbin/start-slave.sh spark://$(hostname):7077
# or
# $SPARK_HOME/sbin/start-slave.sh spark://sycentos.localdomain:7077

输出:

starting org.apache.spark.deploy.worker.Worker, logging to /opt/spark/logs/spark-steven-org.apache.spark.deploy.worker.Worker-1-sycentos.localdomain.out

  • 如果需要,检测是否slave被成功启动了。
cat $SPARK_HOME/logs/spark-$(whoami)-org.apache.spark.deploy.worker.Worker-1-$(hostname).out | grep spark://
# or
# cat $SPARK_HOME/logs/spark-steven-org.apache.spark.deploy.worker.Worker-1-sycentos.localdomain.out

输出:

16/09/23 20:15:39 INFO Worker: Successfully registered with master spark://sycentos.localdomain:7077

这时,spart的master和slave服务都已经启动。

说明一下,关闭Master的命令是:

$SPARK_HOME/sbin/stop-master.sh
$SPARK_HOME/sbin/stop-slave.sh

在集群环境上,运行SimpleAPP

进入到SimpleApp的目录,并运行:

# run the project
$SPARK_HOME/bin/spark-submit --master spark://$(hostname):7077 --class SimpleApp target/scala-2.11/simple-application-project_2.11-1.0.jar

输出:

...
16/09/23 20:34:40 INFO StandaloneAppClient\(ClientEndpoint: Connecting to master spark://sycentos.localdomain:7077... ... 16/09/23 20:34:40 INFO StandaloneAppClient\)ClientEndpoint: Executor added: app-20160923203440-0000/0 on worker-20160923201537-10.0.2.15-42462 (10.0.2.15:42462) with 4 cores
...

通过查找关键字master和worker,可以确认是在集群上运行。

访问master web UI.

获取Master Web UI的地址。

从master服务的log里,可以找到master URL。

# Query master web UI url from master service log.
cat /opt/spark/logs/spark-steven-org.apache.spark.deploy.master.Master-1-sycentos.localdomain.out | grep MasterWebUI

输出:

16/09/23 19:45:43 INFO MasterWebUI: Bound MasterWebUI to 0.0.0.0, and started at http://10.0.2.15:8080

访问Master Web UI

通过浏览器访问http://localhost:8080/,可以看到有一个完成的应用。

现在,我们已经可以在集群环境中运行SimpleApp

理解Spark Application

  • 一个Spark Application是一个运行在Spark环境中的Java应用。
  • 需要在安装了Spark的机器上,通过Spark命令来启动。
  • Spark Application是通过Spark Master URL和Spark Master Server交互,因此,不一定需要在Spark的Master或者Slave上启动。
  • Spark Application是通过SparkConf和SparkContext与Spark系统交互。

下面请看

至此,我们已经写好了一个spark集群scala的应用。下一步请看:
Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用
Spark集群 + Akka + Kafka + Scala 开发(4) : 开发一个Kafka + Spark的应用

参照

  • akka document
  • Elasticity (cloud computing)
  • Resilient control systems
  • akka 2.4.10 code samples
  • akka office samples
  • A simple Akka (actors) remote example
  • Shutdown Patterns in AKKA 2

转载于:https://www.cnblogs.com/steven-yang/p/5926553.html

Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用相关推荐

  1. spark集群,kafka集群和zookeeper的docker集群快速搭建

    准备操作 安装docker(宿主机) yum install docker (宿主机时centos用yum管理包) systemctl daemon-reload(重加载deamon服务,是docke ...

  2. Spark集群安装介绍

    (1)初学者对于spark的几个疑问 http://aperise.iteye.com/blog/2302481 (2)spark开发环境搭建 http://aperise.iteye.com/blo ...

  3. 大数据之Spark集群安装及简单使用

    目录 1.Spark集群安装 1.1. 安装 2.启动Spark Shell 2.1.启动spark shell 2.2.在spark shell中编写WordCount程序 目录 1.Spark集群 ...

  4. Zeppelin-在Flink和Spark集群的安装

    2019独角兽企业重金招聘Python工程师标准>>> 该教程主要面向Zeppelin的入门者.不需要太多的关于 Linux, git, 或其它工具的基础知识.如果你按照这里的方法逐 ...

  5. Spark集群环境搭建(standalone模式)

    Spark集群环境搭建(standalone模式) 1. 实验室名称: 2. 实验项目名称: 3. 实验学时: 4. 实验原理: 5. 实验目的: 6. 实验内容: 7. 实验器材(设备.虚拟机名称) ...

  6. spark集群详细搭建过程及遇到的问题解决(四)

    在spark集群详细搭建过程及遇到的问题解决(三)中,我们将讲述了hadoop的安装过程,在本文中将主要讲述spark的安装配置过程. spark@master:~/spark$ cd hadoop ...

  7. spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用

    点击蓝字关注我 前面用了一篇文章详细的介绍了集群HDFS文件系统的搭建,HDFS文件系统只是一个用于存储数据的系统,它主要是用来服务于大数据计算框架,例如MapReduce.Spark,本文就接着上一 ...

  8. Spark集群完全分布式安装部署

    Spark集群完全分布式安装部署 下载安装 配置Spark 1spark-envsh配置 2slaves配置 3profile配置 复制到其他节点 测试 总结 Spark集群完全分布式安装部署 本文中 ...

  9. anaconda3环境整体打包放在Spark集群上运行

    一.将虚拟Python环境打包 创建好环境后,进入到环境所在的文件夹,例如环境是/home/hadoop/anaconda3/envs, cd到envs下,使用打包命令将当前目录下的文件打成zip包: ...

最新文章

  1. hubuild 打包ios_iOS 通过HBuilder进行云端打包ipa文件
  2. c中volatile用法
  3. Kali学习笔记31:目录遍历漏洞、文件包含漏洞
  4. 计算一个数的二进制中1的个数
  5. javaweb mysql 连接池 c3p0 配置_JavaWeb基础—数据库连接池DBCP、C3P0
  6. HTML试题及答案(总结)
  7. C++之文件IO操作流
  8. 卷积神经网络架构理解
  9. FeatureLayer到本地shapefile文件
  10. python中ab+c*2_day2总结-Python中的基本语法
  11. 警惕食源性疾病——食源性病原菌介绍
  12. 计算机显示的数据的格式,GPS 数据格式及显示问题!!!
  13. 百度地图 截图java_我从百度地图静态图API中通过url获取到的图片,用java有没有什么办法可以把图片上的百度logo去掉呢...
  14. 10个非常基础的 Javascript 问题
  15. 山东理工ACM【1147】求绝对值最大值
  16. 回归中的相关度和决定系数
  17. Office 365 API平台概览
  18. 不逼自己下不知道潜力可以有多大
  19. lumen 框架学习
  20. Google Earth Engine ——重采样过程中的错误

热门文章

  1. FCN论文-语义分割
  2. flir红外数据集_FLIR联合Foresight推广长波红外+可见光四摄视觉系统
  3. python slice和列表切割_Python 列表切边 slice
  4. redis迁移至linux,redis几种数据导出导入方式
  5. upload组件 获得焦点_HTML Input FileUpload autofocus用法及代码示例
  6. adb命令重置_android – 擦除数据/通过ADB恢复出厂设置
  7. 承接一个外包开发项目后,开发流程以及如何做好。
  8. php全局变量global和$GLOBALS
  9. 量江湖获数千万元B轮融资,提出人工智能ASM投放解决方案
  10. 仿百度外卖的酷炫水波纹效果