彻底详解Spark RDD 的的秘密花园(1)

一:RDD粗粒度与细粒度
粗粒度: 在程序启动前就已经分配好资源(特别适用于资源特别多而且要进行资源复用)
细粒度:计算需要资源是才分配资源,细粒度没有资源浪费问题。

二: RDD 的解密:
1,分布式(擅长迭代式是spark的精髓之所在) 基于内存(有些时候也会基于硬盘) 特别适合于计算的计算框架
2,RDD代表本身要处理的数据,是一个数据集Dataset RDD本身是抽象的,对分布式计算的一种抽象
RDD 定义: 弹性分布数据集 代表一系列的数据分片
3,RDD弹性之一: 自动进行内存和磁盘数据存储的切换

RDD弹性之二:基于Lineage(血统)的高效容错:

基于DAG图,lineage是轻量级而高效的:
操作之间相互具备lineage的关系,每个操作只关心其父操作,各个分片的数据之间互不影响,出现错误的时候只要恢复单个Split的特定部分即可:
这里写图片描述

RDD弹性之三: Task如果进行失败会进行特定次数的重试(某一计算步骤一般重试4次)

RDD弹性之四:stage如果失败会进行特定次数的重试

RDD弹性之五:checkpoint 和persist(持久化 将数据放在内存上)

RDD弹性直六:数据调度弹性:DAG Task 和资源管理无关

RDD弹性之七: 数据分片的高度弹性

checkpoint解密:1,spark 在生产环境下经常会面临Transformations 的RDD 特别多(例如一个job里面包含了1万个RDD)或者具体Transformation产生的RDD本身计算特别复杂和耗时(例如计算时长超过1万小时)此时我们必须考虑对计算数据的持久化
2,spark擅长多步骤的迭代 同时擅长基于job的复用,这个时候如果能够对曾经计算过程产生的数据进行复用,就可以极大地提升效率
3,如果采用persist的方式把数据放在内存上的话,虽然是最快速但是也是最不可靠的;如果放在磁盘上也不是完全可靠(例如管理员可能清空磁盘等)
4,checkpoint的产生就是为了相对而言更可靠的持久化数据,在checkpoint可以指定把数据放在本地且是多副本的方式,但是正常的生产环境下是放在HDFS,这就天然的借助了HDFS高容错 高可靠的特性来完成最大化的可靠的特征来完成了最大化的持久化数据的方式
5,checkpoint是为了最大程度 保证绝对可靠的复用RDD 计算数据的spark 的高级功能通过checkpoint我们通过把数据持久化的HDFS来保证数据最大程度的安全性
6,checkpoint就是针对整个RDD计算链条中特别需要数据持久化的环节(后面反复使用当前环节的RDD)开始基于HDFS等的数据持久化复用策略,通过对RDD启动checkpoint机制来实现容错和高复用

RDD上的 Partition size = 默认为HDFS上的Block Size 

移动计算而不是移动数据

这里写图片描述

每步操作都产生RDD,RDD包含对函数的计算,RDD是有依赖关系的RDD逻辑上代表了HDFS上的数据,计算前数据不用传到机器上,因为数据就在机器上。

三:Spark的位置感知 比Hadoop的位置感知好很多 Hadoop 在进行Partitions 之后就不管reduce在哪里了 但是Spark 在进行Partition进行下一步stage操作时候会确定这个位置是精致化的。

四: MapReduce 是基于数据集 spark是基于工作集
无论是基于数据集还是工作集 都有位置感知,容错 负载均衡这些工作特征
基于数据集的处理:从物理存储上加载数据,然后操作数据,然后写入物理存储设备,主要代表Hadoop的MapReduce

基于数据集不适合的工作场景:1,不适合于大量的迭代 2,不适合于交互式查询 重点是:基于数据流的方式不能复用曾经的结果或者中间结果。

RDD是基于工作集的 RDD允许用户在执行多个查询任务的时候,显式
的将工作集缓存在内存中,其他人查询的时候就可以复用

假设stage内部有1000个步骤 中间不会默认产生999次结果,如果是默认情况下之产生一次 结果

partion 很小 要合并, block 大 分成小片 :
提高处理批次 人工做
减少个数
这里写图片描述

1W 个变成10W 个 可用可不用 shuffle
100W变 1W 不用 shuffle
调用 coalesece
这里写图片描述
这里写图片描述

五: RDD通过记录数据更新的方式为何很高效
1,RDD是不可变的 + lazy (每次操作就变成新的RDD,因为RDD是不可变的,新的RDD与前面的RDD为这个this指针 作为第一个参数,所以就不存在全局修改的问题,控制难度就极大的下降,在这基础上有计算链条,因有计算链条,901条出错时可以从900条恢复,第一点:lazy级别的且是不可变的构成链条,导致计算的时候从后往前回溯不会每次产生中间的结果之类的只是记录了对他的什么操作 第二点容错的时候它会记录前面的东西,在前面某步的基础而不是从头计算 )
2,RDD是粗粒度 RDD的具体的数据结构的操作都是粗粒度的 RDD 的写操作(彻底修改数据例如网络爬虫)是粗粒度的  但是RDD的读操作(查询数据)既可以是粗粒度的也可以是细粒度的
RDD 一系列数据分片上运行的计算逻辑是一样的

3,所有的RDD操作返回的都是迭代器这就让所有框架无缝集成
 面向接口编程 返回的是接口级别的RDD 但可以操作接口的子类的方法 为什么Spark可以 因为this.type ,所以可以通过运行时也就是Runtime来具体把实际的实例赋值给RDD转过来就可以操作它。
