Apache Spark

Flink 1.11 与 Hive 批流一体数仓实践

对着背影说爱祢 提交于 2020-11-18 17:47:41
导读:Flink 从 1.9.0 开始提供与 Hive 集成的功能,随着几个版本的迭代,在最新的 Flink 1.11 中,与 Hive 集成的功能进一步深化,并且开始尝试将流计算场景与Hive 进行整合。 本文主要分享在 Flink 1.11 中对接 Hive 的新特性,以及如何利用 Flink 对 Hive 数仓进行实时化改造,从而实现批流一体的目标。主要内容包括: · Flink 与 Hive 集成的背景介绍 · Flink 1.11中的新特性 · 打造 Hive 批流一体数仓 一、 Flink 与 Hive 集成背景 为什么要做 Flink 和 Hive 集成的功能呢?最早的初衷是我们希望挖掘 Flink 在批处理方面的能力。众所周知,Flink 在流计算方面已经是成功的引擎了,使用的用户也非常多。在 Flink 的设计理念当中,批计算是流处理中的一个特例。也就意味着,如果 Flink 在流计算方面做好,其实它的架构也能很好的支持批计算的场景。在批计算的场景中,SQL 是一个很重要的切入点。因为做数据分析的同学,他们更习惯使用SQL 进行开发,而不是去写 DataStream 或者 DataSet 这样的程序。 Hadoop 生态圈的 SQL 引擎,Hive 是一个事实上的标准。大部分的用户环境中都会使用到了 Hive 的一些功能,来搭建数仓。一些比较新的 SQL 的引擎

window下Sparksql 无法获取文件权限问题

删除回忆录丶 提交于 2020-11-17 13:46:31
Caused by: java.lang.RuntimeException: Error while running command to get file permissions : java.io.IOException: (null) entry in command string: null ls -F D:\tmp\hive Caused by: java.lang.RuntimeException: Error while running command to get file permissions : java.io.IOException: (null) entry in command string: null ls -F D:\tmp\hive at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:762) at org.apache.hadoop.util.Shell.execCommand(Shell.java:859) at org.apache.hadoop.util.Shell.execCommand(Shell.java:842) at org.apache.hadoop.fs.FileUtil.execCommand(FileUtil.java:1097)

过滤Spark数据集的四种方法

泄露秘密 提交于 2020-11-17 03:48:36
在实际工作中,根据某个字段,对一个Spark数据集进行过滤,是一个很常见的场景,举个例子: 一个存储公司员工信息的数据集A,有以下三个字段: id: Integer name: String age: Integer 现在要过滤出某些员工的id,这些id在B集合(B可能是哈希表,也可能是Spark数据集)中,过滤逻辑为: C = A.filter(A.id in B) 有四种方法可以实现,分别为: Filter Map MapPartition Inner Join 下面是详细介绍。 Filter Spark的Filter变换,可以根据条件表达式、返回布尔值的过滤函数、条件字符串,对数据集进行过滤,使用方法如下: // 1. 条件表达式 A1 = A .filter( Column condition) // 2. 自定义过滤函数 A1 = A .filter( FilterFunction < T > func) // 3. 条件字符串 A1 = A .filter( String condition) Filter 变换比较简单,逐条处理记录不论数据集大小,效率都很高,但需要能够将用来过滤的数据集B广播到所有的executor上。 Map Map变换,对数据集中每条记录调用一个函数,返回值可以是null,也可以是相同类型或不同类型的新记录,使用方法如下: //

Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理)

浪尽此生 提交于 2020-11-15 19:12:19
Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) 参考文章: (1)Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理) (2)https://www.cnblogs.com/shenh062326/p/5251717.html 备忘一下。 来源: oschina 链接: https://my.oschina.net/u/4437884/blog/4718178

大厂高频面试题-连续登录问题

梦想的初衷 提交于 2020-11-14 04:02:13
1 背景 对于数据开发人员来说,手写sql是比较熟悉的了,就有这样一道题,面试时需要手写sql,这就是非常经典的连续登录问题,大厂小厂都爱问,这种题说简单也不简单,说难也不难,关键是要有思路。 2 真题 hql统计连续登陆的三天及以上的用户 这个问题可以扩展到很多相似的问题:连续几个月充值会员、连续天数有商品卖出、连续打车、连续逾期。 数据提供 用户ID、登入日期 user01,2018-02-28 user01,2018-03-01 user01,2018-03-02 user01,2018-03-04 user01,2018-03-05 user01,2018-03-06 user01,2018-03-07 user02,2018-03-01 user02,2018-03-02 user02,2018-03-03 user02,2018-03-06 输出字段 +---------+--------+-------------+-------------+--+ | uid | times | start_date | end_date | +---------+--------+-------------+-------------+--+ 3 群内讨论 这道题在群里发出后,大家就展开了激烈的讨论: 4 解决方案 可以看出来,有很多种不同的解决方案。

面试|spark刷爆磁盘与java弱引用的关系

