广播变量kyro_Spark简介

简介:

spark是一个内存计算框架 , 解决了mapreduce在迭代与交互方面的不足

迭代: 多轮算法计算形式,pagerank,逻辑回归等

交互: 实时数据,数据仓库查询等

spark重要概念:

RDD:

弹性分布式数据集, 弹性(数据多节点分片)分布式(集群节点)数据集(默认加载至内存)

操作:

转换(transformation) rdd->newrdd

# 注意此类操作不会提交作业

map(func) 形成新的RDD集

filter(func) 过滤结果成为新的RDD集

flatmap(func) 映射为多于0的输出元素

groupbykey(key) 以Key为组的数据集

reducebykey(func) 以Key为组的数据集在经过func的处理

join(newrdd) 连接两个数据集 k,v k,w => k,(v,w)

sortbykey(desc) 排序数据集

动作(action) 结果处理

# 注意此类操作将提交作业

reduce(func) func函数输入两个返回一个结果

collect 返回操作后的数据元素

count 元素个数统计

countByKey 按Key统计每组的数目

saveastextfile 以文件形式保存计算结果集

saveassequencefile 以序列文件保存计算结果集

操作分类:

value:

1->1:

map, flatmap, mappartitions, glom

n->1:

union类型一致合并, cartesian分区笛卡尔积

n->n:

groupby

n属于m:

filter, distinct, subtract, sample, takesample

cache:

cache仅内存, persist可决定缓存位置

key-value:

1->1:

mapValues

union:

combineByKey, reduceByKey, partitionBy分区策略, cogroup协同划分

join:

join(cogroup,flatMapValues), leftOutJoin, rightOutJoin

action:

无输出:

foreach

HDFS:

saveAsTextFile, saveAsObjectFile

Scala:

collect, collectAsMap, reduceByKeyLocally, count, lookup, top(top,take,takeOrdered,first), reduce, fold, aggregate

DataType:

spark编程概念:

共享变量:

广播变量(boarkcast不可修改) .value

累加器(accumulator可累加)  .value

初始化:

构建SparkContext(集群地址,作业名称,sparkhome,作业依赖项)

RDD类型:

并行集合与hadoop数据集

并行集合: scala集合,可分片slice(parallelize)

hadoop集合: 文本,序列(K,V),inputformat

(之后均可做map/reduce操作)

Cache:

RDD转换后可缓存persist,cache,可容错

cache级别: 仅内存,内存磁盘,内存序列化kryo,内存磁盘序列化,仅磁盘,

spark基本架构:

应用程序间环境隔离 , 资源管理(YARN , Mesos) + 应用程序管理 . 程序运行过程中对RDD分片的优化(窄fusion , 宽全局barrier)

spark运行流程:

提交应用 -> DAG依赖流程化 -> 执行DAG至完成 -> 销毁运行环境

提交应用:

构建运行环境: 粗(一次YARN,Mesos).细(多次Mesos)

启动RDD管理器 BlockManager

DAG依赖流程化:

分解宽窄依赖: 归组

fusion优化,不需要物化

执行DAG至完成:

数据本地化: 基架感知

推测执行: 另起资源比较

销毁运行环境:

回收资源

spark on YARN:

客户端 提交任务 至 ApplicationMaster 申请资源 向 Nodemanager

SAM 内部有 ClusterScheduler(cpu核数) 有了资源 启动 StandaloneExecutorBackend(container大小) 注册 akka 等待任务 之后执行 完毕回收资源

Mesos介绍:

集群资源管理器 twitter,douban

客户端scheduler -> MesosSchedulerDriver -> MesosMaster(zk) -> MesosSlave(Executor)

master: 核心, 资源接入,分配Allocator,其他框架的管理

salve: 接收命令,报告状态(任务,资源)

framework scheduler: MesosSchedulerDriver第三方实现接入mesos, 双层调度(资源给框架,框架自定任务)  --->  类似hadoop jobtrack

framework executor: MesosExecutorDriver第三方执行实现  ---> 类似hadoop tasktrack

第三方框架注册流程:

第三方实现MesosSchedulerDriver,启动SchedulerProcess服务,MasterDetector对象(探测master通知schedulerprocess),sp会向master发送注册消息,sp确认,framework确认

mesos资源分配: 主资源公平调度算法,多维度资源,授权接入框架

设计: 资源拒绝(slave), 资源过滤(salve), 资源回收(master)

mesos容错设计:

master: zk

salve: 心跳,快照运行目录

mesos vs YARN:

设计目标一致: 通用集群资源管理方案

容错一致: zk,多主

在线升级: YARN的salve不支持

调度模型一致: 双层

调度算法: YARN除了DRF还支持容量与失败

资源隔离一致: cgroups

支持框架一致: mapreduce,strorm,spark等

资源分配颗粒度: YARN不支持动态资源分配

网络库:

rpc            serialization

libprocess     protocal buffer

avro           avro

Thrift         idl

socket kryo

libprocess设计: 消息(类型) -> 消息队列 -> 消息处理分发器(dispatcher) -> 消息处理    高效,易用

spark工作机制:

应用运行提交:

spark任务调度分配:

spark io: 序列化(进程actor,NIO,netty,磁盘kyro)

压缩(snappy,LZF)

spark net:RPC, RMI, WEB Service, EJB

AKKA

spark 容错: 血统, checkpoint

spark编程:

下载源码包 , 安装maven , ./make-distribution.sh --skip-java-test构建本地模式

安装sbt打包工具

编写代码:

python:

from pyspark import SparkContext

scala:

import org.apache.spark.SparkContext

import org.apache.spark.SparkContext._

import org.apache.spark.SparkConf

编写sbt依赖文件:

name := "Simple Project"

version := "1.0"

scalaVersion := "2.10"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.1.0"

sbt打包: sbt package

提交应用: /bin/spark-submit --class "SimpleApp" --master local test/target/scala-2.10/simple-project_2.10-1.0.jar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值