新手入门:Spark部署实战入门

Spark简介

整体认识

Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。 Spark在整个大数据系统中处于中间偏上层的地位,如下图,对hadoop起到了补充作用:

基本概念

Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。

第一步分割任务。首先我们需要有一个fork类来把大任务分割成子任务,有可能子任务还是很大,所以还需要不停的分割,直到分割出的子任务足够小。

第二步执行任务并合并结果。分割的子任务分别放在双端队列里,然后几个启动线程分别从双端队列里获取任务执行。子任务执行完的结果都统一放在一个队列里,启动一个线程从队列里拿数据,然后合并这些数据。

具体可参考Fork/Join

核心概念

RDD(Resilient Distributed Dataset) 弹性分布数据集介绍 弹性分布式数据集(基于Matei的研究论文)或RDD是Spark框架中的核心概念。

可以将RDD视作数据库中的一张表。其中可以保存任何类型的数据。Spark将数据存储在不同分区上的RDD之中。 RDD可以帮助重新安排计算并优化数据处理过程。

此外,它还具有容错性,因为RDD知道如何重新创建和重新计算数据集。

RDD是不可变的。你可以用变换(Transformation)修改RDD,但是这个变换所返回的是一个全新的RDD,而原有的RDD仍然保持不变。

RDD支持两种类型的操作: o 变换(Transformation) o 行动(Action) 变换:变换的返回值是一个新的RDD集合,而不是单个值。调用一个变换方法,不会有任何求值计算,它只获取一个RDD作为参数,然后返回一个新的RDD。变换函数包括:map,filter,flatMap,groupByKey,reduceByKey,aggregateByKey,pipe和coalesce。

行动:行动操作计算并返回一个新的值。当在一个RDD对象上调用行动函数时,会在这一时刻计算全部的数据处理查询并返回结果值。

行动操作包括:reduce,collect,count,first,take,countByKey以及foreach。 共享变量(Shared varialbes) o 广播变量(Broadcast variables) o 累加器(Accumulators) Master/Worker/Driver/Executor

o Master:

1. 接受Worker的注册请求,统筹记录所有Worker的CPU、Memory等资源,并跟踪Worker结点的活动状态;2. 接受Driver中App的注册请求(这个请求由Driver端的Client发出),为App在Worker上分配CPU、Memory资源,生成后台Executor进程;之后跟踪Executor和App的活动状态。 o Worker:负责接收Master的指示,为App创建Executor进程。Worker在Master和Executor之间起着桥梁作用,实际不会参与计算工作。 o Driver:负责用户侧逻辑处理。 o Executor:负责计算,接受并执行由App划分的Task任务,并将结果缓存在本地内存或磁盘。

Spark部署

关于Spark的部署网上相关资料很多,这里进行归纳整理 部署环境 Ubuntu 14.04LTS Hadoop:2.7.0 Java JDK 1.8 Spark 1.6.1 Scala 2.11.8

Hadoop安装

由于Spark会利用HDFS和YARN,所以需要提前配置Hadoop,配置教程可以参考: Setting up a Apache Hadoop 2.7 single node on Ubuntu 14.04 Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

Spark安装

在安装好Hadoop的基础上,搭建Spark,配置教程参考:

Spark快速入门指南 – Spark安装与基础使用

scala安装

Scala作为编写Spark的源生语言,更新速度和支持情况肯定是最好的,而另一方面Scala本身语言中对于面向对象和函数式编程两种思想的糅合,使得该语言具有很多炫酷的语法糖,所以在使用Spark的过程中我采用了Scala语言进行开发。

Scala最终编译成字节码需要运行在JVM中,所以需要依托于jdk,需要部署jdk Eclipse作为一款开发Java的IDE神器,在Scala中当然也可以使用,有两种方式: o Eclipse->Help->Install New Software安装Scala Plugins o 下载官网已经提供的集成好的Scala IDE 基于以上两步已经可以进行Scala开发,需要用到Scala自带的SBT编译的同学可以装下Scala官网下载地址,本人一直使用Maven进行包管理就延续Maven的使用

