2016.07.14

1-Spark实战演练:Spark概述及生态环境

2.Spark实战演练:Spark vs Hadoop MapReduce

 

 

任意一条边有方向且不存在环路的图,一次执行所有这些图的任务节点,而不需要一个个按照顺序来进行,这个方案避免了mapreduce中麻烦的同步问题,应用程序构建简单。

创新:1支持跨DAG的内存数据分享,不同任务处理相同的数据

2支持循环数据流,很好处理迭代图算法、机器学习和流处理,如社交网络分析

引人注目:1内存使用,MR需要处理磁盘的数据,而spark可充分利用分散在集群中所有节点的大量RAM

2智能利用池磁盘,解决预存数据和持久性问题,RDD可以cache到内存当中,结果也存到内存,下次操作直接从内存中读取,机器学习算法大量迭代效率的提示大

使用scala语言,使用大量函数式编程的思想,提供丰富RDD操作API

 

3-Spark实战演练:在单机上安装和运行Spark

  1. 解压缩

  1. 环境变量
    1. Vim(需要熟悉操作)

      2.Java

      添加如下安装目录内容

    启动时才加载,强制加载(source)

    验证

     

    3.scala

     

    运算一下

     

    4.spark

    Spark内部已集成了简单的应用

    计算pi测试一下参数是参加了多少次迭代的计算

    安装Python模块

    Numpy数学库

    测试

     

4-在Sdandalone和YARN上部署Spark集群

 

分别在集群的每台机器安装spark,再启动相应master和slave

使用spark客户端向yarn提交任务运行。部署方式:1.将spark部署包放到yarn集群某个节点上面2.yarn客户端读取yarn集群配置文件,在此过程中,spark的master和slave节点不需要启动

Yarn(淘宝团队)mesos(豆瓣)

 

IP180为master,4个slave

1.4台部署好hdfs

检测

检查所有机器(hadoop,spark)

检查环境变量

Spark配置文件

编辑slaves

填ip

检查其他机器

配置spark-env.sh

 

启动

Master

Slave

启动所有

 

停止

运行

本机

集群运行

参数值:

Spark on Yarn部署

  1. Hadoop、spark部署完成

2.

测试一下

./spark-submit --class (提交类名)org.apche.spark.examples.SparkPi --master(提交方式) yarn-cluster ../lib/spark-examples*.jar

只需在配置文件填写一行配置,不需要自己管理 master和slave关系,原因yarn作为资源调度框架已经帮我们做好了这些,只需调用yarn-cluster,指定example

主要关心这个日志信息

再提交一次对比

说明yarn帮我们管理真正输出的机器节点

也可用命令行查看结果

输出结果为

PS:额外example

对比localPI和sparkPi

 

5-Spark实战演练:使用Spark Shell

关掉日志

3个日志等级WARN、ERROR、INFO

设置成WARN可将log日志去掉

重新启动加载

使用map

根据空格进行分割,147行的文章

使用reduce

当两两归并,单词比较多的选出来。结果为文章中最长的一行有65个单词。

调用Java类库

WordCount

map(word=>(word,1)),只要Word出现就map为1

下划线_是scala匿名参数的形式

WordCount

 

Cache强制加入内存,不需要计算前面的filter。

Cache将初步计算的结果强制存储在内存中

 

6-Scala语言介绍

安装JDK和Scala

Scala新特性

1.打印整数,字符串

2.常量和变量

变量重复定义(不建议)

3.布尔值

4. 函数

5.map

6.Flatmap

7.匿名参数

将list里面的值加10

Map遍历list所有元素中_下划线代表匿名参数为遍历的每个元素

8.foreach

9.数组

10.set集合

用于去重

11.hashMap

Key->value

类型转换

12元组tuple

scala> val a =(1,2)

a: (Int, Int) = (1,2)

 

scala> val b=(a,2,"three")

b: ((Int, Int), Int, String) = ((1,2),2,three)

使用元组特性除法获得商和余数

13复杂的情况

14类似RDDapi操作

匿名参数_,大于10的操作

 

15使用java类库

1和9比较,然后1和49再比较

16for循环

17While与do while

18If

19字符串操作


20类操作

class Point(xc:Int,yc:Int)

{

    var x:Int=xc

    var y:Int=yc

    def move(dx: Int,dy: Int)

    {

        x = x + dx

        y = y + dy

    }

    override def toString():String = "(" + x+"," +y +")";

}

 

object MovePoint{

    def main(args:Array[String])

    {

        var p = new Point(2,3)

        p.move(3,5)

        println(p.toString)

    }

}

7-使用Python编写Spark程序

