自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (3)
  • 收藏
  • 关注

原创 从零开始搭建一个windows下的presto开发调试环境

本文适合只有windows操作系统的工作机,又需要对presto进行二次开发的童鞋参考。

2020-06-12 14:38:55 2403 1

原创 记一个Spark2.3 JDBC连接thriftServer 创建临时函数的bug

使用jdbc连接thrift,上传依赖jar到hdfs并创建临时udf'函数,而后删除jar,运行时间过久后,其他sql的task 会报File XX does not exist 错误,该问题的原因时什么呢?又该如何解决呢?

2020-05-14 18:17:57 868

原创 Spark Job调度模式源码学习

spark的有FIFO和Fair两种Job调度方式,本文将从算法源码实现入手,持续探索Spark job调度的设计和实现,并进一步深入job调度相关的源码(如资源池)。

2020-05-08 18:48:44 411

原创 记一次spark compact 事务表小文件失败的问题

目录问题描述问题定位问题解决方案问题描述我们生产的spark集群维护了大量的事务表,需要频繁进行增删改操作,这个过程会产生非常多的delta文件。小文件过多时,读写性能会有严重的下降,因此我们开发了一个定时合并小文件的功能。最近生产的运维反映合并的过程会频繁出错,task的报错内容如下图:从图中可以看出来,实际合并的表和最后写入的时候表不是同一个表,bucket数量也不一致。文件的bucke...

2020-05-08 12:20:35 479 1

原创 Kudu java 客户端Row 读写数据结构设计

Kudu java 客户端Partial Row数据结构设计文章目录Row 设计--PartialRowRow 数据写入--addXXX()数据读取--RowResult总结刚开始工作时有个研发大哥告诉,看源码时,首先要了解各部分的数据结构设计,搞清楚数据结构的设计对于理解代码很有帮助,我一直将这句话记在心里。此前因为工作需要,需要对kudu-client 的部分代码进行修改,以实现数据加解密。...

2020-04-13 18:27:30 908 1

原创 spark性能优化之DataSource表limit操作下推实现kudu limit查询性能千倍提升

文章目录问题描述解决方案测试结果总结问题描述我们的 spark基于DataSource V1版本,整合了kudu表,可以直接使用sql操作读写kudu表。目前我们的kudu-client使用的1.7.1版本,随着kudu表的使用场景不断增加,kudu的查询的性能也暴露出来很多问题。此外,随着kudu版本的升级,支持了许多新特性。比如,1.9版本的kudu支持了limit操作,且limit的性能...

2020-04-02 16:07:40 1226 2

原创 Spark无法Heartbeat长事务问题的解决方案

我们对spark的源码进行了大量的修改,使得其能够支持事务表,能够对orc表进行update,delete等操作。上文我们提到spark事务o状态残留问题解决,但是该解决方案缺却引发了一个问题,即长事务的情况下会导致数据出错。

2020-04-02 10:38:17 852

原创 关于hive事务表o状态残留问题的解决

上次我写过一篇文章https://blog.csdn.net/u012543819/article/details/104540056,其中讲到,在hiveserver异常挂掉的情况下,可能会导致部分事务为o状态且残留在TXNS元数据表中。通过仔细研究TxnHandler的代码,我发现其中有一个方法叫timeOutTxns,其实它核心也就是去修改TXNS表中超时的o状态事务为a状态,以便后续的...

2020-04-01 19:10:42 663

原创 记一个hive1.2.1 orc 事务表不能正常提交合并任务的问题