简单示例:WordCount(Spark Scala) 开发IDE:Eclipse Scala 包管理:Maven 开发语言:Scala

创建Maven项目

  1. 跳过archetype项目模板的选择
  2. 下载模板pom.xml
  3. 对maven项目添加Scala属性: Right click on project -> configure - > Add Scala Nature.
  4. 调整下Scala编译器的版本,与Spark版本对应: Right click on project- > Go to properties -> Scala compiler -> update Scala installation version to 2.10.5
  5. 从Build Path中移除Scala Library(由于在Maven中添加了Spark Core的依赖项,而Spark是依赖于Scala的,Scala的jar包已经存在于Maven Dependency中): Right click on the project -> Build path -> Configure build path and remove Scala Library Container.
  6. 添加package包com.spark.sample

  1. 创建Object WordCount和SimpleCount,用来作为Spark的两个简单示例 Spark Sample SimpleCount.scala

package com.spark.sample

import org.apache.spark.SparkConf import org.apache.spark.SparkContext

object SimpleCount { def main(args: Array[String]) { val conf = new SparkConf().setAppName("TrySparkStreaming").setMaster("local[2]") // Create spark context val sc = new SparkContext(conf) // val ssc = new StreamingContext(conf, Seconds(1)) // create streaming context

    val txtFile = "test"
    val txtData = sc.textFile(txtFile)
    txtData.cache()

    txtData.count()
    val wcData = txtData.flatMap { line => line.split(",") }.map { word => (word, 1) }.reduceByKey(_ + _)
    wcData.collect().foreach(println)

    sc.stop
}

}

WordCount.scala

package com.spark.sample import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD.rddToPairRDDFunctions object WordCount { def main(args: Array[String]) = {

    //Start the Spark context
    val conf = new SparkConf()
        .setAppName("WordCount")
        .setMaster("local")
    val sc = new SparkContext(conf)

    //Read some example file to a test RDD
    val test = sc.textFile("input.txt")

    test.flatMap { line => //for each line
        line.split(" ") //split the line in word by word.
    }.map { word => //for each word
        (word, 1) //Return a key/value tuple, with the word as key and 1 as value
    }.reduceByKey(_ + _) //Sum all of the value with same key
        .saveAsTextFile("output.txt") //Save to a text file

    //Stop the Spark context
    sc.stop}

}

原理如下图:

 参考文献:

  1. http://km.oa.com/group/2430/articles/show/181711?kmref=search&from_page=1&no=1&is_from_iso=1
  2. http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds
  3. http://www.infoq.com/cn/articles/apache-spark-introduction?utm_source=infoq_en&utm_medium=link_on_en_item&utm_campaign=item_in_other_langs
  4. http://www.infoq.com/cn/articles/apache-spark-sql
  5. http://www.infoq.com/cn/articles/apache-spark-streaming
  6. http://www.devinline.com/2016/01/apache-spark-setup-in-eclipse-scala-ide.html
  7. https://databricks.gitbooks.io/databricks-spark-reference-applications/content/
  8. http://wuchong.me/blog/2015/04/06/spark-on-hbase-new-api/
  9. http://colobu.com/2015/01/05/kafka-spark-streaming-integration-summary/
  10. http://www.devinline.com/2016/01/apache-spark-setup-in-eclipse-scala-ide.html

作者:张景龙 畅移(上海)信息科技有限公司CTO,CCFYOCSEF上海委员,京东今夜酒店特价APP技术奠基人和首任CTO,中国第一代智能手机开发者。

时间: 2024-09-30 15:24:12

新手入门:Spark部署实战入门的相关文章

Spark从入门到上手实战

Spark从入门到上手实战 课程学习地址:http://www.xuetuwuyou.com/course/186 课程出自学途无忧网:http://www.xuetuwuyou.com 讲师:轩宇老师 课程简介: Spark属于新起的基于内存处理海量数据的框架,由于其快速被众公司所青睐.Spark 生态栈框架,非常的强大,可以对数据进行批处理.流式处理.SQL 交互式处理及机器学习和Graphx 图像计算.目前绝大数公司都使用,主要在于 Spark SQL 结构化数据的处理,非常的快速,高性能

