Apache Spark

调优 | Apache Hudi应用调优指南

与世无争的帅哥 提交于 2020-08-17 18:32:16
通过Spark作业将数据写入Hudi时,Spark应用的调优技巧也适用于此。如果要提高性能或可靠性,请牢记以下几点。 输入并行性: Hudi对输入进行分区默认并发度为1500,以确保每个Spark分区都在2GB的限制内(在Spark2.4.0版本之后去除了该限制),如果有更大的输入,则相应地进行调整。我们建议设置shuffle的并发度,配置项为 hoodie.[insert|upsert|bulkinsert].shuffle.parallelism ,以使其至少达到input_data_size/500MB。 Off-heap(堆外)内存: Hudi写入parquet文件,需要使用一定的堆外内存,如果遇到此类故障,请考虑设置类似 spark.yarn.executor.memoryOverhead 或 spark.yarn.driver.memoryOverhead 的值。 Spark 内存: 通常Hudi需要能够将单个文件读入内存以执行合并或压缩操作,因此执行程序的内存应足以容纳此文件。另外,Hudi会缓存输入数据以便能够智能地放置数据,因此预留一些 spark.memory.storageFraction 通常有助于提高性能。 调整文件大小: 设置 limitFileSize 以平衡接收/写入延迟与文件数量,并平衡与文件数据相关的元数据开销。 时间序列/日志数据:

4 SparkCore

久未见 提交于 2020-08-17 17:33:35
SparkCore 0 主要内容 SparkCore的核心内容主要讲的就是 SparkCore的三大数据结构 : 1 RDD:分布式数据集 2 广播变量:分布式只读共享变量 3 累加器:分布式只写共享变量 1 RDD 1.1 RDD定义 RDD ( Resilient Distributed Dataset )叫做 弹性分布式数据集 ,是 Spark 中最基本的数据(逻辑计算)抽象。代码中是一个抽象类,它代表一个 不可变 、 可分区 、里面的元素可并行计算的 集合 ; RDD作为一个集合,内部存储的并不是数据,而是 计算的逻辑 ; 定义中几个方面的理解: 1 数据集 :存储的是计算的逻辑; 2 分布式 :数据的来源 & 计算 & 数据的存储; 3 弹性(灵活、可变性): 血缘(依赖关系):Spark可以通过特殊的处理方案简化依赖关系; 计算:Spark的计算是基于内存的,所以性能特别高,同时可以和磁盘灵活切换; 分区:Spark在创建默认分区后,可以通过指定的算子来改变分区数量; 容错:Spark在执行计算时,如果发生了错误,需要进行容错重试处理; 4 Spark中的数量: Executor:可以通过提交应用的参数进行设定; partition: 默认情况下,读取文件采用的是Hadoop的切片规则,如果读取内存中的数据,可以根据特定的算法进行设定,可以通过其他算子进行改变;

Spark之Spark Session、Dataframe、Dataset

风流意气都作罢 提交于 2020-08-17 15:52:38
Spark SQL简介 Spark SQL架构: Spark SQL是Spark的核心组件之一(2014.4 Spark1.0) 能够直接访问现存的Hive数据 提供JDBC/ODBC接口供第三方工具借助Spark进行数据处理 提供了更高层级的接口方便地处理数据 支持多种操作方式:SQL、API编程 支持多种外部数据源:Parquet、JSON、RDBMS等 Spark SQL是Spark的一个模块,主要用于处理结构化的数据。与基础的Spark RDD API不同的是,Spark SQL的接口会向提供更多的信息,包括数据结构以及要执行的计算操作等。在Spark SQL内部,会使用这些信息执行一些额外的优化。使用Spark SQL有两种方式,包括SQL语句以及Dataset API。 但是在计算的时候,无论你是用哪种接口去进行计算,它们使用的底层执行引擎是完全一模一样的。这种底层执行机制的统一,就意味着我们可以在不同的方式之间任意来回切换,只要我们可以灵活地运用不同的方式来最自然地表达我们要执行的计算操作就可以了。 对其中SQL的解释 Spark SQL的一个主要的功能就是执行SQL查询语句。Spark 2.0开始,最大的一个改变,就是支持了SQL 2003标准语法,还有就是支持子查询。 Spark SQL也可以用来从Hive中查询数据

