Spark是主流的大数据处理框架,具体有啥能耐,相信不需要多说。我们开门见山,直接动手写大数据界的HelloWorld:WordCount。

先上完整代码,看看咋样能入门。

  1. import org.apache.spark.SparkConf
  2. import org.apache.spark.SparkContext
  3. object WordCount {
  4. def main(args: Array[String]) {
  5. val conf = new SparkConf()
  6. conf.setAppName("WordCount")
  7. val sc = new SparkContext(conf)
  8. val file = "hdfs://127.0.0.1:9000/file.txt"
  9. val lines = sc.textFile(file)
  10. val words = lines.flatMap(_.split("\\s+"))
  11. val wordCount = words.countByValue()
  12. println(wordCount)
  13. }
  14. }

寥寥10多行代码,就已经完成了,比大家想象的要简单,完全看不出大数据背后的存储,分布式,容错处理,这就是Spark给我们带来的福利。

接下来我们逐步解析其中的核心概念。

Spark上下文

Spark集群的执行单位是Application,任何提交的任务都会产生一个Application。一个Application只会关联上一个Spark上下文,也就是SparkContext。构建SparkContext时可以传入Spark相关配置,也就是SparkConf,它可以用来指定Application的名称,任务需要的CPU核数/内存大小,调优需要的配置等等。

  1. val conf = new SparkConf()
  2. conf.setAppName("WordCount")
  3. val sc = new SparkContext(conf)

这三行语句创建了一个Spark上下文,并且运行时这个Application的名字就叫WordCount。

弹性分布式数据集RDD

Spark中最主要的编程概念就是弹性分布式数据集 (resilient distributed dataset,RDD),它是元素的集合,划分到集群的各个节点上,可以被并行操作。RDD的创建可以从HDFS(或者任意其他支持Hadoop文件系统) 上的一个文件开始,或者通过转换Master中已存在的Scala集合而来。

  1. val file = "hdfs://127.0.0.1:9000/file.txt"
  2. val lines = sc.textFile(file)

这两行语句从hdfs文件中创建了叫lines的RDD,它的每个元素就对应文件中的每一行,有了RDD我们就可以通过它提供的各种API来完成需要的业务功能。

RDD提供的API分为两类:转换(Transformation)和动作(Action)。

转换

顾名思义,转换就是把一个RDD转换成另一个RDD。当然,光是拷贝产生一个新的RDD是没有太大意义的,这里的转换实际上是RDD中元素的映射和转换。有一点必须要注意的是,RDD是只读的,一旦执行转换,一定会生成一个新的RDD。

  1. val words = lines.flatMap(_.split("\\s+"))

flatMap是RDD众多转换中的一种,它的功能是把源RDD中的元素映射成目的RDD中的0个或者多个元素。上面语句把以文本行为元素的RDD转换成了以单个单词为元素的RDD。

动作

“动作”就不好望文生义了,可以简单地理解成想要获得结果时调用的API。

  1. val wordCount = words.countByValue()

countByValue就是一个“动作”,它的功能是统计RDD中每个元素出现的次数,最终得到一个元素及其出现次数的Map。

那究竟哪些API是转换,哪些是动作呢?有个很简单的判断准则:

提示:返回结果为RDD的API是转换,返回结果不为RDD的API是动作。

运行

要运行Spark任务,首先要把代码打成JAR包,额。。。这个不需要多言。

打包后,就只需在Spark集群上以命令行的方式用spark-submit提交就OK。

  1. spark-submit --class "demo.WordCount" SparkDemo-1.0-SNAPSHOT.jar

其中demo.WordCount是main函数所在的ojbect,而SparkDemo-1.0-SNAPSHOT.jar就是打出来的jar包。

大数据处理,就这样入门了。

下一篇文章我们将来探讨WordCount是如何在集群中运行的,Spark究竟隐藏了些什么魔法。

推荐

动手写Count

从WordCount看Spark大数据处理的核心机制(1)

从WordCount看Spark大数据处理的核心机制(2)

RDD粗粒度转换的威力

查看《Spark大数据处理》系列文章,请进入YoyaProgrammer公众号,点击 核心技术,点击 Spark大数据处理。

分类 Spark大数据处理

优雅程序员 原创 转载请注明出处

