
大数据
代码届彭于晏
代码届彭于晏
展开
-
spark源码系列(9)BlockManager的原理
上一篇说到CacheManager和checkpoint来管理缓存和数据相关的东西。但实际上,他们底层都是通过BlockManger来管理数据的。找到RDD#getOrCompute中的SparkEnv.get.blockManager.getOrElseUpdate(blockId, storageLevel, elementClassTag,我们就可以看到最终是通过BlockMana...原创 2019-12-09 13:43:26 · 521 阅读 · 0 评论 -
flink源码解析3 ExecutionGraph的形成与物理执行
flink在client端形成jobGraph之后会提交给JobMaster ,在这里会形成ExecutionGraphJobMaster的构造函数中有这么一句话:this.executionGraph = this.createAndRestoreExecutionGraph(this.jobManagerJobMetricGroup);一直追踪导EecutionGraphBul...原创 2019-11-04 20:10:29 · 654 阅读 · 0 评论 -
flink源码解读2 jobGraph的形成
接着上一篇:LocalStrteamEnviroment#execute()JobGraph jobGraph = streamGraph.getJobGraph(); 追踪导StreamingJobGraphGenerator#createJobGraphprivate JobGraph createJobGraph() { // make sure that all...原创 2019-11-04 15:24:56 · 205 阅读 · 0 评论 -
解读flink源码1 。StreamGraph生成
之前我写过一篇spark的源码,只写了spark的批处理部分,这边写flink主要是以flink的流处理为主---------- public static void main(String[] args) throws Exception { //创建流运行环境 StreamExecutionEnvironment env = StreamExecu...原创 2019-10-31 20:13:47 · 232 阅读 · 0 评论 -
Spark性能调优3 使用Kyro序列化 、使用fastUtil
默认情况下,Spark内部是使用Java的序列化机制,ObjectOutputStream / ObjectInputStream,对象输入输出流机制,来进行序列化这种默认序列化机制的好处在于,处理起来比较方便;也不需要我们手动去做什么事情,只是,你在算子里面使用的变量,必须是实现Serializable接口的,可序列化即可。但是缺点在于,默认的序列化机制的效率不高,序列化的速度比较慢;序...原创 2019-09-06 15:02:44 · 238 阅读 · 0 评论 -
spark性能调优6 shuffle调优
1.Spark.Shuffle.consolidateFilesspark.shuffle.manager是hash的情况下,该参数有效。默认是false默认情况下:一个task会生成1-n个输出文件,然后由下游stage去拉取,如果是false就会产生(task个数*每个task产生文件)个文件如下图如果调整参数为true之后,一个节点产生的文件数只有首批task产生...原创 2019-09-09 19:40:28 · 243 阅读 · 0 评论 -
spark源码系列(2) Master
本节主要分两个模块来介绍1.Master的主备切换、注册与状态变更2.资源调度-------------------------------先看Master的主备切换。先来一张流程图找到Master.scalaonstart方法:val serializer = new JavaSerializer(conf)val (persistenceEngine_, l...原创 2019-09-17 19:07:22 · 173 阅读 · 0 评论 -
Spark调优 2 RDD重构与缓存与广播变量
当第一次对RDD2执行算子,获取RDD3的时候,就会从RDD1开始计算,就是读取HDFS文件,然后对RDD1执行算子,获取到RDD2,然后再计算,得到RDD3默认情况下,多次对一个RDD执行算子,去获取不同的RDD;都会对这个RDD以及之前的父RDD,全部重新计算一次;读取HDFS->RDD1->RDD2-RDD4这种情况,是绝对绝对,一定要避免的,一旦出现一个RDD重...原创 2019-09-06 12:39:10 · 182 阅读 · 0 评论 -
Spark调优 1 资源分配与并行度
通常情况下 spark的性能调优分成下面四种1、常规性能调优:分配资源、并行度。。。等2、JVM调优(Java虚拟机):JVM相关的参数,通常情况下,如果你的硬件配置、基础的JVM的配置,都ok的话,JVM通常不会造成太严重的性能问题;反而更多的是,在troubleshooting中,JVM占了很重要的地位;JVM造成线上的spark作业的运行报错,甚至失败(比如OOM)。3、shuf...原创 2019-09-05 21:43:02 · 241 阅读 · 0 评论 -
kylin简介
Kylin最大卖点是快,传统大数据工具并行计算列式存储索引kylin采用了预计算source指的是数据仓库,Cube 指的是预先计算的值,target一般是Hbase,rowkey是各种聚合的参数,比如group by a。。用官方网站上下载的一张图来说明下Kylin系统架构 kylin由以下几部分组成: · REST Server:提供一...原创 2019-09-02 15:14:46 · 413 阅读 · 0 评论 -
sql on Hbae hive phoniex
Hive集成HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等。在集成的过程中注意维持HBase jar包的一致性。Hive与HBase的整合功能的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive_hbase-handler.jar工具类。整合hive和hbase的过程1、将hbase下的hbase-common-0.96.2-hadoop...原创 2019-08-28 12:50:51 · 231 阅读 · 0 评论 -
spark性能调优7 算子调优
1。mappartions替换map提高性能map算子的操作,在一个分区中,数据会一条一条进入函数内部而mappartions则会把分区中所有数据都导入到函数执行1、MapPartitions操作的优点:如果是普通的map,比如一个partition中有1万条数据;ok,那么你的function要执行和计算1万次。但是,使用MapPartitions操作之后,一个task...原创 2019-09-09 20:39:08 · 292 阅读 · 0 评论 -
工作流调度框架 oozie 和azkaban
先说oozieoozie一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop MapReduce、Pig Jobs的任务调度与协调。Oozie需要部署到JavaServlet容器中运行。主要用于定时调度任务,多任务可以按照执行的逻辑顺序调度。oozie分成三个模块1) Workflow顺序执行流程节点,支持fork(分支多个节点),join(...原创 2019-09-22 20:33:42 · 687 阅读 · 0 评论 -
spark源码系列(8) CacheMananger 和checkpoint
老规矩,一张图先说明全流程进入源码:RDD#iteratorfinal def iterator(split: Partition, context: TaskContext): Iterator[T] = { if (storageLevel != StorageLevel.NONE) { SparkEnv.get.cacheManager.getOrCompu...原创 2019-09-20 20:30:13 · 165 阅读 · 0 评论 -
spark源码系列(6) shuffle执行原理
看ShuffleMapTask#runTaskoverride def runTask(context: TaskContext): MapStatus = { 。。。。 val manager = SparkEnv.get.shuffleManager writer = manager.getWriter[Any, Any](dep.shuffleHandle, pa...原创 2019-09-19 19:51:10 · 218 阅读 · 0 评论 -
spark源码系列(5) TaskSchedule原理
接着上一讲进入TaskSchedule#submitTasksval manager = createTaskSetManager(taskSet, maxTaskFailures) 首先创建一个TaskSetManangerTaskMananger对一个单独的TaskSet进行任务调度,这个对象负责追踪每一个task,如果task失败的话会负责重试task,直到超过次数,并且会通过...原创 2019-09-19 12:43:09 · 196 阅读 · 0 评论 -
spark源码系列(4) spark stage划分
我们进入RDD.scala,随便找一个action,就拿count开刀吧def count(): Long = sc.runJob(this, Utils.getIteratorSize _).sum 这里会调用sparkContext#runJob方法。一直追踪这个方法最终会发现调用的是dagScheduler.runJob(rdd, cleanedFunc, partitio...原创 2019-09-18 20:11:56 · 258 阅读 · 0 评论 -
spark源码系列(3) worker工作原理
这一篇分析worker的工作原理上一篇我们说到Master会给worker发出LaunchDriver和LaunchExecutor的消息先来一张总体的流程图这边我们先说launchDriverworker.scalacase LaunchDriver(driverId, driverDesc) => { logInfo(s"Asked to launch dr...原创 2019-09-18 19:28:39 · 164 阅读 · 0 评论 -
spark源码系列(1) SparkContext的初始化
我们先整体画一张spark程序执行的全流程1-2.我们通过spark-submit提交application时候,程序会通过反射的方式创建出一个DriverActor进程出来,Driver进程会创建一个SparkContext,SparkContext会初始化最重要的两个组件,DAGScheduler和TaskScheduler。3-7.TaskScheduler会通知Master,M...原创 2019-09-17 11:15:32 · 778 阅读 · 0 评论 -
spark性能调优9------------数据倾斜问题一站式解决方案
1.数据倾斜产生的原因在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作。此时如果某个key对应的数据量特别大的话,就会发生数据倾斜。数据倾斜只会发生在shuffle过程中。常用的并且可能会触发shuffle操作的算子:distinct、groupByKey、reduceByKey、aggregateB...原创 2019-09-10 21:35:41 · 232 阅读 · 0 评论 -
Hbase2 高级特性
Create a table with namespace=ns1 and table qualifier=t1 hbase> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}Create a table with namespace=default and table qualifier=t1 hbase>...原创 2019-08-27 18:59:32 · 1112 阅读 · 0 评论 -
Hbase 1
首先确保本地已经启动好hdfs集群,因为hbase是建立在hdfs之上的版本号是一个非常大的坑,可以预先下载好一个hbase,然后再lib中找到相应的hadoop版本,然后就去下载相应的hadoop版本我使用的是hbase2.1.0,hadoop版本用的是2.7.4接下去就是配置了,首先配置hbase-env.shjdk路径export JAVA_HOME=/Library/...原创 2019-08-26 20:46:11 · 211 阅读 · 0 评论 -
flink----11 Time 和wartermark
针对stream数据中的时间,可以分为以下三种•Event Time:事件产生的时间,它通常由事件中的时间戳描述。•Ingestion time:事件进入Flink的时间Processing Time:事件被处理时当前系统的时间l原始日志如下•2018-10-10 10:00:01,134 INFO executor.Executor: Finished task i...原创 2019-06-20 17:02:09 · 1061 阅读 · 1 评论 -
flink----10 window
Window:l聚合事件(比如计数、求和)在流上的工作方式与批处理不同。•比如,对流中的所有元素进行计数是不可能的,因为通常流是无限的(无界的)。所以,流上的聚合需要由 window 来划定范围,比如 “计算过去的5分钟” ,或者 “最后100个元素的和” 。•window是一种可以把无限数据切割为有限数据块的手段l窗口可以是 时间驱动的 【Time Window】(比如:每30秒...原创 2019-06-20 16:36:13 · 273 阅读 · 0 评论 -
flink--9 fink 容错机制
flink的容错机制主要是通过checkpoint和state来实现的checkpiont机制和容错性Flink使用流重放和检查点的组合来实现容错。检查点与每个输入流中的特定点以及每个操作员的相应状态相关。流数据流可以从检查点恢复,同时通过恢复操作员的状态和从检查点重放事件来保持一致性(正好一次处理语义)。检查点间隔是在执行期间利用恢复时间(需要重播的事件数)来权衡容错开销的一种方法。...原创 2019-06-20 16:12:58 · 442 阅读 · 0 评论 -
flink--8 fink的一些高级特性 Boradcast Accumulators Distributed Cache
l把元素广播给所有的分区,数据会被重复处理•类似于storm中的allGrouping•dataStream.broadcast()l广播变量允许编程人员在每台机器上保持1个只读的缓存变量,而不是传送变量的副本给tasksl广播变量创建后,它可以运行在集群中的任何function上,而不需要多次传递给集群节点。另外需要记住,不应该修改广播变量,这样才能确保每个节点获取到的值都是一致...原创 2019-06-20 15:30:03 · 251 阅读 · 0 评论 -
flink -------1 flink特点与其他流处理框架对比
Apache Flink 是一个开源的分布式,高性能,高可用,准确的流处理框架。 主要由 Java 代码实现。 支持实时流(stream)处理和批(batch)处理,批数据只是流数据的一个极限特例。 Flink原生支持了迭代计算、内存管理和程序优化。引用官方网站的一张图flink的架构图如下在大数据处理领域,批处理任务与流处理任务一般被认为是两种不同的任务,一个大数据框架...原创 2019-06-02 22:26:10 · 1379 阅读 · 0 评论 -
flink---7 flink的DataType和序列化
Flink支持的DataTypelJava Tuple 和 Scala case classlJava POJOs:java实体类lPrimitive Types•默认支持java和scala基本数据类型lGeneral Class Types•默认支持大多数java和scala classlHadoop Writables•支持hadoop中实现了org.apac...原创 2019-06-12 20:12:08 · 542 阅读 · 0 评论 -
flink---6 dataSet api (2)transformation和parallel和sink
transfromransformation Description Map data.map(new MapFunction<String, Integer>() { public Integer map(String value) { return Integer.parseInt(value); }...原创 2019-06-12 20:09:21 · 171 阅读 · 0 评论 -
从servlet到springboot(11) 手动编写一个redis的starter
上一节我们已经分析了springboot是怎么做到自动化配置的,这一节中我们将手动编写一个starter,通过这个starter我们就能实现redis自动化配置 pom文件引包<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:...原创 2019-02-02 15:34:20 · 306 阅读 · 0 评论 -
flink----12 wartermark 案例,接上一节
上一节的案例我们得到了触发window的条件watermark+window 处理乱序数据我们上面的测试,数据都是按照时间顺序递增的,现在,我们输入一些乱序的(late)数据,看看 watermark 结合 window 机制,是如何处理乱序的。nc -l 90000001,15383598820000001,15383598860000001,153835989200...原创 2019-06-20 17:21:29 · 671 阅读 · 1 评论 -
flink -----13 并行度和生产上的配置
TaskManager与SlotFlink的每个TaskManager为集群提供solt。 solt的数量通常与每个TaskManager节点的可用CPU内核数成比例。一般情况下你的slot数是你每个节点的cpu的核数。l一个Flink程序由多个任务组成(source、transformation和 sink)。 一个任务由多个并行的实例(线程)来执行, 一个任务的并行实例(线程)数...原创 2019-06-20 17:25:55 · 800 阅读 · 0 评论 -
Java工程师学快速Python(3)----- 模块、包、库 输入 输出
简单的说一个.py文件就是一个模块,多个.py文件整合成一个包,各种包的集合就是库import 语句想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:import module1[, module2[,... moduleN]一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。当我们使用impor...原创 2019-06-27 12:55:46 · 238 阅读 · 0 评论 -
flink---5 dataStream api (2)transformation和parallel和sink
常见transformationTransformation Description Map DataStream → DataStream 输入一个元素,然后返回一个元素,中间可以做一些清洗转换等操作 DataStream<Integer> dataStream = //...dataStream.map(new MapFunction&...原创 2019-06-12 09:56:53 · 150 阅读 · 0 评论 -
Java工程师学快速Python(5) 面向对象
类对象class MyClass: """一个简单的类实例""" i = 12345 def f(self): return 'hello world' # 实例化类x = MyClass() # 访问类的属性和方法print("MyClass 类的属性 i 为:", x.i)print("MyClass 类的方法 f 输出为:", x....原创 2019-06-27 12:54:53 · 168 阅读 · 0 评论 -
flink---4 dataStream api (1)source
lsource是程序的数据源输入,你可以通过StreamExecutionEnvironment.addSource(sourceFunction)来为你的程序添加一个source。lflink提供了大量的已经实现好的source方法,你也可以自定义source•通过实现sourceFunction接口来自定义无并行度的source,•或者你也可以通过实现ParallelSourceF...原创 2019-06-11 20:23:24 · 236 阅读 · 0 评论 -
flink----3 HA
jobManager协调每个flink任务部署。它负责任务调度和资源管理。l默认情况下,每个flink集群只有一个JobManager,这将导致一个单点故障(SPOF):如果JobManager挂了,则不能提交新的任务,并且运行中的程序也会失败。l使用JobManager HA,集群可以从JobManager故障中恢复,从而避免SPOF(单点故障) 。 用户可以在standalone或 Y...原创 2019-06-11 19:10:48 · 260 阅读 · 0 评论 -
flink----2 安装模式
flink有四种部署模式,jvm和local模式比较简单,这里就不说了,主要说standalone模式和yarn模式1.standaolne模式上图是官网上摘录得一张图片,其中master就是jobmananger,worker就是taskmanager,修改flink-conf.yaml中的jobmananger.rpc.address 指定ip作为jobmananger, sl...原创 2019-06-11 12:51:38 · 212 阅读 · 0 评论 -
flink -----14 Connector
Kafka-connectorKafka中的partition机制和Flink的并行度机制深度结合lKafka可以作为Flink的source和sinkl任务失败,通过设置kafka的offset来恢复应用Kafka Consumer消费策略设置setStartFromGroupOffsets()【默认消费策略】•默认读取上次保存的offset信息•如果是应用第一次...原创 2019-06-20 17:36:31 · 166 阅读 · 0 评论