这里写图片描述
这里写图片描述
这里写图片描述

可操作 RDD接口 子类方法:
这里写图片描述
这里写图片描述

面向接口 使用的接口 ,能否 调用接口的子类?

java 不可以这是Scala的语法提供的this.type 指向 具体的子类 可以调用 子类 方法
运行时 把具体实列赋值给RDD 中 然后转过来 就可以操作它,
指向 子类的方法

写一个框架 符合RDD 规范 因为无缝集成 可以调动很多框架

六:RDD的缺陷:主要不支持细粒度的写操作(更新)和以及增量迭代计算

本博客内容来自于 : 简介: 王家林:DT大数据梦工厂创始人和首席专家. 联系邮箱18610086859@126.com 电话:18610086859 QQ:1740415547 微信号:18610086859

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

spark 集群搭建 详细步骤 - 2016-07-22 18:07:20

最近好不容易搞到了三台测试机,可以用来搭建spark集群搞模型。本宝宝开心得不行,赶紧行动,把spark集群搭起来,模型跑起来。 1.搭建hadoop集群 hadoop的hdfs文件系统是整个生态圈的基础,因为数据量大了以后,数据一般就都放hdfs上头了。因为四台测试机之前已经搭建好了hadoop集群环境,而且经过本宝宝测试,hadoop集群也是可用的,所以就省了搭hadoop集群的功夫。 2.配置集群host 四台机器的hostname如下: namenodetest01.hadoop.xxx.com

使用Fuel安装Openstack - 2016-07-22 18:07:11

Openstack自动化部署工具,主要用于生产环境. 一. 环境准备 这里用的是Openstack 9.0版本. Fuel Documentation 下载 Fuel for OpenStack镜像文件 , 用于安装Feul Master. 安装 Xshell , 用于远程连接. 二. 安装fuel_master节点 1. VirtualBox网络配置 管理-全局设定-网络-仅主机(Host-Only)网络 新建三张新的网卡: Host-Only Ethernet Adapter #1 IPv4: 10.
flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。 一、什么是Flume? flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume O

KafkaStreams介绍(二) - 2016-07-22 18:07:55

说明: 本文是Confluent Platform 3.0版本中对于Kafka Streams的翻译。 原文地址: https://docs.confluent.io/3.0.0/streams/index.html 看了很多其他人翻译的文档,还是第一次翻译,有什么翻译的不好的地方还请指出。   这是Kafka Streams介绍的第二篇,以前的介绍如下: http://blog.csdn.net/ransom0512/article/details/51971112   1.  快速入门 1.1.  目
2016年7月19日下午,笔者做客国泰君安通信研究团队”软银收购ARM“深度解读电话会议,与在线的150多位机构投资者分享了对于”软银收购ARM“的个人观点。 以下为电话会议实录,略经编辑以及后期补充部分观点。 主持人:各位同事朋友大家下午好,我是国泰君安通信行业分析师宋嘉吉,欢迎大家今天参加本次电话会议,此次会议的主题是软银收购ARM,7月18号软银宣布以243亿英镑收购半导体IP供应商ARM,是对未来物联网战略的提前卡位,我们认为这也是物联网行业布局芯片的又一重磅催化。今天大唐电信封了涨停,按照我们对
一、HBase伪分布式集群安装 1、安装包解压 $ cd app/ $ tar -xvfhbase-1.2.0-cdh5.7.1.tar.gz $ rmhbase-1.2.0-cdh5.7.1.tar.gz   2、添加环境变量 $ cd ~ $ vim .bashrc exportHBASE_HOME=/home/developer/app/hbase-1.2.0-cdh5.7.1 exportPATH=$PATH:$HBASE_HOME/bin $ source .bashrc   3、编辑hbase
本文将介绍Oracle集成云Agent的基础架构,所包含的组件,和如何连接云与OP应用。 目前/典型的集成方式 目前常用的将云应用/基于互联网的应用与企业内部部署(OP)应用连接的方式为:穿透一层或者更多的防火墙,使用反向代理、Oracle API Gateway或者OHS。要实现这些操作需要多种专业知识,比如防火墙需要开放入站端口,暴露一个私有的SOAP/REST服务并且配置网络路由。SOAP/REST服务可以用SOA套件之类的产品实现,比如与CRM系统进行通讯,实现客户信息的接收。如下图所示: 如果使
本次主要是详细记录Docker1.12在Ubuntu16.04上的安装过程,创建Docker组(避免每次敲命令都需要sudo),Docker常用的基本命令的总结,在容器中运行Hello world,以及创建一个基于Python Flask的web应用容器的全过程。 1.Docker1.12在Ubuntu16.04上安装 1.1.先决条件1,添加Docker源 wxl @wxl - pc: ~ $ sudo apt-get update 增加CA证书 wxl@wxl -pc :~$ sudo apt -ge
参考自: http://blog.csdn.net/jdplus/article/details/45920733 进行了大范围修改和完善 文件下载 CDH (Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。  Cloudera Manager则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的
Spark可以通过三种方式配置系统: 通过SparkConf对象, 或者Java系统属性配置Spark的应用参数 通过每个节点上的conf/spark-env.sh脚本为每台机器配置环境变量 通过log4j.properties配置日志属性 Spark属性 Spark属性可以为每个应用分别进行配置,这些属性可以直接通过SparkConf设定,也可以通过set方法设定相关属性。 下面展示了在本地机使用两个线程并发执行的配置代码: val conf = new SparkConf() .setMaster(