Spark视频教程|Spark从入门到上手实战

Spark从入门到上手实战网盘地址:https://pan.baidu.com/s/1uLUPAwsw8y7Ha1qWGjNx7A 密码:m8l2备用地址(腾讯微云):https://share.weiyun.com/55RRnmc 密码:8qywnp 课程是2017年录制,还比较新,还是有学习的价值的 课程简介:Spark属于新起的基于内存处理海量数据的框架,由于其快速被众公司所青睐.Spark 生态栈框架,非常的强大,可以对数据进行批处理.流式处理.SQL 交互式处理及机器学习和Graphx

2019刘老师教你用springboot2.x开发整合微信支付的线上教育平台带源码送springboot2.x零基础入门到高级实战教程

第一部分:springboot2.x零基础入门到高级实战教程一.零基础快速入门SpringBoot2.0 1.SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 3.快速创建SpringBoot2.x应用之手工创建web应用 简介:使用Maven手工创建SpringBoot2.x应用 4

Spring Boot 2.x 实战入门

"老齐的IT脱口秀,说人话,讲编程." 国内一线培训机构的金牌讲师齐毅诚意录制,没有忽悠,案例实战.<Spring Boot 2.x 实战入门>,老齐会把15年经验揉到实战手把手陪你学习.只要你需要,所有PPT和源码都给你,一切都是为了让你学的更轻松.希望老齐能成为你进入IT行业的引路人!课程完全免费,没有套路,也不会骗你去培训机构,只是一个老司机希望能让你少走点弯路!!课程地址: http://edu.51cto.com/course/13147.html 课程章节:第1

[公益课程]Spring Boot 2.x 实战入门

[公益内容]Spring Boot 2.x 实战入门课程内容 http://edu.51cto.com/course/13147.html 第1章Spring Boot 2.X快速入门45分钟1节 1-1Spring Boot 2.x 快速上手[免费观看]45:51第2章Spring Boot 常用配置1小时44分钟3节 2-1Spring Boot Web常用配置[免费观看]33:15 2-2日志配置[免费观看]28:59 2-3环境切换与自定义配置[免费观看]41:59第3章Thymelea

微服务SpringCloud+Docker入门到高级实战

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构简介:讲解单机应用和分布式应用架构演进基础知识 (画图)2.微服务核心基础讲解简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断3.常见的微服务框架简介:讲解常用的微服务框架4.微服务下

新手Oracle安装及使用入门

新手Oracle安装及使用入门 一.安装Oracle Step1 下载oracle压缩包并解压到同一文件夹下面 Step2 双击setup.exe进行安装 Step3:进入如下界面配置: 邮箱可不填,去掉更新 除了设置密码,其他均可默认安装! 可自行选择安装路径,确保该安装盘有4G以上内存可使用就行. 若检测有问题就选择“全部忽略” 完成之后接着进行数据库创建(wait for long~~): 可按照以上在浏览器输入该url进行登录并管理服务端,登录成功见如下界面(此步骤也可以跳过不操作):

跟风舞烟学大数据可视化-Echarts从入门到上手实战

跟风舞烟学大数据可视化-Echarts从入门到上手实战 课程观看地址:http://www.xuetuwuyou.com/course/180 课程出自学途无忧网:http://www.xuetuwuyou.com 课程讲师:风舞烟 课时数:三个模块,共70课时   一.课程特色: 1.最全的Echarts课程讲解     70学时课时量,360度全方位,无死角的课程设计,让你通透Echarts可视化技术 2.最适合小白学员学习的课程,没有之一     只要你了解一点基本的Html,CSS,Ja

Systemd 入门教程:实战篇

Systemd 入门教程:实战篇 上一篇文章,介绍了 Systemd 的主要命令,这篇文章主要介绍如何使用 Systemd 来管理我们的服务,以及各项的含义: 一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件,如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例). $ sudo systemctl enable httpd 上面的命令相当于在/etc/systemd/system目