论RDD、DataSet、DataFrame关系及优劣

。_饼干妹妹 提交于 2020-08-17 15:51:45
前面已经给大家深入的讲解过RDD、DataSet、DataFrame的概念已经用法,那么到底这三者有什么关联呢?各自都有什么优劣?带着这这样的问题,今天小编就给大家详细的概述下。 在spark中,基本每次都会用到这三个类型,因为这是spark最常用的数据类型。 相同点 1、RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利 2、三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action算子如foreach时,三者才会开始遍历运算,极端情况下,如果代码里面有创建、转换,但是后面没有在Action中使用对应的结果,在执行时会被直接跳过,比如: val conf = new SparkConf ( ) . setMaster ( "local[*]" ) . setAppName ( "test" ) . set ( "spark.port.maxRetries" , "1000" ) val sc = SparkContext . getOrCreate ( conf ) 或者 val spark = SparkSession . builder ( ) . master ( "local[*]" ) . appName ( "test02" ) . getOrCreate ( ) val sc =

AI 时代,还不了解大数据?

寵の児 提交于 2020-08-17 12:25:23
如果要问最近几年,IT行业哪个技术方向最火?一定属于ABC,即AI + Big Data + Cloud,也就是人工智能、大数据和云计算。 这几年,随着互联网大潮走向低谷,同时传统企业纷纷进行数字化转型,基本各个公司都在考虑如何进一步挖掘数据价值,提高企业的运营效率。在这种趋势下,大数据技术越来越重要。所以,AI时代,还不了解大数据就真的OUT了! 相比较AI和云计算,大数据的技术门槛更低一些,而且跟业务的相关性更大。我个人感觉再过几年,大数据技术将会像当前的分布式技术一样,变成一项基本的技能要求。 前几天,我在团队内进行了一次大数据的技术分享,重点是对大数据知识做一次扫盲,同时提供一份学习指南。这篇文章,我基于分享的内容再做一次系统性整理,希望对大数据方向感兴趣的同学有所帮助,内容分成以下5个部分: 1、大数据的发展历史 2、大数据的核心概念 3、大数据平台的通用架构和技术体系 4、大数据的通用处理流程 5、大数据下的数仓体系架构 01 大数据的发展历史 在解释「大数据」这个概念之前,先带大家了解下大数据将近30年的发展历史,共经历了5个阶段。那在每个阶段中,大数据的历史定位是怎样的?又遇到了哪些痛点呢? 1.1 启蒙阶段:数据仓库的出现 20世纪90年代,商业智能(也就是我们熟悉的BI系统)诞生,它将企业已有的业务数据转化成为知识,帮助老板们进行经营决策。比如零售场景中

基于 Embedding 算法的数据安全输出方案详解

我的未来我决定 提交于 2020-08-17 08:59:24
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 传统的数据开放共享方式,很多是将原始数据以明文的方式直接输出,这样在数据安全和隐私保护方面存在显著风险,不符合日益完善的法律法规要求,也越来越不能满足当今数据体量、规模日益庞大而复杂的应用需求。另外,也存在加工为标签类的数据再进行输出的方式,但通常存在信息漏损,使用这类数据进行建模,效果大打折扣。 经过实践,TalkingData 借助机器学习技术探索出一套新的方案,通过对原始数据进行分布式的隐含表征提取计算(一种数据变换方式),再将变换后的数据用于开放共享,既可以满足数据输出的安全性要求,又提升了大数据输出的处理速度。该数据输出方式主要基于机器学习的分布式 embedding 算法(嵌入算法)。Embedding 算法是一系列算法的统称,该类算法能够对原始数据进行变换,并挖掘其中的潜在关联。Embedding 算法处理后的数据由于信息漏损较少,相对标签数据有更好的建模效果,被广泛用于推荐系统、自然语言处理等领域。 TalkingData 将该类算法应用到数据安全输出领域,使得原始数据在经过变换后,能够以不具备可识别性的方式输出,而数据获取方无法从中提取到与个人身份相关的敏感信息,也就实现了对隐私数据的匿名化保护。 基于保护用户隐私

