Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用
[comment]: # Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用
前言
在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.SparkConf
object 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 RAMNote: 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
Spark集群 + Akka + Kafka + Scala 开发(2) : 开发一个Spark应用的更多相关文章
- Spark集群 + Akka + Kafka + Scala 开发(3) : 开发一个Akka + Spark的应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...
- Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境
目标 配置一个spark standalone集群 + akka + kafka + scala的开发环境. 创建一个基于spark的scala工程,并在spark standalone的集群环境中运 ...
- Spark集群 + Akka + Kafka + Scala 开发(4) : 开发一个Kafka + Spark的应用
前言 在Spark集群 + Akka + Kafka + Scala 开发(1) : 配置开发环境中,我们已经部署好了一个Spark的开发环境. 在Spark集群 + Akka + Kafka + S ...
- zhihu spark集群,书籍,论文
spark集群中的节点可以只处理自身独立数据库里的数据,然后汇总吗? 修改 我将spark搭建在两台机器上,其中一台既是master又是slave,另一台是slave,两台机器上均装有独立的mongo ...
- Spark系列—01 Spark集群的安装
一.概述 关于Spark是什么.为什么学习Spark等等,在这就不说了,直接看这个:http://spark.apache.org, 我就直接说一下Spark的一些优势: 1.快 与Hadoop的Ma ...
- 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序
第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...
- 【Spark-core学习之三】 Spark集群搭建 & spark-shell & Master HA
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...
- CentOS6安装各种大数据软件 第十章:Spark集群安装和部署
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- Spark学习笔记--Linux安装Spark集群详解
本文主要讲解如何在Linux环境下安装Spark集群,安装之前我们需要Linux已经安装了JDK和Scala,因为Spark集群依赖这些.下面就如何安装Spark进行讲解说明. 一.安装环境 操作系统 ...
随机推荐
- Atitit 代理CGLIB 动态代理 AspectJ静态代理区别
Atitit 代理CGLIB 动态代理 AspectJ静态代理区别 1.1. AOP 代理主要分为静态代理和动态代理两大类,静态代理以 AspectJ 为代表:而动态代理则以 spring AOP 为 ...
- JavaScript对浏览器的URL进行编码、解码
关于url编码,js有三个函数.有三个解码方法,escape,encodeURI,encodeURIComponent().有三个解码方法,unescapse,decodeURI,decodeURIC ...
- ssh(sturts2_spring_hibernate) 框架搭建之JPA代替hibernate
一.JPA用来替代hibernate ⒈JPA的全称是JAVA Persistence API.指的是JPA通过注解或者是XML描述对象—关系表的映射关系,并且将运行的实体对象持久化数据库中. ⒉JP ...
- SSH无密码登录
首先生成密钥对 ssh-keygen -t rsa cd ~/.ssh/ cat id_rsa.pub 复制你生成的公钥 登录到需要免登录的服务器 cd ~/.ssh 添加到 authorized_k ...
- file:///Users/xmg/Desktop/xiangmu~Bsbdejie/BaisibudejieTheSecondtime/BaisibudejieTheSecond/BaisibudejieTheSecond/AppDelegate.m: warning: Missing file: /Users/xmg/Desktop/xiangmu~Bsbdejie/BaisibudejieT
warning: Missing file: is missing from working copy fatal error: file '-.h' has been modified since ...
- 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架
一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...
- 【WP开发】使用磁倾仪
磁倾仪,也叫倾斜仪,主要用来检测手机设备在各个轴上旋转的角度.注意,磁倾仪与陀螺仪的差异,陀螺仪的关注点是旋转的角速度,它并不关注角度,只注重速度.而磁倾仪的读数就是设备倾斜的角度. 不管是使用重力感 ...
- 包管理器Bower
今天自己用Angular写东西的时候,下载了Angular-seed项目,发现需要用到bower,之前也使用过,没有仔细了解,今天趁机了解到一些. bower的官网地址: http://bower.i ...
- 轻松自动化---selenium-webdriver(python) (七)
本节知识点: 多层框架或窗口的定位: switch_to_frame() switch_to_window() 智能等待: implicitly_wait() 对于一个现代的web应用,经常会出现框架 ...
- selenium-webdriver(python) (十五) -- 鼠标事件
本节重点: ActionChains 类 context_click() 右击 double_click() 双击 drag_and_drop() 拖动 测试的产品中有一个操作是右键点击文件列 ...