在本博客的《Spark高速入门指南(Quick Start Spark)》文章中简单地介绍了怎样通过Spark shell来高速地运用API。本文将介绍怎样高速地利用Spark提供的API开发Standalone模式的应用程序。Spark支持三种程序语言的开发:Scala (利用SBT进行编译), Java (利用Maven进行编译)以及Python。以下我将分别用Scala、Java和Python开发相同功能的程序:
一、Scala版本号:
程序例如以下:
08 |
* 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货 |
09 |
* 过往记忆博客微信公共帐号:iteblog_hadoop |
11 |
import org.apache.spark.SparkContext |
12 |
import org.apache.spark.SparkConf |
14 |
def main(args: Array[String]) { |
16 |
val conf = new SparkConf().setAppName("Spark Application in Scala") |
17 |
val sc = new SparkContext(conf) |
18 |
val logData = sc.textFile(logFile, 2).cache() |
19 |
val numAs = logData.filter(line => line.contains("a")).count() |
20 |
val numBs = logData.filter(line => line.contains("b")).count() |
21 |
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs)) |
为了编译这个文件,须要创建一个xxx.sbt文件,这个文件相似于pom.xml文件,这里我们创建一个scala.sbt文件,内容例如以下:
1 |
name := "Spark application in Scala" |
3 |
scalaVersion := "2.10.4" |
4 |
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.0.0" |
编译:
3 |
[success] Total time: 270 s, completed Jun 11, 2014 1:05:54 AM |
二、Java版本号
07 |
* 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货 |
08 |
* 过往记忆博客微信公共帐号:iteblog_hadoop |
11 |
import org.apache.spark.api.java.*; |
12 |
import org.apache.spark.SparkConf; |
13 |
import org.apache.spark.api.java.function.Function; |
15 |
public class SimpleApp { |
16 |
public static void main(String[] args) { |
18 |
SparkConf conf =new SparkConf().setAppName("Spark Application in Java"); |
19 |
JavaSparkContext sc = new JavaSparkContext(conf); |
20 |
JavaRDD<String> logData = sc.textFile(logFile).cache(); |
22 |
long numAs = logData.filter(new Function<String, Boolean>() { |
23 |
public Boolean call(String s) { return s.contains("a"); } |
26 |
long numBs = logData.filter(new Function<String, Boolean>() { |
27 |
public Boolean call(String s) { return s.contains("b"); } |
30 |
System.out.println("Lines with a: " + numAs +",lines with b: " + numBs); |
本程序分别统计README.md文件里包括a和b的行数。本项目的pom.xml文件内容例如以下:
01 |
<?xml version="1.0" encoding="UTF-8"?> |
04 |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 |
06 |
http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
08 |
<modelVersion>4.0.0</modelVersion> |
10 |
<groupId>spark</groupId> |
11 |
<artifactId>spark</artifactId> |
12 |
<version>1.0</version> |
16 |
<groupId>org.apache.spark</groupId> |
17 |
<artifactId>spark-core_2.10</artifactId> |
18 |
<version>1.0.0</version> |
利用Maven来编译这个工程:
2 |
[INFO] ------------------------------------------------------------------------ |
4 |
[INFO] ------------------------------------------------------------------------ |
5 |
[INFO] Total time: 5.815s |
6 |
[INFO] Finished at: Wed Jun 11 00:01:57 CST 2014 |
7 |
[INFO] Final Memory: 13M/32M |
8 |
[INFO] ------------------------------------------------------------------------ |
三、Python版本号
05 |
# bolg: http://www.iteblog.com |
06 |
# 本文地址:http://www.iteblog.com/archives/1041 |
07 |
# 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干货 |
08 |
# 过往记忆博客微信公共帐号:iteblog_hadoop |
10 |
from pyspark import SparkContext |
13 |
sc = SparkContext("local", "Spark Application in Python") |
14 |
logData = sc.textFile(logFile).cache() |
16 |
numAs = logData.filter(lambda s: 'a' in s).count() |
17 |
numBs = logData.filter(lambda s: 'b' in s).count() |
19 |
print "Lines with a: %i, lines with b: %i" % (numAs, numBs) |
四、測试执行
本程序的程序环境是Spark 1.0.0,单机模式,測试例如以下:
1、測试Scala版本号的程序
1 |
# bin/spark-submit --class "scala.Test" \ |
3 |
target/scala-2.10/simple-project_2.10-1.0.jar |
5 |
14/06/11 01:07:53 INFO spark.SparkContext: Job finished: |
6 |
count at Test.scala:18, took 0.019705 s |
7 |
Lines with a: 62, Lines with b: 35 |
2、測试Java版本号的程序
1 |
# bin/spark-submit --class "SimpleApp" \ |
3 |
target/spark-1.0-SNAPSHOT.jar |
5 |
14/06/11 00:49:14 INFO spark.SparkContext: Job finished: |
6 |
count at SimpleApp.java:22, took 0.019374 s |
7 |
Lines with a: 62, lines with b: 35 |
3、測试Python版本号的程序
1 |
# bin/spark-submit --master local[4] \ |
4 |
Lines with a: 62, lines with b: 35 |
本文地址:《Spark Standalone模式应用程序开发》:http://www.iteblog.com/archives/1041,过往记忆,大量关于Hadoop、Spark等个人原创技术博客本博客文章除特别声明,所有都是原创!
尊重原创,转载请注明: 转载自过往记忆(http://www.iteblog.com/)
本文链接地址: 《Spark Standalone模式应用程序开发》(http://www.iteblog.com/archives/1041)
E-mail:wyphao.2007@163.com
- 在myeclipse中使用Java语言进行spark Standalone模式应用程序开发
一.环境配置 Myeclipse中虽然已经集成了maven插件,但是由于这个插件版本较低,建立maven project会出现错误. 解决办法:自己到官网http://maven.apache.org ...
- 【原】Spark Standalone模式
Spark Standalone模式 安装Spark Standalone集群 手动启动集群 集群创建脚本 提交应用到集群 创建Spark应用 资源调度及分配 监控与日志 与Hadoop共存 配置网络 ...
- 大数据学习day18----第三阶段spark01--------0.前言(分布式运算框架的核心思想,MR与Spark的比较,spark可以怎么运行,spark提交到spark集群的方式)1. spark(standalone模式)的安装 2. Spark各个角色的功能 3.SparkShell的使用,spark编程入门(wordcount案例)
0.前言 0.1 分布式运算框架的核心思想(此处以MR运行在yarn上为例) 提交job时,resourcemanager(图中写成了master)会根据数据的量以及工作的复杂度,解析工作量,从而 ...
- 关于spark standalone模式下的executor问题
1.spark standalone模式下,worker与executor是一一对应的. 2.如果想要多个worker,那么需要修改spark-env的SPARK_WORKER_INSTANCES为2 ...
- Spark Standalone模式HA环境搭建
Spark Standalone模式常见的HA部署方式有两种:基于文件系统的HA和基于ZK的HA 本篇只介绍基于ZK的HA环境搭建: $SPARK_HOME/conf/spark-env.sh 添加S ...
- Spark standalone模式的安装(spark-1.6.1-bin-hadoop2.6.tgz)(master、slave1和slave2)
前期博客 Spark运行模式概述 Spark standalone简介与运行wordcount(master.slave1和slave2) 开篇要明白 (1)spark-env.sh 是环境变量配 ...
- spark standalone模式单节点启动多个executor
以前为了在一台机器上启动多个executor都是通过instance多个worker来实现的,因为standalone模式默认在一台worker上启动一个executor,造成了很大的不便利,并且会造 ...
- [会装]Spark standalone 模式的安装
1. 简介 以standalone模式安装spark集群bin运行demo. 2.环境和介质准备 2.1 下载spark介质,根据现有hadoop的版本选择下载,我目前的环境中的hadoop版本是2. ...
- 50、Spark Streaming实时wordcount程序开发
一.java版本 package cn.spark.study.streaming; import java.util.Arrays; import org.apache.spark.SparkCon ...
随机推荐
- 玩转Web之JavaScript(一)-----javaScript语法总结(一) 与鼠标操作有关的语法
click() 对象.click() 使对象被点击. event.clientX 返回最后一次点击鼠标 X 坐标值: event.clientY 返回最后一次点击鼠标 Y 坐标值: event ...
- 摆弄【Nhibernate 协会制图--导乐陪伴分娩】
现有两个实体,Dog和 Master,映射到数据库表中如上图所看到的.一个Dog仅仅同意相应一个Master,但一个Master能够有多个Dog.我们在查询Dog的时候.往往还须要知道其主人Maste ...
- php方法综述除去换行符(PHP_EOL使用变量)
一个小包裹,事实上,不同的平台具有不同的实现.为什么要这样.它可以是一个世界是多样的. 最初unix与世界把它包/n取代,但windows为了体现自己的不同.要使用/r/n,更有意思的是,mac随着/ ...
- qml动画控制器AnimationController
AnimationController: 一般的动画是使用定时器来完毕的,可是AnimationController同意给定的动画,手动控制,能够通过控制她的progress属性来操作动画的进度. c ...
- C语言API编写窗口界面和button
近期有个同学的程序须要用对话框的方式实现,但前面都是通过黑框形式完毕的,老师突然让添加一个界面,本来准备採用MFC完毕的,但后来一想,该程序核心东西是体如今它的算法上,控制台的程序并不 ...
- android CheckBox RadioButton 照片和文字的间距问题
利用自身的定义CheckBox 要么RadioButton时间.定义自己的图标和文字在不同的手机显示不同的音高.有时不太好控制,下面是我自己的定义CheckBox: 在Layout在下面xml: &l ...
- debian 该分区的部分安装移动硬盘后无法识别。
有一个新的团购1T移动硬盘.购买格化学式ntfs经过几次简单的子区域. 4G硬盘PE.100G高速互动,盈800许多G分为两个相等的存储盘. 到您的计算机USB接口后,, 桌面弹出自己主动4一封信. ...
- Java静态字段(属性、方法、类别)
假设域被定义为static,那么每个类中仅仅有一个这种域.作为对照,每个对象对于全部的实例域却都有自己的一份拷贝. 比如,假定须要给每个雇员赋予唯一的标识码. 这里给Employee类加入一个实例域i ...
- 微设计(www.weidesigner.com)介绍系列文章(三)
微设计(www.weidesigner.com)是一个专门针对微信公众账号提供营销推广服务而打造的第三方平台. 3.1 优惠券 优惠券是用于微信上与顾客互动的一种营销方式,不仅能够展现自己的产品,更能 ...
- obj-c编程04:类的继承
这第4篇内容比較少,主要说的是obj-c中的类的继承,须要说明的是我仅仅是写了继承中最简单的形式,假设所有展开来说,那就多了去了!关键是如今肚子里还没装够墨水,没法展开啊! 以下的代码中,我们写了2个 ...