spark labeledpoint函数用法_大数据分析工具-spark

本文详细介绍使用PyCharm配置Spark的过程,包括下载Spark压缩包、配置环境变量等步骤,并深入解析Spark的工作原理,如RDD的概念及其作用、MapReduce的工作方式、Spark的执行流程等。
摘要由CSDN通过智能技术生成

pycharm配置spark

下载spark压缩包,解压到本地磁盘。

7c214275b24f6796d013910c0db15a2a.png

打开pycharm,配置Content Root和环境变量。

4401c9978767e7f077a8b20672a9d9e2.png
配置Content Root

07d2952cea72814feaa4b515e4e93bc8.png
配置环境变量

shuffle

hadoop:

  • hdfs/hbase分布式存储
  • yarn资源调度框架
  • mapReduce用来计算

python里map和reduce函数的用法

  • map:从一个集合到另一个集合
  • reduce:从集合里计算出一个数
>>> mylist = [1,2,3,4]
>>> list(map(lambda x:x + 1,mylist))
[2, 3, 4, 5]
>>> from functools import reduce
>>> reduce(lambda a,b : a+b,mylist)
10

48441d9bca53925053b6bb8790cdeab4.png

map task:从一个集合到另外一个集合,进来多少个元素,计算后生成多少个结果

reduce task:对一堆结果进行合并,对合并的结果再进行落地

mapredude是一个分分合合的过程:一副牌跟它分开打开,然后每张牌进行计算,看它应该放到那一摞里面去,最后再把相同的这一摞进行合并。然后再给他存起来,再分发到其他的地方去。

mapreduce慢,是因为要把数据落地。

saprk是基于内存的计算框架,迭代和迭代之间将中间结果存在内存中,一次迭代最终都会落地磁盘。

一个input split对应一个block块128M,128M是逻辑大小,数据只有10kb,10kb存到hfds,10kb也会创建一个block单元。

为什么要分区?

hello 对 3取模 等于1,未来hello还会跑到相同的reduce里来,方便统计。

第二个maptask里面有hello,也会被抓到第一个reduce里去。比如1G的数据,保证所有的都会抓到第一个reduce里。加快reduce计算的速度。

map阶段会有磁盘落地,reduce会去读磁盘。

RDD

RDD:弹性分布式数据集,在内存里,把一个block块抽象为rdd里的一个partion。RDD里面的元素可以是键值对,也可以不是。

  1. 每个RDD由多个partition组成
  2. 每个parition对应一个计算逻辑
  3. RDD会有依赖(宽依赖 窄依赖)
  4. RDD由key、value组成可以用partition重分区
  5. 最优的位置去计算,也就是数据的本地性

容错

RDD数据集通过所谓的血统关系(Lineage)记住了它是如何从其他RDD中演变过来的。相比其他系统的细颗粒度的内存数据更新级别的备份和LOG机制,RDD的Lineage记录是粗颗粒度的特定数据转换(Transformation)操作(filter,map,join etc)行为。当这个RDD的部分分区数据丢失时,它可以通过Lineage获取足够多的信息来重新运算和恢复丢失的数据分区。

缓存 、宽依赖、窄依赖

制定缓存策略可以存内存和磁盘。

算子操作有shuffle,则是宽依赖,否则就是窄依赖。

根据宽、窄依赖优化DAG。

DAG优化

一个Application有根据Actions划分多个jobs,一个jobs中碰到宽依赖可以切分为多个stages,一个stage有多个pipeline,每个stage会提交一个taskSet。

启动流程

  1. Shell中spark-submit脚本提交程序,创建Driver进程。
  2. 运行程序,SparkContext在初始化的时候,够着一个DAGScheduler和一个TaskSchedule.
  3. TaskSchedule实际上是负责通过它对应的一个后台进程,去连接Master向Master注册这个Application。
  4. Master接收到Application注册过来的请求之后,会用资源调度的算法,在Spark集群Worker上为这个App启动多个Executor。
  5. Executor启动之后会反向注册到TaskSchedule上面来。
  6. 所有Exector都反向注册到Driver上之后,Driver结束SparkContext初始化,会继续执行我们自己编写的代码。
  7. DAGSchedule根据代码切分Job,生成TaskSet。
  8. TaskSchedule会把TaskSet里面每一个Task提交到右边的Executor上去执行。
  9. 总结,最后整个这个Spark应用程序的执行就是Stage分批次的作为TaskSet提交到Executor里面执行,每个Task针对RDD的一个partition,执行我们的算子和函数,RDD可以有5亿或者10亿的数据,Task并行执行。

f155c88def94ab64b3a7d3eae8fa322d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值