删除回忆录丶 提交于 2020-11-13 11:46:25
一 引用基本概念 如下面,定义两个变量num,str,存储模型大致如下图: int num = 6; String str = “浪尖聊大数据”; 变量num值直接从6修改为了8;变量str只是修改了其保存的地址,从0x88修改为0x86,对象 “浪尖聊大数据 ”本身还在内存中,并没有被修改。只是内存中新增了对象 “浪尖是帅哥”。 二 值传递&引用传递 举例说明引用传递和值传递: 第一个栗子:基本类型 void foo(int value) { value = 88; } foo(num); // num 没有被改变 第二个栗子:没有提供改变自身方法的引用类型 void foo(String text) { text = "mac"; } foo(str); // str 也没有被改变 第三个栗子:提供了改变自身方法的引用类型 StringBuilder sb = new StringBuilder("vivo"); void foo(StringBuilder builder) { builder.append("5"); } foo(sb); // sb 被改变了,变成了"vivo5"。 第四个栗子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。 StringBuilder sb = new StringBuilder("oppo"); void foo

857页Alibaba“Java学习进阶笔记”开源!分布式/微服务/Spring框架/JVM/数据结构与算法啥都有

做~自己de王妃 提交于 2020-11-13 11:36:26
笔记作者: 来自于阿里P8级架构师: Mark 笔记特点: 条理清晰,含图像化表示更加易懂。 内容概要: 包括 Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大厂面试题等、等技术栈! 由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。 即可免费获取 JAVA集合 接口继承关系和实现 List ArrayList(数组) Vector(数组实现、线程同步) LinkList(链表) Set HashSet(Hash表) TreeSet(二叉树) JVM JVM就是java虚拟机,它是一个虚构出来的计算机,可在实际的计算机上模拟各种计算机的功能。JVM有自己完善的硬件结构,例如处理器、堆栈和寄存器等,还具有相应的指令系统。 线程 JVM内存区域 JVM运行时内存 垃圾回收与算法 JAVA 四种引用类型 GC分代收集算法 VS 分区收集算法 GC垃圾收集器 JAVA IO/NIO JVM 类加载机制 JAVA多线程并发 JAVA并发知识库 JAVA线程实现/创建方式 4种线程池 线程生命周期(状态) 终止线程4种方式

Spark之reduceByKey与groupByKey

家住魔仙堡 提交于 2020-11-13 02:24:52
word.txt hello spark word hello scala spark hi java flink hi hello kafka hello kafka spark flink spark package com.wedoctor.sparkcore import org.apache.log4j.{Level, Logger} import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object WordCount { Logger.getLogger( "org" ).setLevel(Level.ERROR) def main(args: Array[String]): Unit = { val conf: SparkConf = new SparkConf() .setMaster( "local[*]" ) .setAppName( this .getClass.getSimpleName) val sc: SparkContext = new SparkContext(conf) val lineData: RDD[String] = sc.textFile( "d://word.txt" ) val value: RDD[String] =

Spark入门(五)--Spark的reduce和reduceByKey

佐手、 提交于 2020-11-13 01:56:50
reduce和reduceByKey的区别 reduce和reduceByKey是spark中使用地非常频繁的,在 字数统计 中,可以看到reduceByKey的经典使用。那么reduce和reduceBykey的区别在哪呢? reduce 处理数据时有着一对一的特性,而 reduceByKey 则有着多对一的特性。比如reduce中会把数据集合中每一个元素都处理一次,并且每一个元素都对应着一个输出。而reduceByKey则不同,它会把所有key相同的值处理并且进行归并,其中归并的方法可以自己定义。 例子 在单词统计中,我们采用的就是reduceByKey,对于每一个单词我们设置成一个键值对(key,value),我们把单词作为key,即key=word,而value=1,因为遍历过程中,每个单词的出现一次,则标注1。那么reduceByKey则会把key相同的进行归并,然后根据我们定义的归并方法即对value进行累加处理,最后得到每个单词出现的次数。而reduce则没有相同Key归并的操作,而是将所有值统一归并,一并处理。 spark的reduce 我们采用scala来求得一个数据集中所有数值的平均值。该数据集包含5000个数值,数据集以及下列的代码均可从 github 下载,数据集名称为"avg"。为求得这个数据集中的平均值,我们先用map对文本数据进行处理

使用 Iceberg on Kubernetes 打造新一代云原生数据湖

大城市里の小女人 提交于 2020-11-11 19:49:30
背景 大数据发展至今,按照 Google 2003年发布的《The Google File System》第一篇论文算起,已走过17个年头。可惜的是 Google 当时并没有开源其技术,“仅仅”是发表了三篇技术论文。所以回头看,只能算是揭开了大数据时代的帷幕。随着 Hadoop 的诞生,大数据进入了高速发展的时代,大数据的红利及商业价值也不断被释放。现今大数据存储和处理需求越来越多样化,在后 Hadoop 时代,如何构建一个统一的数据湖存储,并在其上进行多种形式的数据分析,成了企业构建大数据生态的一个重要方向。怎样快速、一致、原子性地在数据湖存储上构建起 Data Pipeline,成了亟待解决的问题。并且伴随云原生时代到来,云原生天生具有的自动化部署和交付能力也正催化这一过程。本文就主要介绍如何利用 Iceberg 与 Kubernetes 打造新一代云原生数据湖。 何为 Iceberg Apache Iceberg is an open table format for huge analytic datasets. Iceberg adds tables to Presto and Spark that use a high-performance format that works just like a SQL table. Apache Iceberg 是由