8-创建SparkContext

所用RDD操作都是基于SparkContext,比如从cluster中读取数据,使用sparkShell时,系统会自动创建SparkContext,并命名为sc。

自己编写时,创建SparkContext

appName相当于应用名称将在webUi监控中显示,方便查找任务

master用于指定连接的spark、yarn、messos集群中的URL字符串

9-RDD简介

弹性分布数据集


通过调用SparkContext的parallelize方法,在已经存在的scala集合集合的对象会被拷贝出来创建一个可以被并行处理的分布式数据集distData。distData.reduce((a,b)=>a+b),对数据集求和。

并行集合重要的参数:

slize的数目=数据集切分的份数 ,spark在集群上为每一个份数起一个任务,集群的每个CPU分配2-3个slize(spark会根据集群的状况设置slize的数目,也可以设置parallelize的第二个参数手动设置 )

最重要功能:

不同的工作间持久化数据集到内存中,持久化一个RDD,每个节点都将把它的计算结果保存到内存当中,并对此数据集后续计算中重用(对后续的工作变得高效,缓存spark迭代算法的关键)。可以用prist或cache持久化一个RDD,如果被一个动作触发计算,将会被保存到计算节点的内存中,并被重用,cache有容错机制,如果RDD任意的分区丢失,通过使用原先的转换transformation操作,自动重算丢失部分,不需要全部重算;每个RDD都可以使用不同的保存级别进行保存,除了在硬盘上进行数据集的持久化,或者在内存中序列化Java对象或者跨节点复制,这些等级选择是同过StorageLevel对象传递给prist方法确定,cache使用默认存储级别,只使用内存的存储方法,StorageLevel的MEMORY_ONLY方法

实践

指定master

val lines =sc.textFile("/spark/data/Spark-QuickStart")



val lineLength =lines.map(s => s.length)

val totalLength = lineLength.reduce((a,b) => a+b)

Spark惰性功能,对于action操作才会从第一步开始进行运算

persist操作

wordCount

scala> val words =lines.flatMap(x=>x.split(" ")).map(w => (w,1)).reduceByKey((a,b) => a+b)

words: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[503] at reduceByKey at <console>:33

scala> words.filter(_._1 == "Scala").collect

res26: Array[(String, Int)] = Array((Scala,8))

 

scala>val words_count =lines.flatMap(x=>x.split(" ")).map(w => (w,1)).reduceByKey((a,b) => a+b)

 

scala>val words_count1 =lines.flatMap(x=>x.split(" ")).map(w => (w,1)).countByKey()

scala>words_count1("Scala")

res27: Long = 8

10-RDD操作——Transformation

Transformation都是采用惰性策略,任务提交后只是记录下对数据集进行何种Transformation操作,也就是一个工作流程,只有后续Actions时才触发,对一个很大数据集进行map操作,再进行reduce操作,只需要将reduce操作后的结果返回spark驱动程序,而不包括map中间结果。

持久化包括内存,硬盘和跨多个节点的存储

 

 

Map需要做很重的初始化和结束操作(连接数据库和关闭连接),这些操作都是对每个元素进行的,mapPartition是更好的选择,可对每个partition进行一次操作。










11-RDD操作——Action

12-RDD操作——共享变量

13-Spark SQL介绍

14-Spark SQL——Running SQL on RDDs

15-Spark SQL——Using Parquet & JSON

16-Spark SQL——Hive支持

17-Spark MLlibs介绍

18-LinearRegression

数据目录spark-1.6.2\data\mllib\ridge-data\lpsa.data

Vetor分稀疏的和普通的

稀疏矩阵,在SparseVector里面绝大多部分的数值为0,对于那些多余的0我们不需要存储,有坐标和坐标对应的值数组组成,SparseVecto实现上只保存非0的数值,没保存就是默认为0。

可以看成double的数组

导包

 

import
org.apache.spark.mllib.regression.LabeledPoint

import
org.apache.spark.mllib.regression.LinearRegressionModel

import
org.apache.spark.mllib.regression.LinearRegressionWithSGD

import
org.apache.spark.mllib.linalg.Vectors

 

// Load and parse the data

val data = sc.textFile("data/mllib/ridge-data/lpsa.data")

val parsedData = data.map { line =>

val parts = line.split(',')//将数据每一行以,逗号切分

LabeledPoint(parts(0).toDouble,
Vectors.dense(parts(1).split(' ').map(_.toDouble)))//
第1个参数parts)以空格进行分割,将array里面的数据转换成Double。

}.cache()

 


用model对trainingdata进行预测

 


 

真正的方差还需要开方