Spark中Broadcast的理解

眉间皱痕 提交于 2020-08-17 08:25:06
广播变量 应用场景:在提交作业后,task在执行的过程中, 有一个或多个值需要在计算的过程中多次从Driver端拿取时,此时会必然会发生大量的网络IO, 这时,最好用广播变量的方式,将Driver端的变量的值事先广播到每一个Worker端, 以后再计算过程中只需要从本地拿取该值即可,避免网络IO,提高计算效率。 广播变量在广播的时候,将Driver端的变量广播到每一个每一个Worker端,一个Worker端会收到一份仅一份该变量的值 注意:广播的值必须是一个确切的值,不能广播RDD(因为RDD是一个数据的描述,没有拿到确切的值), 如果想要广播RDD对应的值,需要将该RDD对应的数据获取到Driver端然后再进行广播。 广播的数据是不可改变的。 广播变量的数据不可太大,如果太大,会在Executor占用大量的缓存,相对于计算的时候的缓存就少很多。 来源: oschina 链接: https://my.oschina.net/u/4409432/blog/4274969

Kafka简介

帅比萌擦擦* 提交于 2020-08-16 19:10:51
Kafka Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。 1.介绍 消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从Kafka文件存储机制和物理结构角度,分析Kafka是如何实现高效文件存储,及实际应用效果。 1.1 Kafka的特性: 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。 可扩展性:kafka集群支持热扩展 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败) 高并发:支持数千个客户端同时读写 1.2 Kafka的使用场景: 日志收集:一个公司可以用Kafka可以收集各种服务的log

Spark读取Mysql,Redis,Hbase数据(一)

谁说我不能喝 提交于 2020-08-16 13:21:31
1、读取Mysql数据 object JdbcRddDemo { def getConn() = { Class.forName( "com.mysql.jdbc.Driver" ).newInstance() DriverManager.getConnection( "jdbc:mysql://hadoop000:3306/hive", "root", "root" ) } def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setAppName("jdbcRdd").setMaster("local[*]" ) val sc = new SparkContext(sparkConf) val jdbcRDD = new JdbcRDD( sc, getConn, "select * from TBLS where TBL_ID >= ? and TBL_ID <= ?" , 1 , 10 , 2 , rs => { val id = rs.getInt(1 ) val name = rs.getString(2 ) val age = rs.getInt(3 ) (id,name,age) } ) jdbcRDD.collect().toBuffer } } 来源: oschina 链接

SparkSQL 核心编程

蓝咒 提交于 2020-08-16 07:17:33
文章目录 SparkSQL 核心编程 新的起点 DataFrame 创建DataFrame 从Spark数据源进行创建 从RDD进行转换 从Hive Table进行查询返回 SQL语法 DSL语法 RDD转换为DataFrame DataFrame转换为RDD DataSet 创建DataSet RDD转换为DataSet DataSet转换为RDD DataFrame和DataSet转换 RDD,DataFrame,DataSet 三者的关系 三者的共性 三者的区别 三者的互相转换 IDEA开发SparkSQL 用户自定义函数 UDF UDAF 弱类型 - DataFrame 强类型 - DataSet 数据的加载和保存 通用的加载和保存方式 加载数据 保存数据 Parquet 加载数据 保存数据 JSON CSV MySQL 导入依赖 读取数据 写入数据 Hive 内嵌的HIVE 外部的HIVE 运行Spark SQL CLI 代码操作Hive SparkSQL 核心编程 新的起点 Spark Core中,如果想要执行应用程序,需要首先构建上下文环境对象 SparkContext ,Spark SQL其实可以理解为对Spark Core的一种封装,不仅仅在模型上进行了封装,上下文环境对象也进行了封装。 在老的版本中,SparkSQL提供两种SQL查询起始点