【Spark研究】如何用 Spark 快速开发应用?
如果你还没有仔细研究过 Spark (或者还不知道 Spark 是什么),那么本文很好地介绍了 Spark。描述了基本的数据结构、shell ,并对其包含的 API 进行了概述。
你已经知道的Hadoop是部署大规模大数据应用的最好的,并兼具高成本效益的平台之一。但当Hadoop与Apache Spark提供的执行力相结合的时候会更加强大。虽然Spark可在许多大数据平台上使用,但将其部署在有效的Hadoop平台上会更好,你可以使用已知工具快速构建大型应用。
什么是Apache Spark?
Apache Spark是处理大量数据的通用引擎。它是设计用来允许开发者快速部署大数据应用的。Spark的特点是它的弹性分布式数据集(RDDs)。数据结构既可以存在内存中也可以在磁盘上。将对象保存于内存中将带来可观的性能提升,因为应用程序无需将时间浪费在从磁盘中获取数据。
如果你有大的集群,你的数据可能传遍数百个甚至上千个节点。Apache Spark不仅快而且可靠。Spark的设计具有容错性,它能够从诸如节点或进程错误所导致的数据损失中恢复。
你可以在任何文件系统中使用Apache Spark,但是通过Hadoop,你将得到一个可靠的,分布式的文件系统,作为你的大数据应用的基础。
大数据应用程序开发的效率的另一个主要来源是人的因素。开发工具使得工作比它的现状更加复杂,但Apache Spark跳出了程序员的方式。在使用Apache Spark快速地应用开发中有两个关键:shell 和 API。
Shell
脚本语言的最大好处之一是它们的互动式 shell。利用各种方式回到早起的 Unix 时代,shell 使得你快速地尝试你的想法而不会被写/测试/编译/调试的循环放缓速度。
有想法?现在你就可以试试并且看看发生了什么。想法很简单,就是使你在本地机器上更有效率。当你使用大数据集群后,静观其变吧。
Spark提供了Scala或者Python的Shell。你可以选择任意一个你所习惯的 shell。类似Unix的系统中,你可以在Spark的目录 ./bin/pyspark下找到Python的shell,在./bin/sparkshell下找到Scala的shell。
一旦你找到了shell并且运行起来,你就可以将数据导入RDDs并且对这些数据执行所有类型的操作,例如统计行数或者找到列表中的第一个项目。操作分为两种:一种是转换,它在一个集合中创建新的列表;另一种是动作,它返回值。你也可以写自定义函数并将它们应用到你的数据。这些是为你创建RDD对象的Python方法。
例如,向Spark导入一个文本文件作为在Python的shell中的RDD,如下:
textfile = sc.textFile(“hello.txt”)
这是一个统计行数的动作:
textfile.count():
这是一个返回含有“MapR”行的列表转换:
textFile.filter(lambda line: "MapR" in line)
参照“Spark开发指南”可得到更多的信息。
API
尽管Spark本身是用Scala写的,但你可以用一些API使得你的工作容易些。如果你用过Python或者Scala的shells,那么你就已经在用这些语言的API了。你需要做的就是将你的程序保存为脚本而仅需很少的修改。
如果你在寻找构建更加健壮的程序,你可以使用Java API。即使你已经用Java完全实现了你的程序,你仍然可以在shell中勾画出的你的想法以确保在将其部署到你的集群之前你的算法是正确的。
Spark发行了一些库:Spark SQL,Spark Streaming(建立在Spark上的实时计算框架),the MLlib machine learning library(机器学习库)和GraphX。
你可以通过使用一些易用的API来构建复杂的应用并且实时部署它们。你甚至可以以混合和匹配技术来构建应用程序或者大数据管道,例如从机器学习的结果生成图的应用。由 Hadoop平台支持的 Apache Spark 提供了强大和灵活性。
通过完全支持Spark栈的MapR分布,对程序员很容易地实时创建一个复杂的大数据应用是可能的,就像批处理数据……
总结
世界变化快。你的业务所积累的数据也在不断增长,你需要一种方法来快速倒腾数据。当你能够构建大数据集群并尝试去筛选数据时,你需要正确的工具–设计用来快速处理大量数据的工具。
而运行在Hadoop上的Spark可以做到这点,它的最大优势在于提高开发人员的生产力上。通过使用Spark上的Scala和Python,在更短的时间里你可以做更多的事。你和你的开发人员可以畅游在你们的大数据思想中。
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsE...
- 简陋的swift carthage copy-frameworks 辅助脚本
- 【自问自答】关于 Swift 的几个疑问
- 高级PHP应用程序漏洞审核技术【一】
- 【读书笔记】The Swift Programming Language (Swift 4.0.3)
- Ubuntu 下mysql常用操作
- JDK1.8源码(五)——java.util.ArrayList 类
- 代码审计入门总结
- ubuntu mysql启动|停止|重启
- JDK1.8源码(四)——java.util.Arrays 类
- JDK1.8源码(三)——java.lang.String 类
- JDK1.8源码(二)——java.lang.Integer 类
- Java关键字——instanceof
- 【强势推荐】一款可扫描CVE的工具
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- centos7 设置grub密码及单用户登录实例代码
- php面向对象基础详解【星际争霸游戏案例】
- Linux系统下Nginx支持ipv6配置的办法
- Smarty模板变量与调节器实例详解
- Linux中搭建完整的samba服务器全攻略(centos版)
- Thinkphp5 自定义上传文件名的实现方法
- PHP读取文件,解决中文乱码UTF-8的方法分析
- Linux低电量自动关机的实现办法
- php设计模式之工厂方法模式分析【星际争霸游戏案例】
- PHP+Apache实现二级域名之间共享cookie的方法
- linux虚拟机配置静态IP地址的完整步骤
- laravel-admin利用ModelTree实现对分类信息的管理
- Linux系统下快速配置HugePages的完整步骤
- Laravel5.1 框架关联模型之后操作实例分析
- PHP实现的多进程控制demo示例