-
自定义SparkSQL数据源
问题描述需要对两张行和列都很多的表做 join ,并将 join 表持久化,生成一张中间表。下面用 A 表,B 表和 A-B 表来说明,其中A 表是10亿行200列的事实表,和 B 表是2亿行300列的维度表,A-B 为最终的left join 后持久化的中间表首先我们来梳理一下问题 A,B表数据行多列多,而且A,B数据分布在不同的机器 A-B表数据太多,而且 A-B表的 A 部分数据与 A 表原始数据相同,可以省去。 shuffle 过程中数据量太多,内存压力大。而且为了不重复存储...…
-
SparkSQL做Join问题汇总
问题描述需要对两张行和列都很多的表做 join ,并将 join 表持久化,生成一张中间表。下面用 A 表,B 表和 A-B 表来说明,其中A 表是10亿行200列的事实表,和 B 表是2亿行300列的维度表,A-B 为最终的left join 后持久化的中间表首先我们来梳理一下问题 A,B表数据行多列多,而且A,B数据分布在不同的机器 A-B表数据太多,而且 A-B表的 A 部分数据与 A 表原始数据相同,可以省去。 shuffle 过程中数据量太多,内存压力大。而且为了不重复存储...…
-
分布式大表Join优化
问题描述需要对两张行和列都很多的表做 join ,并将 join 表持久化,生成一张中间表。下面用 A 表,B 表和 A-B 表来说明,其中A 表是10亿行200列的事实表,和 B 表是2亿行300列的维度表,A-B 为最终的left join 后持久化的中间表首先我们来梳理一下问题 A,B表数据行多列多,而且A,B数据分布在不同的机器 A-B表数据太多,而且 A-B表的 A 部分数据与 A 表原始数据相同,可以省去。 shuffle 过程中数据量太多,内存压力大。而且为了不重复存储...…
-
分布式大表Join
在数据分布在不同机器的场景下,join 计算一直是一个难点,因为 join 涉及到大量数据传输。从已有的 join 算法来看,如何减少数据传输是加快 join 的核心。sort merge join,hash join和broadcast join是目前常用的 join 方法。这些算法适用于不同的场景,能很大程度上加快 join 的速度。但是对于列多的大表情况下,生成中间表并持久化就显得力不从心。场景描述需要对两张行和列都很多的表做 join ,并将 join 表持久化,生成一张中间表。下...…
-
Memory-Mapped Files(MMAP)的深入探讨
关于Memory-Mapped文件的问题,问题多集中在在于unmap。官方有个05年至今还是Open状态的bug(参考1),说的就是unmap方法,其中有个回复说在JDK10中会解决,所有非常期待JDK10。对于mmap的使用至今没有找到一个来源可靠的资料,能给个大概的使用。网上对于java的MMAP文件使用资料不多,而且有大量今天看来是错误使用的。官方的API中对于mmap文件的使用,并未提供任何的unmap方法。对此给出的解释(参考1)和猜测的是一样的,还没有办法给出一个安全高效的un...…
-
Allxuio之UFS数据读取
Client读取UFS的数据首先在《Alluxio的FileInStream记录》一文中将Local模式的介绍了一遍。但是有个疑问:如果文件是写在UFS(底层文件存储)上的话,那么文件改如何读取呢?开始我以为会像Local模式一样,通过NIO的MappedByteBuffer读取UFS上的文件,并且同时cache到Mem中。再仔细看完代码后,发现事实并非如此,在FileInStream中,只要是非Local模式的,都会通过Netty走网络,即使是在本机的UFS上面也是如此。主要是Local...…
-
alluxio的Worker之文件读取
这个系列,从一个场景作为突破口,最后再从整体来看一遍。首先在《Alluxio的FileInStream记录》一文中将Local模式的介绍了一遍。但是有个疑问:如果文件是写在UFS(底层文件存储)上的话,那么文件改如何读取呢?开始我以为会像Local模式一样,通过NIO的MappedByteBuffer读取UFS上的文件,并且同时cache到Mem中。再仔细看完代码后,发现事实并非如此,在FileInStream中,只要是非Local模式的,都会通过Netty走网络,即使是在本机的UFS上面...…
-
JAVA线程故事●线程安全
我计划将线程安全相关问题用一个系列来记录一下。其中包括线程安全,Java内存模型,对象共享,显示锁代码分析。这里偏重于记录核心概念股。首先给出参考内容 Chapter 17. Threads and Locks Java并发编程实战 深入理解Java虚拟机什么是线程安全对线程并行有一定了解的,肯定会有一个关于线程安全的概念。例如:多线程情况下程序执行无需额外动作,线程切换不会出现异常等等,诸如此类的理解。这些描述都没错,却不够精准,更没有指导意义,所以能算是定义。精准的线程安全的定义...…
-
备忘录-SPARK源码
#备忘录 SPARK源码两种构建方法,分别是maven和sbt。这里采用maven。我的环境是 macOS Sierra maven 3.5.0 scala 2.11 spark code 2.3.0 jdk8 Idea 2017scala,java和maven首先肯定要安装好,详细安装步骤网上很多资料。下面所有操作都是在Idea中完成基本流程 点击[File]->[Open]选择你的spark跟路径。或者在控制台中cd到跟路径下执行[mvn idea:idea],然后...…
-
Alluxio的FileInStream
为了方便以后更新Alluxio的client,所以把FileInStream的相关结构记录,以下记录基于alluxio-client-fs-1.6.1,主要关注于Local的Block。如果希望对自己有帮助,您需要对Alluxio整体结构,NIO的DirectByteBuffer有一个基本了解。整体结构一个完整FileInStream中最重要的是mCurrentBlockInStream的属性,其类型为BlockInStream,负责从块中读取数据。而一个Block中被划分为多个定长的Pa...…