总结:方差比较大,model失真度比较大。原因:1.数据量比较小。2.数据不是很符合线性的模型,很难train出合适的模型

 

19-K-Means

20-Collaborative Filtering

Spark(开课吧笔记)的更多相关文章

  1. Spark 基本函数学习笔记一

      Spark 基本函数学习笔记一¶ spark的函数主要分两类,Transformations和Actions. Transformations为一些数据转换类函数,actions为一些行动类函数: ...

  2. Spark源代码阅读笔记之DiskStore

    Spark源代码阅读笔记之DiskStore BlockManager底层通过BlockStore来对数据进行实际的存储.BlockStore是一个抽象类,有三种实现:DiskStore(磁盘级别的持 ...

  3. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述

    首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发. 首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户 ...

  4. Spark任务流程笔记

    Spark学习笔记总结 02. Spark任务流程 1. RDD的依赖关系 RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide de ...

  5. spark发行版笔记11

    本期概览: ReceiverTracker架构设计 消息循环系统 ReceiverTracker具体的实现 Spark Streaming作为Spark Core基础 架构之上的一个应用程序,其中的R ...

  6. spark发行版笔记10

    感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 数据接收全生命周期的思考 大数据处理框架中,最重要的就是性能,性能是排在前面的.其次再考虑其他的.因为数 ...

  7. spark发行版笔记9

    感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 1 Receiver生命全周期 首先,我们找到数据来源的入口,入口如下 Receiver的设计是极其巧妙 ...

  8. spark发行版笔记13

    本期概览: ReceiverTracker架构设计 消息循环系统 ReceiverTracker具体的实现 Spark Streaming作为Spark Core基础 架构之上的一个应用程序,其中的R ...

  9. spark发行版笔记4Spark Streaming事务处理彻底掌握

    Spark Streaming事务处理彻底掌握 感谢DT大数据梦工厂支持提供以下内容,DT大数据梦工厂专注于Spark发行版定制. 内容概括: 1Exactly once 2 输出不重复 1 正如银行 ...

随机推荐

  1. 一次开放接口从需求分析到发布sdk线上包

    新年开场篇,欢迎来点赞:本篇和大家分享的是使用webapi做得接口服务验证框架,需求来源是我打算把上篇提到的图片验证码做成一种服务提供给大家,尽管我在上篇已经把代码打包开源了,但是如果有一种快速对接成 ...

  2. 关于j2ee工程发布到was上后,部分更新,例修改web.xml配置文件不起作用的原因解析【转】

    在WAS中,应用的配置是从config/cells....目录下读取:而资源从/installedApps目录下读取 故当配置文件(例web.xml)发生改变时,只更新应用程序资源文件/install ...

  3. 原生JS获取HTML样式并修改

    大家都知道在JavaScript原生操作中获取元素的样式,在实际操作是使用时比较频繁的一件事,这里像大家介绍下获取css样式的方法,希望可以帮助一些需要的人,如果有幸被大牛看到,有更好的办法,欢迎提出 ...

  4. linux gdb基本概念

    GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上.它同时也是Linux系统中的默认调试器.GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.一般来说,G ...

  5. angular 输入框实现自定义验证

    此插件使用angular.js.JQuery实现.(jQuery的引入需在angular 之前) 用户可以 在输入框输入数据后验证 必填项.整数型.浮点型验证. 如果在form 里面的输入框验证,可以 ...

  6. JAVA集合一之集合简介(Collection,List,Set)

    在编写JAVA程序中,我们经常会遇到需要保存一组数据对象,此时,我们可以采用对象数组来进行多个对象的保存,但对象数组存在一个最大的问题即在于长度上的限制,如果说我们现在要保存一组对象,但是我们并知道数 ...

  7. 在SQL Server里如何处理死锁

    在今天的文章里,我想谈下SQL Server里如何处理死锁.当2个查询彼此等待时会发生死锁,没有一个查询可以继续它们的操作.首先我想给你大致讲下SQL Server如何处理死锁.最后我会展示下SQL ...

  8. kafka c++客户端编译

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据通常是 ...

  9. SerfJ REST

    SerfJ提供了一个MVC架构,但它不包含任何模型,其主要特点是使用控制器collerlor,通过这些collerlor管理REST请求.可帮助你开发优雅的MVC架构的应用,使用惯例重于配置的思路,无 ...

  10. iOS 用Swipe手势和动画实现循环播放图片

    主要想法 添加3个ImageView展示图片,实现图片的无限循环. 使用Swipe手势识别用户向右或向左滑动图片. 使用CATransition给ImageView.layer添加动画,展示图片更换的 ...