- 博客(227)
- 收藏
- 关注
原创 SparkStreaming wordcount demo
流数据统计,将每隔10s内的数据做一次单词统计package com.streamingimport org.apache.spark.streaming._import org.apache.spark.streaming.StreamingContext._import org.apache.spark.SparkContextimport org.apache.spark.api.jav
2016-06-06 17:26:30 977
原创 SparkStreaming 删选含有error的行
筛选流数据中所有含error的行package com.streamingimport org.apache.spark.SparkConfimport org.apache.spark.streaming.Secondsimport org.apache.spark.streaming.StreamingContextobject PrintError { def main(args:
2016-06-06 17:21:53 1262
原创 SparkStreaming 打印输出demo
1.nc -lk 9999-l 使用监听模式,管控传入的资料。 本机开启9999端口 一个server对应一个client,多了可能出问题,也就是下次起sparkstreaming任务时,必须先关了这个端口,重开2.提交sparkstreaming任务package com.streamingimport org.apache.spark.streaming.Secondsimpo
2016-06-06 17:15:56 4874
原创 spark读取redis数据(交互式,scala单机版,java单机版)
交互式第一步:向redis中添加数据 第二步:将jedis jar包放入~/lib目录下,开启spark服务 第三步:通过spark-shell读取redis数据,并做相应处理 scala单机版package com.testimport org.apache.spark.SparkConfimport org.apache.spark.SparkContextimport red
2016-05-23 11:03:16 12034 1
原创 SBT编译spark-redis-master
spark-redis-master是用来让spark更简单地操作redis 将源码下载后解压缩到E盘,运行sbt,下载依赖jar包 run结果出错 采用官方教程 第一步:配置git,mvn命令yum -y install gitgit --versionvim /etc/profileexport PATH=/usr/local/git/bin:$PATHsource /etc/
2016-05-23 10:58:11 1734
原创 SBT安装与编译运行
SBT下载地址 sbt-0.31.11.msi 下载后双击进行安装到某一目录下,如:C:\Program Files(x86)\sbt,在该根目录下可以看到jansi.jar、sbt.bat、sbt-launch.jar等文件。(选择workspace在D盘)环境变量配置: scala在安装时会自动将bin目录添加到环境变量path里。需要配置的只有Scala-sbt,新建环境变量SBT_HO
2016-05-18 09:43:26 7663 1
翻译 Spark SQL下的Parquet使用最佳实践和代码实战
一:Spark SQL下的Parquet使用最佳实践1,过去整个业界对大数据的分析的技术栈的Pipeline一般分为一下两种方式:A)Data Source -> HDFS -> MR/Hive/Spark(相当于ETL) -> HDFS Parquet -> SparkSQL/impala -> Result Service(可以放在DB中,也有可能被通过JDBC/ODBC来作为数据服务使用);B
2016-05-17 18:16:28 10217
翻译 RDD与DataFrame动态转换(Java)
在企业中目前应用比较多的就是动态转换。动态的意思:是指提前不知道RDD中的每个record的列的个数,以及列的内容,只有在运行的时候才会知道,Row代表table中的一行数据。 实战代码如下:package com.dt.spark.SparkApps.sql;/** * 打印结果: [1,Spark,7] [2,Hadoop,10] [3,F
2016-05-17 18:01:15 1494 1
翻译 RDD和DataFrame转换(Java+Scala)
一:RDD与DataFrame转换 1. 通过反射的方式来推断RDD元素中的元数据。因为RDD本身一条数据本身是没有元数据的,例如Person,而Person有name,id等,而record是不知道这些的,但是变成DataFrame背后一定知道,通过反射的方式就可以了解到背后这些元数据,进而转换成DataFrame。 如何反射? Scala: 通过case class映射,在case
2016-05-17 17:55:49 13631
翻译 使用Java和Scala在IDE中开发DataFrame实战
使用Java和Scala两种语言实战DataFrame,创建DataFrame的时候,DataFrame可以来源于其他RDD,也可以来自于Hive表,或者其他数据来源。一般基于数据来源直接构造DataFrame。例如JSON文件,那么读取JSON文件的时候就会自动创建DataFrame。 SQLContext操作数据SQL的时候:有一个弊端就是,只支持SQL一种语言。 但是如果使用HiveC
2016-05-17 17:50:40 1278
翻译 Spark SQL与DataFrame
Spark SQL与DataFrame RDD与DataFrame Spark SQL企业级最佳实践 一:Spark SQL与DataFrame 1.Spark SQL非常强大主要体现在一下几点:a) 可以处理一切存储介质和各种格式的数据(可以方便的扩展Spark SQL的功能来支持更多类型的数据,例如Kudu),包括Hive,Mysql,DB2等传统数据库。 b) Spark SQ
2016-05-17 17:33:04 675
翻译 Hive实战
Hive Web可视化 phpHiveAdmin 一:Hive的本质是什么?1,Hive是分布式数据仓库,同时又是查询引擎,所以Spark SQL取代只是Hive查询引擎,在企业实际生产环境下Hive+Spark SQL是目前最为经典的数据分析组合;2,Hive本身就是一个简单单机版本的软件,主要负责:a)把HQL翻译成Mapper(s)-Reducer-Mapper(s)的代码;并且可能产生很多
2016-05-17 17:19:34 1069
翻译 Spark性能优化第十季之全球独家揭秘Spark统一内存管理
一:Memory Manager在Spark 1.6 版本中,memoryManager 的选择是由spark.memory.useLegacyMode=false决定的。如果采用1.6之前的模型,这会使用StaticMemoryManager来管理,否则使用新的UnifiedMemoryManager,我们先看看1.6之前,对于一个Executor,内存都有哪些部分构成:1,ExecutionMe
2016-05-17 16:53:33 2187
翻译 Spark性能优化第九季之Spark Tungsten内存使用彻底解密
一:Tungsten中到底什么是Page? 1.在Spark其实不存在Page这个类的。Page是一种数据结构(类似于Stack,List等),从OS层面上讲,Page代表了一个内存块,在Page里面可以存放数据,在OS中会存放很多不同的Page,当要获得数据的时候首先要定位具体是哪个Page中的数据,找到该Page之后从Page中根据特定的规则(例如说数据的offset和length)取出数据
2016-05-16 15:02:03 3195 1
翻译 Spark性能优化第八季之Spark Tungsten-sort Based Shuffle
一:使用Tungsten功能 1, 如果想让您的程序使用Tungsten的功能,可以配置: Spark.Shuffle.Manager = tungsten-sort Tungsten中文blogTungsten英文blogSpark在钨丝计划下要管理两种类型的内存存储方式:堆内和堆外。为了管理他们,所以搞了一个Page。 堆外:指针直接指向数据本身。 堆内:指针首先指向Obje
2016-05-16 14:47:01 1037
翻译 Spark性能优化第七季之Spark 钨丝计划
一:“钨丝计划”产生的本质原因1,Spark作为一个一体化多元化的(大)数据处理通用平台,性能一直是其根本性的追求之一,Spark基于内存迭代(部分基于磁盘迭代)的模型极大的满足了人们对分布式系统处理性能的渴望,但是有Spark事采用Scala+Java语言编写的所以运行在JVM平台,当然JVM是一个绝对伟大的平台,因为JVM让整个离散的主机融为一体(网络即OS),但是JVM的死穴GC反过来限制了S
2016-05-16 13:35:27 3802
翻译 Spark性能优化第六季
一:Shuffle性能调优1,问题:Shuffle output file lost?真正的原因是GC导致的!!!如果GC尤其是Full GC产生通常会导致线程停止工作,这个时候下一个Stage的Task在默认情况下就会尝试重试来获取数据,一般重试3次每次重试的时间为5s,也就是说默认情况下15s内如果还是无法抓到数据的话,就会出现Shuffle output file lost等情况,进而会导致T
2016-05-16 11:30:17 666
翻译 Spark性能优化第五季
一:性能优化之数据本地性1,数据本地性对分布式系统的性能而言是一件最为重要的事情(之一),程序运行本身包含代码和数据两部分,单机版本一般情况下很少数据本地性的问题(因为数据在本地),但是对于单机版本的程序由于数据本地性有PROCESS_LOCAL和NODE_LOCAL之分,所以我们还是尽量的让数据处于PROCESS_LOCAL;Spark作为分布式系统更加注意数据本地性,在Spark中数据本地性分为
2016-05-16 11:27:02 1568
翻译 Spark性能优化第四季
一:Spark性能调优之序列化1,之所以进行序列化,最重要的原因是内存空间有限(减少GC的压力,最大化的避免Full GC的产生,因为一旦产生Full GC则整个Task处于停止状态!!!)、减少磁盘IO的压力、减少网络IO的压力;2,什么时候会必要的产生序列化或反序列化呢?发生磁盘IO和网络通讯的时候会序列化和反序列化,更为重要的考虑序列化和反序列化的时候有另外两种情况:A)Persist(Che
2016-05-16 10:44:14 1120
翻译 Spark性能优化第三季
一:Spark程序数据结构的优化1,Java的对象:对象头是16个字节(例如指向对象的指针等元数据信息),如果对象只有一个int的property,则此时会占据20字节,也就是说对象的元数据占用了大部分的空间,所有在封装数据的时候尽量不要使用对象!例如说使用JSON格式来封装数据;2,Java中的基本的数据类型会自动的封箱操作,例如int会自动变成Integer,这会额外增加对象头的空间占用;3,J
2016-05-16 09:45:20 595
翻译 Spark性能优化第二季
一:Task性能优化1,慢任务(数据倾斜或机器故障)的性能优化:可以考虑减少每个partition处理的数据量,同时建议开启spark.speculation;2,尽量减少Shuffle,例如我们要减少groupByKey的操作,因为groupByKey会要求通过网络拷贝(Shuffle)所有的数据,有限考虑使用reduceByKey,因为会首先reduce locally;再例如在进行join操作
2016-05-16 09:38:51 614
翻译 Spark性能优化第一季
一:Spark性能优化核心基石1, Spark是采用Master-Slaves的模式进行资源管理和任务执行的管理:a) 资源管理:Master-Workers,在一台机器上可以有多个Workers;b) 任务执行:Driver-Executors,当在一台机器上分配多个Workers的时候那么默认情况下每个Worker都会为当前运行的应用程序分配一个Executor,但是我们可以修改配置来让每个Wo
2016-05-16 09:34:40 880
翻译 Spark RPC
一:Spark 1.6RPC解析1,Spark 1.6推出RpcEnv,RPCEndpoint,PRCEndpointRef为核心的新型架构下的RPC通信方式,就目前的实现而言,其底层依旧是Akka;2,Akka是基于Actor的分布式消息通信系统,而在Spark 1.6中封装了Akka,提供更高层的Rpc实现,目的是移除对Akka的依赖,为了扩展和自定义Rpc打下基础;二:RPCEnv解析1,Rp
2016-05-16 09:25:25 930
翻译 Spark Broadcast内幕解密
一:Broadcast彻底解析1,Broadcast就是将数据从一个节点发送到其他的节点上;例如Driver上有一张表,而Executor中的每个并行的Task(100万个Task)都要查询这张表,那我们通过Broadcast方式就只需要往每个Executor把这张表发送一次就行了,Executor中的每个Task查询这张唯一的表,而不是每次执行的时候都从Driver获得这张表!2,这就好像Serv
2016-05-16 09:07:24 1590
翻译 CheckPoint运行原理
一、Checkpoint到底是什么?1,Spark在生产环境下经常会面临Tranformations的RDD非常多(例如一个Job中包含1万个RDD)或者具体Tranformation产生的RDD本身计算特别复杂和耗时(例如计算时长超过1个小时),此时我们必须考虑对计算结果数据的持久化;2,Spark是擅长多步骤迭代,同时擅长基于Job的复用,这个时候如果能够对曾经计算的过程产生的数据进行复用,就可
2016-05-15 23:37:28 3767
翻译 CacheManager运行原理流程图和源码详解
一:CacheManager分析:1,CacheManager管理的是缓存,而缓存可以是基于内存的缓存,也可以是基于磁盘的缓存;2,CacheManager需要通过BlockManager来操作数据;3.当Task运行的时候会调用RDD的compute方法进行计算,而compute方法会调用iterator方法:/** * Internal method to this RDD; will rea
2016-05-15 23:30:26 1673
翻译 BlockManager初始化和注册解密、BlockManagerMaster工作解密、BlockTransferService解密、本地数据读写解密、远程数据读写解密
1. BlockManager的注册和初始化 2. BlockManager里面的重要函数详细介绍 一:BlockManager初始化 1. BlockManager的实例对象调用initializes的时候才能正常工作。 启动initializes方法又两个作用:BlockTransferService(网络通信),ShuffleClient/** * Initializ
2016-05-15 23:23:42 10765
翻译 BlockManager原理和源码解密
一、BlockManager运行实例观察从Application启动的角度来观察BlockManager;1,在Application启动时会在SparkEnv中注册BlockManagerMaster以及MapOutputTracker,其中a) BlockManagerMaster:对整个集群的Block数据进行管理的;b) MapOutputTracker:跟踪所有mapper的输出的;2,B
2016-05-15 22:58:05 3049 1
翻译 Task执行内幕与结果处理解密
1.当Driver中的CoarseGrainedSchedulerBackend给CoarseGrainedExecutorBackend发送LaunchTask之后,CoarseGrainedExecutorBackend在收到LaunchTask消息后,首先会反序列化TaskDescription:val taskDesc = ser.deserialize[TaskDescription](d
2016-05-15 22:48:46 1208
翻译 TaskScheduler内幕天机:Spark shell案例,TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解
TaskSchedulerBackend与SchedulerBackendFIFO与FAIR两种调度模式Task数据本地性资源的分配一、TaskScheduler运行过程(Spark-shell角度) 1.启动Spark-shell 当我们spark-shell本身的时候命令终端返回来的主要是ClientEndpoint和SparkDeploySchedulerBakcend。这是因为此时
2016-05-15 22:32:43 8630
翻译 Spark系统运行内幕机制循环流程
一、TaskScheduler原理解密 1.DAGScheduler在提交TaskSet给底层调度器的时候是面向接口TaskScheduler的,这符合面向对象中依赖抽象而不依赖的原则,带来底层资源调度器的可插拔性,导致Spark可以运行的众多资源调度器模式上,例如Standalone、Yarn、Mesos、Local、EC2、其它自定义的资源调度器。在Standalone的模式下,我们聚焦于Ta
2016-05-15 21:49:48 1584
翻译 Stage划分和Task最佳位置算法
1.Stage划分算法解密 Spark Application中可以因为不同的Action触发众多的Job,也就是说一个Application钟可以有很多的Job,每个Job是由一个或者多个Stage构成的,后面的Stage依赖于前面的Stage,也就是说只有前面依赖的Stage计算完毕后,后面的Stage才会运行 2.Stage划分的已经就是宽依赖,什么产生宽依赖?例如reduceByKey,
2016-05-15 21:00:33 1351
翻译 Spark Executor
一:Spark Executor工作原理1, 需要特别注意是在CoarseGrainedExecutorBackend启动时向Driver注册Executor其实质是注册ExecutorBackend实例,和Executor实例之间没有直接的关系!!!2, CoarseGrainedExecutorBackend是Executor运行所在的进程名称,Executor才是正在处理Task的对象,Exe
2016-05-15 19:57:10 953
翻译 Spark Worker原理和源码剖析解密
1.Spark源码剖析 2.Worker启动Driver源码 3.Worker启动Executor源码 4.Worker与Master交互 一:worker启动driver内幕和流程机制1, Cluster中的Driver失败的时候,如果supervise为true,则启动该Driver的Worker会负责重新启动该Driver2, DriverRunner启动进程是通过proces
2016-05-15 19:45:00 601
翻译 Spark资源调度
1.分配Driver(Cluster,只有在cluster模式在master才能为dirver分配资源) 2.为Application分配资源 3.两种不同的资源分配方式 4.spark资源调度方式一:任务调度与资源调度的区别1, 任务调度是通过DAGScheduler、TaskScheduler、SchedulerBackend等进行的作业调度;2, 资源调度是指应用程序如何获得资源;3
2016-05-15 19:32:33 642
翻译 Master的注册机制和状态管理解密
一 、master对其他组件注册的处理1, master接受注册的对象主要就是:driver,application,worker;需要补充说明executor不会注册给master,executor是注册给driver中的schedulerbackbend的;2, worker是再启动后主动向master注册的,所以如果在生产环境下加入新的worker到已经正在运行的spark集群上,此时不需
2016-05-15 18:23:46 648
翻译 Master HA
一:Master HA解析1, 生产环境下一般采用ZooKeeper做HA,且建议为3台Master,ZooKeeper会自动化管理Masters的切换;2, 采用ZooKeeper做HA的时候,ZooKeeper会负责保存整个Spark集群运行时候的元数据:Workers、Drivers、Applications、Executors;3, ZooKeeper遇到当前Active级别的Master出
2016-05-15 18:02:41 449
翻译 Spark天堂之门
, Spark程序在运行的时候分为Driver和Executors两部分;2, Spark的程序编写是基于SparkContext的,具体来说包含两方面: a)Spark编程的核心基础---RDD,是由SparkContext来最初创建(第一个RDD一定是由SparkContext来创建的); b)Spark程序的调度优化也是基于SparkContext;3, Spark程序的注册时通过Sp
2016-05-15 17:40:16 474
翻译 Spark Runtime内幕
一、Hadoop Yarn解析1,Yarn是Hadoop推出整个分布式(大数据)集群的资源管理器,负责资源的管理和分配,基于Yarn我们可以在同一个大数据集群上同时运行多个计算框架,例如Spark、MapReduce、Storm等; 2,Yarn基本工作流程如下图所示: 注意:Container要向NodeManager汇报资源信息,Container(程序员)要向App Mstr(项目经理
2016-05-15 16:58:40 996
翻译 Spark Runtime内幕
一 再论spark集群部署1.从spark runtime的角度来讲有五大核心对象:master,worker,executor,driver,coarseGrainedExecutorBackend;2.Spark在做集群分布式系统设计的时候:最大化功能独立、模块化封装具体独立的对象、强内聚低耦合。 3.当driver中的sparkcontext初始化的时候会提交程序给master,mast
2016-05-15 16:05:59 461
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人