Spark大数据处理 之 动手写WordCount的更多相关文章

  1. Spark大数据处理 之 从WordCount看Spark大数据处理的核心机制(1)

    大数据处理肯定是分布式的了,那就面临着几个核心问题:可扩展性,负载均衡,容错处理.Spark是如何处理这些问题的呢?接着上一篇的"动手写WordCount",今天要做的就是透过这个 ...

  2. Spark大数据处理 之 从WordCount看Spark大数据处理的核心机制(2)

    在上一篇文章中,我们讲了Spark大数据处理的可扩展性和负载均衡,今天要讲的是更为重点的容错处理,这涉及到Spark的应用场景和RDD的设计来源. Spark的应用场景 Spark主要针对两种场景: ...

  3. Spark大数据处理 之 RDD粗粒度转换的威力

    在从WordCount看Spark大数据处理的核心机制(2)中我们看到Spark为了支持迭代和交互式数据挖掘,而明确提出了内存中可重用的数据集RDD.RDD的只读特性,再加上粗粒度转换操作形成的Lin ...

  4. 《Spark大数据处理:技术、应用与性能优化 》

    基本信息 作者: 高彦杰 丛书名:大数据技术丛书 出版社:机械工业出版社 ISBN:9787111483861 上架时间:2014-11-5 出版日期:2014 年11月 开本:16开 页码:255 ...

  5. 《Spark大数据处理:技术、应用与性能优化》【PDF】 下载

    内容简介 <Spark大数据处理:技术.应用与性能优化>根据最新技术版本,系统.全面.详细讲解Spark的各项功能使用.原理机制.技术细节.应用方法.性能优化,以及BDAS生态系统的相关技 ...

  6. 《Spark大数据处理:技术、应用与性能优化》【PDF】

    内容简介 <Spark大数据处理:技术.应用与性能优化>根据最新技术版本,系统.全面.详细讲解Spark的各项功能使用.原理机制.技术细节.应用方法.性能优化,以及BDAS生态系统的相关技 ...

  7. Spark大数据处理技术

    全球首部全面介绍Spark及Spark生态圈相关技术的技术书籍 俯览未来大局,不失精细剖析,呈现一个现代大数据框架的架构原理和实现细节 透彻讲解Spark原理和架构,以及部署模式.调度框架.存储管理及 ...

  8. Spark大数据处理框架入门(单机版)

    导读 引言 环境准备 安装步骤 1.下载地址 2.开始下载 3.解压spark 4.配置环境变量 5.配置 spark-env.sh 6.启动spark服务 7.测试spark stay hungry ...

  9. ceph hadoop spark 大数据处理

    http://docs.ceph.com/docs/giant/cephfs/hadoop/ https://indico.cern.ch/event/524549/contributions/218 ...

随机推荐

  1. Oracle 高可用作业测试

    1.RAC 是一种: A 分布式数据库B 内存共享多节点数据库C 能够保护数据安全的架构 2.RAC 和CRS 的区别是: A 前者表示一种架构,后者是一套软件B 前者表示一套软件,后者是一种架构 C ...

  2. appium_python 怎样实现参数化自动生成用例

    1.对于一种对同一个页面同一点 要用不同数据测试形成多条测试用例,如果复制的话 会让代码很冗长,并且并不好维护,现在用封装的方法把 不变的代码 和 变化的参数 分别封装,形成动态 生成测试用例 ,主要 ...

  3. 2016.1.1 VS中宏的使用技巧点滴

    Dim selection As TextSelection = DTE.ActiveDocument.Selection'定义 TextSelection 对象 selection.StartOfL ...

  4. paramiko分开执行多条命令 不像之前一样使用\n

    #!/usr/bin/env python#-*- encoding -*- import paramiko transport = paramiko.Transport(('192.168.11.1 ...

  5. jdbcTemplate学习(二)

    前面讲了增加.删除.更新操作,这节讲一下查询. 查询操作: (一)查询一个值(不需要注入参数) queryForObject(String sql, Class<T> requiredTy ...

  6. 问题:web.net页面超时;结果:设置ASP.NET页面的运行超时时间详细到单个页面及站点

    设置ASP.NET页面的运行超时时间详细到单个页面及站点 这篇文章主要介绍了如何设置ASP.NET页面的运行超时时间,包括全局超时时间.单个站点超时时间.单个页面请求超时时间,需要的朋友可以参考下 全 ...

  7. VS2015 MSVC编译FFMPEG

    1.下载安装msys2 http://www.msys2.org/下载msys2 下载安装完成后,在msys2的shell中安装编译FFMPEG必要的命令行工具 pacman -S make gcc ...

  8. DAY15-HTTP协议简述

    HTTP协议 一.HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网 ...

  9. 使用LaTeX按IEEE模板写论文时的参考文献管理方法(BibTeX使用小结)

    之前用LaTeX写论文时,参考文献都是手动添加管理的,真是让人很抓狂.所以这次趁着假期,简单看了一下怎么使用BibTeX对参考文献进行管理,这里以IEEE的最新模板为例. 首先说明,我之前用的是MiK ...

  10. oracle --(四)表空间(tablespace)

    基本关系:数据库---表空间---数据段---分区---数据块 表空间(tablespace)表空间(tablespace)是包含物理数据文件的逻辑实体,存放数据库的所有可用数据,因此表空间的尺寸也是 ...