
Spark
文章平均质量分 93
breeze_lsw
打杂工程师
展开
-
Spark withColumn 陷阱
withColumn / withColumnRenamed 是 spark 中常用的 API,可以用于添加新字段 / 字段重命名 / 修改字段类型,但是当列的数量增加时,会出现严重的性能下降现象,本文将分析出现该现象的原因以及该如何解决原创 2020-04-27 23:43:41 · 10061 阅读 · 0 评论 -
大数据平台资源治理经验总结
文章目录背景组件HDFS为什么需要治理为什么难以推动需要做什么部分效果图SPARK & YARN为什么需要治理需要做什么部分效果图计费后记背景大数据平台早期是野蛮生长的,任务直接在终端提交运行,处于一种完全无管理的自由状态。在17年上线了内部的大数据平台后,用户开始逐渐在平台上进行数据管理,代码编写,作业管理等工作,但是资源治理依旧缺失。随着业务及数据量的不断增加,集群扩容,存储和计...原创 2020-04-23 14:27:15 · 2728 阅读 · 0 评论 -
不通过 Spark 获取 Delta Lake Snapshot
Delta Lake 进行数据删除或更新操作时实际上只是对删除数据文件进行了一个 remove 标记,在进行 vacuum 前并不会进行物理删除,因此一些例如在 web 上获取元数据或进行部分数据展示的操作如果直接从表路径下获取 parquet 文件信息,读到的可能是历史已经被标记删除的数据。原创 2020-04-22 11:49:04 · 613 阅读 · 0 评论 -
Delta Lake 分区表覆盖写入操作
Delta Lake当前版本(0.5)只支持API操作的,但是实现 Insert SQL 语法也不难,可以参考 Delta Lake 平台化实践(离线篇),需要注意的是 Delta Lake 中的分区表覆盖写入操作。原创 2020-03-26 00:18:07 · 1746 阅读 · 0 评论 -
Delta Presto Integration & Manifests 机制
Delta Lake 在 0.5 之前只支持通过 Spark 读取数据,在新版本中增加了其他处理引擎通过 manifest 文件访问 Delta Lake 的能力。下文以Presto 为例说明如何通过 manifest 文件访问数据,manifest 文件的生成及其一些限制。原创 2019-12-17 11:46:18 · 1634 阅读 · 0 评论 -
Delta Lake 平台化实践(离线篇)
Delta Lake 是什么?简单的说就是为大数据场景添加了事务功能,并且支持了 update/delete/merge into 等功能, Delta Lake 初探。要将 Delta Lake 与 spark2.4 sql 以及大数据平台打通还是有一些工作需要去做,下文是在该过程中的一些实践及思考。目录SQL 支持DMLQueryInsert平台化工作浏览 delta 数据元数据兼容碎...原创 2019-12-15 21:18:26 · 2973 阅读 · 1 评论 -
Spark 小文件合并优化实践
对 spark 任务数据落地(HDFS) 碎片文件过多的问题的优化实践及思考。原创 2019-10-24 11:04:37 · 8413 阅读 · 4 评论 -
scala 并行集合在spark中的应用
一.scala并行集合现在有一个集合,对它的每个元素进行处理,比如: val arr = List[String]("a","b","c") arr.foreach(println(_))//输出结果: abc//并行集合 arr.par.foreach(println(_))//输出结果: acb观察线程 println((0 to 1000).map{r原创 2015-11-12 00:40:21 · 5485 阅读 · 0 评论 -
spark on yarn部署
软件版本 * spark 2.0.2 * 2.6.0-cdh5.9.0一.配置下载spark2.0.2的源码后在根目录进行编译dev/make-distribution.sh \-Phive -Phive-thriftserver \-Dhadoop.version=2.6.0-cdh5.9.0 \-Dyarn.version=2.6.0-cdh5.9.0 \--tgz -Pyarn 可原创 2017-02-09 18:15:23 · 8680 阅读 · 0 评论 -
网络原因造成 spark task 卡住
主机名映射出错背景:Yarn集群新加入了一批Spark机器后发现运行Spark任务时,一些task会无限卡住且driver端没有任何提示。解决:进入task卡住的节点查看container stderr日志,发现在获取其他节点block信息时,连接不上其他的机器节点,不停重试。 怀疑部分旧节点的/etc/hosts文件被运维更新漏了,查看/etc/hosts,发现没有加入新节点的地址,加入后问原创 2017-05-10 00:36:47 · 4291 阅读 · 0 评论 -
Spark排错与优化
一. 运维1. Master挂掉,standby重启也失效Master默认使用512M内存,当集群中运行的任务特别多时,就会挂掉,原因是master会读取每个task的event log日志去生成spark ui,内存不足自然会OOM,可以在master的运行日志中看到,通过HA启动的master自然也会因为这个原因失败。解决增加Master的内存占用,在Master节点...原创 2015-10-15 17:08:36 · 86360 阅读 · 13 评论 -
phoenix for cloudera
phoenix for cloudera软件版本:spark 2.0.2cdh 5.9phoenix 4.9 (phoenix-spark模块使用4.11)下载CDH版本的phoenix,最新版本目前只有phoenix 4.9,不过在4.10开始才可以使用spark2.0: PHOENIX-3333 这里将phoenix-spark模块换成了4.11的。相应修改根目录pom的配置。git c原创 2017-07-17 01:31:54 · 2711 阅读 · 0 评论 -
spark 应用输出debug日志
问题:yarn container 大量输出debug日志 –> 磁盘写满 –> nodemanager 识别该盘为bad disk -> 停止服务 -> spark task lost 。container stdout:排错过程:查看log4j文件,查看yarn log 级别, 发现均为正常。发现driver,executor日志输出表现不一致(driver成功加载,executor表现和配原创 2017-09-25 14:01:04 · 5637 阅读 · 0 评论 -
Zeppelin 0.6.2 使用spark2.x 的一些错误处理
zeppelin 从 0.6.1 开始支持 spark2.x ,从0.6.2编译时引入了hadoop-common包用于权限认证,所以会存在一些包冲突导致异常的问题。编译错误zeppelin-web编译错误Failed to execute goal com.github.eirslett:frontend-maven-plugin:0.0.25:grunt (grunt test) on pro原创 2016-12-20 20:28:18 · 3407 阅读 · 0 评论 -
Spark kyro Serialization
序列化在分布式系统中扮演着重要的角色,优化Spark程序时,首当其冲的就是对序列化方式的优化。Spark为使用者提供两种序列化方式: Java serialization: 默认的序列化方式。 Kryo serialization: 相较于 Java serialization 的方式,速度更快,空间占用更小,但并不支持所有的序列化格式,同时使用的时候需要注册class。spar原创 2016-03-11 16:07:22 · 6335 阅读 · 1 评论 -
spark standalone 读取 HDFS 数据本地性异常
spark读取hdfs数据Locality问题一.问题描述在分布式计算中,要做的是移动计算而不是移动数据,所以数据本地性尤其重要,然而我在spark任务中发现所有的任务的locality都是ANY,说明所有的数据都是走的网络IO,因为每台spark节点上同时也有hdfs的datanode,所以这很不正常。并且可以看到在没有没有shuffle的情况下,仅在数据读取阶段网络IO占用都很严重,可以看下ga原创 2015-09-24 15:05:06 · 3015 阅读 · 3 评论 -
将代码从 spark 1.x 移植到 spark 2.x
将代码从 spark 1.x 移植到 spark 2.x1. SparkSessionsparkSession可以视为sqlContext和hiveContext以及StreamingContext的结合体,这些Context的API都可以通过sparkSession使用。创建SparkSessionval spark = SparkSession.builder .master("loca原创 2016-09-09 17:46:41 · 5366 阅读 · 0 评论 -
Spark不同Cluster Manager下的数据本地性表现
一. 概述Spark中的数据本地性分为两种executor 层面的数据本地性task 层面的数据本地性在两种本地性中,task层面的数据本地性是由Spark本身决定的,而executor的分发则是Cluter Manager控制的,因此下文主要描述在不同Cluster Manager中的executor分发机制。Spark Standalone Standalone提供了两种executo原创 2016-08-15 23:33:30 · 3410 阅读 · 0 评论 -
Spark on Mesos cluster mode
cluster modespark cluster mode指的是将driver运行在cluster而不是client中。可以使用surpervise机制,指的是driver会自动的进行失败重试。mesos-dispatcher如果要在mesos中使用cluster模式,必须先开启mesos-dispatcher服务。启动mesos-dispatchersudo -u admin /usr/inst原创 2016-08-25 16:00:55 · 1307 阅读 · 0 评论 -
Spark & Zeppelin
zeppelin 为交互式分析查询提供了可视化界面。 在zeppelin上使用spark NoteBook,有spark和livy两种方式。软件版本zeppelin版本:从zeppelin-master编译(已发布0.6)spark版本: 1.6.2livy版本: livy 0.2.0编译部署zeppelingit clone https://github.com/apache/zeppelin.原创 2016-07-20 18:11:49 · 6628 阅读 · 4 评论 -
Spark & Livy
简介livy为Spark提供了REST接口,有如下特性: * 提供交互式shell * 批量提交 * 多用户使用用一个服务(用户模拟) * 可以从任何地方使用REST的方式提交 * 无需对代码进行任何修改获取源码,进行编译(如果编译不通过需使用vpn)git clone git@github.com:cloudera/livy.gitcd livy-mastermvn -Dspark.原创 2016-08-15 14:23:37 · 11833 阅读 · 0 评论 -
spark on mesos 两种运行模式
spark在mesos上有粗粒度(coarse-grained)和细粒度(fine-grained)两种运行模式。细粒度模式spark默认运行的就是细粒度模式,在这种模式下,spark和其他frameworks以非常细粒度的运行在同一个集群中,每个application可以根据任务运行的情况在运行过程中动态的获得更多或更少的资源(mesos动态资源分配),但是这会在每个task启动的时候增加一些额外原创 2015-07-28 14:27:19 · 4730 阅读 · 0 评论 -
Spark on Mesos部署
Spark on Mesos部署原创 2015-07-22 19:19:42 · 6020 阅读 · 0 评论 -
spark小技巧-mapPartitions
与map方法类似,map是对rdd中的每一个元素进行操作,而mapPartitions则是对rdd中的每个分区的迭代器进行操作。如果在map过程中需要频繁创建额外的对象(例如将rdd中的数据通过jdbc写入数据库,map需要为每个元素创建一个链接而mapPartition为每个partition创建一个链接),则mapPartitions效率比map高的多。Demo实现将每个数字变成原来的2倍的功能原创 2015-09-21 16:03:00 · 57925 阅读 · 6 评论 -
spark convert RDD[Map] to DataFrame
将RDD[Map[String,String]] 转化为展平 DataFrame,类似于pyspark 中 dict 结构toDF的效果。inputval mapRDD: RDD[Map[String, String]] = sc.parallelize(Seq( Map("name" -> "zhangsan", "age" -> "18", "addr" -> "bj"), Map(原创 2017-10-12 00:15:48 · 3505 阅读 · 3 评论 -
pypy on PySpark
什么是pypy 简单的说,pypy 基于jit静态编译,相比cpython 动态解释执行,因此执行速度上会更高效,同时减少了内存使用。http://pypy.org对三方包的支持一直是pypy的软肋,特别是一些科学计算包,不过在最新的 pypy5.9 中终于对Pandas和NumPy提供了支持。一个简单的例子: test1:import timet = time.time()i = 0原创 2017-11-15 00:50:09 · 1435 阅读 · 0 评论 -
spark range join 优化
背景 一张ip表,一张ip地理信息表,地理信息表每条数据包含了ip地址的起点和终点以及一些地理信息, 需要用 ip 去关联 gep_ip 中匹配相应的信息 。例如: 数据条数为 50 M 的表 ip_record,数据格式大致如下: ip_int info 123456789 xx 987654321 xx数据条数为 7 M 的...原创 2018-04-03 09:47:51 · 2145 阅读 · 0 评论 -
Spark 数据读取冷启动优化分析
Spark 读取数据冷启动 (在一个 Session 中第一次读取该数据) 时,会从文件系统中获取文件的一些元数据信息用于优化,如果一个目录下的文件过多,就会比较耗时(可能达到数十分钟),该逻辑在 InMemoryFieIndex 中实现。下文针对该过程进行分析。文章目录InMemoryFileIndexbefore spark 2.1after spark 2.1优化 HDFS 获取 F...原创 2019-05-27 18:35:53 · 2485 阅读 · 0 评论 -
Delta 初探
Delta Lake 初探Delta Lake在说 Delta Lake 之前,不得不说下近几年火热的 Data Lake ,Data Lake 的主要思想是将企业中的所有数据进行统一管理。例如基于 Hadoop 的 Data Lake 方案可以非常低成本的存储所有类型的数据,但是显而易见的,它只支持批量插入,用户读取时无法获取当前更新的数据,多用户写还可能会发生异常,数据并不是非常可靠。...原创 2019-04-29 01:01:00 · 6265 阅读 · 1 评论 -
使用 spark sql extensions 实现 skew join
文章目录背景实现方式原理用法语法编译&配置Test局限性参考背景使用 Join 时,如果出现数据倾斜就会导致OOM或者单task长时间执行的现象,如果是大小表关联的场景,还可以使用 MAPJOIN 的方式来解决,如果遇到两张大表目前还没有比较好的解决方案。实现方式使用spark sql extensions 的扩展功能,增加自定义 hint 在 sql parser 层对相关逻辑进...原创 2019-03-12 01:15:57 · 2518 阅读 · 1 评论 -
AMD & Intel 机器 Spark 性能测试2
文章目录硬件配置测试角色分配线上sql任务模拟使用 sysbench 对内存读写进行测试结果硬件配置接上篇文章 AMD & Intel 机器 Spark 性能测试共6台机器,每个对照组各三台。intel 5118 内存为6通道,双路为12通道amd 7401p 为8通道,如果用16*16G,则内存频率会下降到2133,带宽进一步降低,默认使用 Channel Interleav...原创 2019-01-24 15:52:37 · 762 阅读 · 0 评论 -
Alluxio 性能测试
文章目录背景为什么要引入 Alluxio读取数据的效率取决于哪些因素计算&存储分离混合部署分离部署测试环境测试理论性能提升ScanPresto测试结果TPC-DS测试结果总结背景HDFS数据读取延时不稳定,波动较大为什么要引入 Alluxio通过监控发现计算节点的物理内存有富余,不需要增加额外机器成本机器网卡较为空闲,瓶颈主要存在于磁盘IO热数据读取加速存储计算分离,提高数...原创 2019-01-03 13:28:32 · 3026 阅读 · 3 评论 -
spark-sql-perf
文章目录简介测试tpcds-kitspark-sql-perf生成数据执行查询查询结果TPC-DS简介spark-sql-perf 是一个 spark sql 性能测试框架,可以用来进行一些基准测试。测试环境:spark 2.4.0spark-sql-perf_2.11-0.5.0-SNAPSHOT测试tpcds-kit通过 tpcds-kit 生成 TPC-DS 数据。su...原创 2019-01-03 01:19:15 · 2737 阅读 · 0 评论 -
Mac pySpark IDE 环境配置
本地配置 pyspark 开发环境开发工具Javaspark-2.3.0-bin-2.6.0-cdh5.7.0PyCharm配置 PyCharmConfigurationRun -> Edit Configurations -> Configuration -> Environm原创 2018-12-13 22:59:21 · 1646 阅读 · 1 评论 -
使用 jvm-profiler 分析 spark 内存使用
文章目录背景jvm-profiler分析总结背景在生产环境中,为了提高任务提交的响应速度,我们研发了类似 Spark Jobserver 的服务,各种类型的 spark 任务复用已经启动的 Spark Application,避免了 sparkContext 初始化冷启动的过程。但是这些服务的内存是固定的,因此开放了用户自定义 Executor 的权限,不过也带来了很多问题,最典型的就是内存...原创 2018-10-27 15:53:57 · 2237 阅读 · 3 评论 -
AMD & Intel 机器 Spark 性能测试
文章目录配置硬件配置软件配置Benchmark总结配置硬件配置INTEL 机型与 AMD 机型除了CPU其余配置相同。256G DRAM8TB 7.2k HDD * 11960G SSD * 12 * 10GbpsIntel: Intel Xeon Gold 5118 * 2AMD: AMD EPYC 7401P软件配置Spark 2.3.1CentOS 7.4CD...原创 2018-10-10 09:58:27 · 1134 阅读 · 0 评论 -
Spark Optane IMDT 测试
文章目录测试目的测试配置测试方法BenchmarkcacheWordcountTerasortKMeans结论容量说明成本相关适合的场景不适合的场景参考测试目的如果不了解什么是Optane,可以先了解一下:Optane介绍使用 Intel Memory Drive Technology (IMDT) 将 Intel Optane SSD 模拟成内存,进行性能测试。在运行时,部分 DRAM...原创 2018-09-26 11:35:57 · 1176 阅读 · 0 评论 -
使用 Hibench 对 Spark 进行基准测试
文章目录概述安装配置Test配置运行查看报告概述项目地址: Intel-hadoop/HiBenchHibench 是 Intel 开源的大数据基准测试工具,可以评估不同大数据框架的速度,吞吐量和系统资源利用率。包括 Sort, WordCount, TeraSort, Sleep, SQL, PageRank, Nutch indexing, Bayes, Kmeans, NWeight ...原创 2018-09-20 14:36:47 · 3717 阅读 · 7 评论 -
使用 Prometheus 和 Grafana 监控 Spark 应用
背景每个开发者都想了解自己任务运行时的状态,便于调优及排错,Spark 提供的 webui 已经提供了很多信息,用户可以从上面了解到任务的 shuffle,任务运行等信息,但是运行时 Executor JVM 的状态对用户来说是个黑盒,在应用内存不足报错时,初级用户可能不了解程序究竟是 Driver 还是 Executor 内存不足,从而也无法正确的去调整参数。Spark 的度量系统提供了...原创 2018-09-13 01:17:18 · 7654 阅读 · 4 评论 -
使用 aspectj 对 spark 进行拦截
开源产品要想用的得心应手免不了要根据公司的业务/场景对其做一些改造,如果直接在源码的层面对其修改,当时可能用的很爽,但后期与社区代码的合并,版本升级可能会变成一场噩梦。对于一个平台来说,使用者对技术本身是不敏感的,所以我们需要增加一些限制来减少集群的一些不可控情况,例如不断的写入新表/新数据却不记得删除,大量不按规范创建的表名等情况。与此同时应尽量让技术对用户透明,比如让其无感...原创 2018-09-04 01:30:38 · 1664 阅读 · 5 评论