Spark笔记一之简介,启动,与Hadoop对比,运行模式

简介

Spark由Berkeley大学研发是apache下的一个大数据处理框架是一个顶级项目。

1.      他号称在内存中比MapReduce快100倍,disk中快10倍

2.      易用性强上手快,支持java,scala,python,R语言

3.      应用广,可包含大数据查询,流式计算,机器学习,图计算

4.      可以在各个平台下运行

spark应用场景

大批量数据实时查询,离线数据批处理,流式计算

官网:http://spark.apache.org/


与hadoop对比

在hadoop中map任务的输出是一个<k,v>键值对,而reduce任务的输入就是读取map任务输出的这个键值对,Hadoop框架会将多个map任务的输出按照不同的分区拷贝到不同的reduce节点上,这个过程叫做shuffle。Spark也存在map和reduce任务和hadoop一样.

Shuffle对比

以下是hadoop中shuffle的过程示意图


1.MAP任务处理完毕之后先将数据存入内存。

2.紧接着对内存中的数据执行分区排序操作并存入磁盘,此时磁盘中就存在很多的小片用于存储。(写1)

3.读取磁盘上小分片中的数据然后merge写入一个大文件,这个大文件中包含很多分区。(读1+写2)

4.此时磁盘上会有很多的大文件,每个文件上的分区数据会输出给不同节点上的reduce任务(读2),这步操作应该还会产生IO消耗。

5.Reduce任务所在节点读取完毕后再对其进行merge操作形成一个大文件写入磁盘(写3)。

6最后reduce任务读取(读3)这个大文件作为自己的入参来进行计算。

以上就是hadoop中shuffle的简单过程,统计一下读写磁盘共有6次。Spark也有shuffle过程但是全部是基于内存的所以比hadoop快。

 

数据共享对比

Hadoop

1.Hdfs将数据存储在不同的节点上而且每个节点都会备份,一份数据可能会存储在3个不同的节点上这样还涉及到数据同步问题。

2.机器学习中结果也需要写入hdfs上这样也涉及同步问题。

3.在高并发查询时,每查询一次都要去hdfs上读取数据。

Spark

由于spark的数据是基于内存的所以速度快且不涉及数据备份,在高并发查询时只第一次从hdfs中读取后面的则可以从内存中读取。

 

Hadoop设计上不占用大量内存,spark则需要占用大量内存。

 

运行模式

Local:本地模式,多用于测试,使用linux和windows平台

Standalone:spark集群模式,使用spark自己的调度模式

Yarn:基于yarn,在yarn上运行

Mesos:类似yarn的资源调度框架,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行Hadoop、Spark等框架

 

Windows下运行

在官网下载安装包,http://spark.apache.org/


在1选择spark版本,在2选择hadoop版本,然后在4下载安装包。我下载的是1.4.1一般往前至少推两个版本

Spark各个版本之间可能不兼容


解压缩安装包后在bin目录下双击spark-shell.cmd文件

1.windows下启动spark需要配置jdk我配置的是1.8,可能需要关闭防火器,360。

2.这个版本的spark自带scala2.10.4


3.spark启动的上下文对象可直接使用


4.可以通过sparkUI访问spark,看到以下界面就算启动成功了。在浏览器中可以查看spark的job,环境等信息


5.最后在启动完毕后的窗口内可以输入运行命令

例:一个简单的单词计数例子

新建两个txt文件,单词用tab键(\t)分割

sc.textFile("F://bigData//spark//word1.txt").flatMap(_.split("\t")).map((_,1)).reduceByKey(_+_).collect


这就是spark版本的单词计数

上面的是一个简写的版本,下面一个还原的版本已经测试通过,*表示全部文件。

sc.textFile("F://bigData//spark//wordcount//*").flatMap((line:String)=>line.split("\t")).map((x:String)=>(x,1)).reduceByKey((x:Int,y:Int)=>(x+y)).collect

 

sc.textFile("F://bigData//spark//wordcount//*"):*表示wordcount下所有的文件

 

.flatMap((line:String) => line.split("\t")):表示截取每一行

 

.map((x:String)=>(x,1)):map的入参是匿名函数,参数为x类型字符串,函数体是(x,1)。X表示通过\t分割的每一个字符串,每个字符串后跟数字1,<a,1>,<a,1>,<b,1>,…….

 

.reduceByKey((x:Int,y:Int)=>(x+y)):也是匿名函数,两个Int类型参数函数体是(x+y)。如果RDD元素类型为<k,v>键值对,对所有key值相同的元素的value进行处理,我这里定义的是(x+y)

<b,1>,<b,1>,<b,1>,<b,1>:1+1=> 2+1 => 3+1,最终结果是4,b出现4次

 

同样可以在浏览器中看到刚刚执行任务的信息,任务id,提交时间,花费时间,完成任务数,地址,占用系统内存数等。


Linux下运行

1.还是使用上一步中从官网下载的安装包将其拷贝到linux下然后解压缩

tar -zxvf spark-1.4.1-bin-hadoop2.6.tgz

 

2.在解压后的文件夹(/usr/local/spark-1.4.1-bin-hadoop2.6/conf)中执行改名命令

[root@shb01 conf]# mv  spark-env.sh.template  spark-env.sh

本地模式启动不改也行

 

3.在bin目录下执行spark-shell启动spark

[root@shb01 bin]# ./spark-shell

见到如下界面就算启动成功,此时的spark是本地模式


在启动过程中和windows下一样可以看到上下文信息,也可以和windows一样通过4040端口访问

Spark context available as sc/http://192.168.79.131:4040

此时通过jps可以看到linux下已经有一个spark进程


4.运行单词计数的例子,只需要更改文件的路径为linux下的路径即可,若是hdfs则为hdfs路径

sc.textFile("/usr/local/word").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect


sc.textFile("hdfs://shb01:9000/word").flatMap(_.split("")).map((_,1)).reduceByKey(_+_).collect

注:hdfs这个例子我没有测试


Linux下本地模式分类

Spark的本地启动模式分为5种

1.local:表示使用一个工作线程执行计算任务。

         [root@shb01bin]# ./spark-shell

         [root@shb01bin]# MASTER=local ./spark-shell

2.local[n]:表示使用指定的线程数执行计算任务

         [root@shb01bin]# MASTER=local[2] ./spark-shell

3.local[*]:表示工作线程书会根据本机CPU的核数来确定

         [root@shb01bin]# MASTER=local[*] ./spark-shell

4.local[threads,maxFailure]:threads工作线程数,maxFailure:计算任务失败最大的重试次数

         [root@shb01bin]# MASTER=local[2,3] ./spark-shell

5.local[numSlave,corePerSlave,memoryPerSlave]:这种是最常用的方式是伪分布模式,三个参数分别是节点数,每个节点的CPU核数,每个节点的内存数(单位是M)。注意内存数最小是512M

         [root@shb01bin]# MASTER=local[2,2,512] ./spark-shell

上面指定伪分布模式启动,执行jps可以看到出来sparksubmit之外还起了两个进程


另外从输出的日志可以看到master和两个worker信息通过UI可以看到相关信息



以上5种本地启动模式的信息都可以在4040看到





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值