正常情况下,hive通过 CompactionTxnHandler中的findPotentialCompactions 方法获取需要合并的表信息,如下所示,会分别扫描COMPLETED_TXN_COMPONENTS和TXNS, TXN_COMPONENTS,获取已commit 的表信息和abort的事务表信息。/** * This will look through the comp...

2020-02-27 17:54:00 829

原创 Spark default 分区为空时无法查询的问题解决

在创建了spark动态分区表时,如果插入数据时,分区值为null或者’‘, spark会将分区值设置成默认值:__HIVE_DEFAULT_PARTITION__这里,spark2.3在处理的时候,会忽略分区值为null的数据,因此会存在如下select语句查询不到结果的情况:select * from t where p =’__HIVE_DEFAULT_PARTITION__‘...

2020-02-27 16:52:32 961

原创 CentOS7 安装bazel

先决条件:openjdk1.8 ,openjdk-devel1.81. 操作系统需求centos72. 资源库下载https://docs.bazel.build/versions/master/install-redhat.html参见以上链接,下载repo文件并复制到  /etc/yum.repos.d/.3. 安装yum install bazel可能会存在镜...

2018-12-10 11:15:40 9427 2

原创 Exception in thread "main" java.lang.NoSuchMethodError: org.codehaus.commons.compiler.Location

今天写sparksql 应用出现了这个问题: Exception in thread "main" java.lang.NoSuchMethodError: org.codehaus.commons.compiler.Location.<init>(Ljava/lang/String;SS)V    at org.codehaus.janino.Scanner.location(...

2018-11-05 11:28:11 4793

原创 Neo4j入门操作

最近因为项目建模需要使用到图数据库,搜了一圈,发现Neo4j就不错,于是开始鼓捣。1. 安装 下载地址:https://neo4j.com/download-center/官方提供了很多可选的下载项,企业版,社区版,桌面版。这里我下的是桌面版。 然后就是按照安装步骤安装完成。,打开桌面版,就长这样.2. 使用入门2.1数据库创建和启动这里我们新建一个项目,然...

2018-10-12 14:13:54 52478 5

原创 Idea开发调试MapReduce的wordCount

好久没搞了。来复习一下,首先我们尝试本地开发调试首先我跟着有位博主的步骤出发:https://blog.csdn.net/programmer_wei/article/details/45286749然后报了一个错误:Exception in thread "main" java.lang.VerifyError: Bad type on operand stackExcepti...

2018-09-25 14:21:06 1067

原创 spark-sql 时间戳类型比较源码修改

上次说到时间戳和字符串比较时会把时间戳cast成string 再做比较关于spark -sql 时间戳类型比较的一个小坑,这个过程中对精度做了处理。项目组的大哥最近频繁使用毫秒值为0的数据进行查询比较。他觉得这是一个bug,让我去修改一下。首先我分析了一下生成的物理计划,发现>=,<= 时会发生cast as string的强转。<=>和的情况并没有显示调用...

2018-09-04 18:02:23 1268

原创 关于spark -sql 时间戳类型比较的一个小坑

最近项目组的大哥遇到一个奇怪的问题。spark表插入的时间戳数据带毫秒,但是最后的毫秒数据都是0,即如下格式:2018-08-31 16:46:30.0这种情况下,在做如下条件查找时,就无法匹配下相等的数据,即如果表中有2018-08-31 16:46:30.0这样一条数据,这个数据是查询不出来的。select * from t1 where time <= '2018-0...

2018-09-03 14:39:38 7872

原创 Spark2.3实现 sqlserver函数for xml

sqlserver支持for xml path()语法,将返回结果嵌套在指定的xml标签中。项目组之前在spark2.0上实现了该功能。迁移到2.3时,由于原生spark修改较多,出现了很大的兼容问题。我的工作就是让这个函数重新运作起来。菜鸟真的被折磨的很痛苦,所幸还是成功解决了问题。1. 语法说明关于sqlserver中 for xml path的语法,大致就是将指定字段和连接的字符串包...

2018-08-23 15:08:56 744

原创 Spark2.3 在sql自定义IsNumeric 函数

博主前端时间一个在看Spark-core的源码。最近因为项目上的事,赶鸭子上架被叫过去改bug了。因为项目组对spark源码做了很多修改,这次在迁移到spark2.3时,需要把之前修改的功能也一并迁移过来。遇到的第一个问题就是实现一个IsNumeric 。这是其他RDB中sql支持的函数,原生spark-sql暂不支持。接下来我们看一下实现流程:1. 定义函数表达式先找到arithme...

2018-08-23 11:32:19 732

原创 菜鸟的Spark 源码学习之路 -8 RDD-依赖关系

RDD之间的依赖关系,是spark stage划分的重要依据。总所周知,RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency),宽依赖(wide dependency)。 stage的划分就在宽依赖和窄依赖的边界处,一旦RDD间存在宽依赖,则会有shuffle产生。本文我们就来看一下spark如何抽象RDD之间的依赖关系。1. 窄依赖Nar...

2018-08-15 15:38:27 233

原创 菜鸟的Spark 源码学习之路 -8 RDD

前文对shuffle的过程进行了学习,shuffle操作本身是基于RDD之间的依赖关系,在RDD之间产生宽依赖是则会有Shuffle。RDD是Spark中最重要的数据抽象。本文开始,我们将学习SparkRdd的实现细节。1. 概览/** * A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. ...

2018-08-15 15:03:15 352

原创 菜鸟的Spark 源码学习之路 -8 Shuffle

上一次研究的BlockManager相关的源码实现。本次进入Shuffle管理的学习。Shuffle是spark的一个重要的过程抽象,它涉及到以下几个问题:1. 数据重新分区2.数据传输3.数据压缩4.磁盘IO1. 结构概览我们先看一下Shuffle包的类和对象组成,包括java和scala两部分:Spark2.x后,原有的MapShuffleManager已经...

2018-08-14 16:00:44 441

原创 菜鸟的Spark 源码学习之路 -7 Storage管理源码 -part1 BlockManagerMaster

上一次我们了解内存管理中MemoryPool的源码实现,这一次我们从下往上,学习spark的存储管理。Storage包结构如下:本次我们从Block的管理入手开始学习存储管理。从上面的包中我们可以看出,Block管理主要包含BlockManagerMaster和BlockManager两个部分。BlockManager和MemoryManager一样是SparkEnv中的一个组件,如下图所...

2018-08-13 19:17:10 178

原创 菜鸟的Spark 源码学习之路 -6 Memory管理源码 -part3 MemoryPool

上文中讲到MemoryManager的源码,它跟踪计算内存和存储内存的使用情况,提供内存管理的入口,这次我们就从计算内存和存储内存两个方向深入学习spark的内存管理。1. ExecutionMemoryPool/** * Implements policies and bookkeeping for sharing an adjustable-sized pool of memor...

2018-08-13 15:28:42 324

原创 菜鸟的Spark 源码学习之路 -6 Memory管理源码 -part2 MemoryManager

上文中 菜鸟的Spark 源码学习之路 -6 Memory管理源码 -part1 功能概览,对Spark Memory管理的实现做了一个整体的了解,这次我们从MemoryManager开始深入了解spark 内存管理:首先看一下MemoryManager的结构:这里有几个重要的数据结构:// -- Methods related to memory allocation poli...

2018-08-13 11:06:57 324

原创 菜鸟的Spark 源码学习之路 -6 Memory管理源码 -part1 功能概览

菜鸟的Spark 源码学习之路 -5 Executor源码 中,我们深入了解了Spark Executor的源码。Spark本身是一个内存计算框架,任务的执行肯定离不开内存管理。所有,这次我们打算继续探索Spark的内存管理。先看下这个包里面都有些什么牛鬼蛇神:看下这个包的功能描述:/** * This package implements Spark's memory mana...

2018-08-10 17:16:48 344

原创 菜鸟的Spark 源码学习之路 -5 Executor源码

前面几篇文章DAGScheduler -1DAGScheduler -2DAGScheduler -3对DagScheduler的源码进行了学习。本篇开始,将对Spark的Task执行组件Executor进行学习。1.结构概览首先我们看一下Executor包中都有哪些类和对象:不是非常地复杂。接下来进入正题,看下Executor的内部结构,同样是包含Execut...

2018-08-10 15:56:41 591

原创 菜鸟的Spark 源码学习之路 -4 DAGScheduler源码 - part3

上文中,DAGScheduler-02我们了解到DagScheduler的Job提交和管理。接下来我们看一下DAGSCheduler中的一个重要的组件:DAGSchedulerEventProcessLoop,它是处理消息的组件。之前我们看到,Job和task等的提交、管理过程很多都是调用该组件的post方法发送一个event。我们先看一下DAGScheduler 里面它的定义和初始化:...

2018-08-10 11:28:50 343

原创 菜鸟的Spark 源码学习之路 -4 DAGScheduler源码 - part2

上文中分析了DAGScheduler的基本功能Dagscheduler-1,本文主要深入分析一下Job提交和相关处理。首先看一下相关的方法和数据结构:这些结构大多都是HashMap。1. Job的提交过程首先是在SparkContext.submitJob提交job,调用的是dagScheduler.submitJob方法/** * Submit a job for ...

2018-08-09 18:25:12 173

原创 菜鸟的Spark 源码学习之路 -4 DAGScheduler源码 - part1

前面的几篇文章中,我们深入理解的taskScheduler的task提交,管理,资源的管理等,对TaskScheduler有了一个比较系统的了解:TaskSheduler part1TaskSheduler part2TaskSheduler part3这次,我们回到SparkContext中,看一下Spark的另一个重要的组件,DAGScheduler。定义:@vola...

2018-08-09 15:50:51 209

原创 菜鸟的Spark 源码学习之路 -3 TaskScheduler源码 - part3

上一篇文中讲到TaskScheduler中的任务启动流程:https://blog.csdn.net/u012543819/article/details/81510632作者继续查看源码发现,TaskScheduler还有许多关于task管理, executor管理的东西,决定继续研究TaskScheduler如何对这些进行管理的。1. task 管理这里task执行结果处理主要有三...

2018-08-09 12:47:17 211

原创 菜鸟的Spark 源码学习之路 -3 TaskScheduler源码 - part2

上一篇文章里面 讲了TaskScheduler的主要初始化过程和任务提交 https://blog.csdn.net/u012543819/article/details/81484416这次我们将继续深入TaskScheduler源码,看它到底还有什么其他操作,如何启动任务。1. resourceOffers()方法源码:/** * Called by cluster ma...

2018-08-08 18:53:55 321

原创 菜鸟的Spark 源码学习之路 -3 TaskScheduler源码 - part1

上一篇文章里,我们解了SparkContext的源码:https://mp.csdn.net/postedit/81478344我们看到,里面有很多数据结构,其中一个就是TaskScheduler,顾名思义,它就是做任务调度用的。1. 源码概览找到TaskScheduler源码,我们先看一下它的结构和定义可以看到,TaskScheduler是一个trait,因此我们再看一下它的...

2018-08-08 16:07:15 275

原创 关于Ajax前端Success后接受不到数据的问题

$(function () { $("#query_task").click(function () { // console.log("button clicked"); var test = "232"; $.ajax( ...

2018-08-08 09:41:13 4515

原创 菜鸟的Spark 源码学习之路 -2 SparkContext源码

1.从哪里开始?我们可以看到spark examples模块下,有各种spark应用的示例代码。包括graphx,ml(机器学习),sql,streaming等等我们看一下最简单的SparkPi这个应用源码// scalastyle:off printlnpackage org.apache.spark.examplesimport scala.math.randomi...

2018-08-07 16:16:35 485

原创 菜鸟的Spark 源码学习之路 -1 环境搭建与项目导入

今天起打算开始学习Spark 源码,首先是搭建起Spark 源码的开发环境。目前使用idea进行开发,版本为Spark-2.3。作为一个菜鸟,希望能把这过程记录下来。1.环境搭建 基础环境配置 jdk+idea+maven+scala2.11。以上工具安装配置此处不再赘述。2.源码导入官网下载spark源码后解压到合适的项目目录下,打开idea,File->open 找到源码...

2018-08-07 11:04:50 1177

原创 spark-core编译错误 Cannot run program "bash": CreateProcess error=2, 系统找不到指定的文件。

尝试在idea 编译spark-core模块时报错如下:D:\DevTools\jdk1.8\bin\java.exe -Dmaven.multiModuleProjectDirectory=F:\IdeaWorkspace\spark-2.3.0\core -Dmaven.home=D:\DevTools\apache-maven-3.5.3 -Dclassworlds.conf=D:\De...

2018-08-06 18:17:17 4671 3

原创 关于定时任务ScheduledFuture get方法无法获取thread 的情况

thread = (ScheduledFuture<BaseThread>) future.get(10, TimeUnit.SECONDS);因业务需要,需要做定时任务。在打印日志的时候试图调用其返回的future的get方法获取对应的执行线程。然后总是卡在那一行代码。经过调试,该方法应该只能在任务运行时runtime阶段才能访问到对应的执行线程,非执行阶段无法获取。以此做...

2018-07-17 10:44:47 3919

原创 org.apache.spark.network.protocol.MessageWithHeader.touch(Ljava/lang/Object;)Lio/netty/util/Referenc

java.lang.AbstractMethodError: org.apache.spark.network.protocol.MessageWithHeader.touch(Ljava/lang/Object;)Lio/netty/util/ReferenceCounted; at io.netty.util.ReferenceCountUtil.touch(ReferenceCountUti...

2018-07-05 16:59:53 2260

原创 ClassLoader not found datanucleusXXXXX

<dependency>--> <!--<groupId>org.datanucleus</groupId>--> <!--<artifactId>datanucleus-core</artifactId>--> <!--<version&g

2018-07-05 10:03:07 206

原创 spring-boot项目启动报错无法启动嵌套的tomcat

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion>

2018-07-03 09:27:25 5507 1

kudu java 客户端demo

kudu的java 客户端完整实例代码,使用java连接kudu进行基础操作

2018-09-25

Alluxio java 客户端demo

一个简单的Alluxio java 客户端代码,包含文件创建,读取,删除等

2018-09-25

Jedis 操作Redis 集群demo

Jedis 操作Redis 集群demo,仅作参考

2017-01-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除