Arganzheng's Blog

stay hungry, stay foolish

Spark数据倾斜及其解决方案

什么是数据倾斜 对 Spark/Hadoop 这样的分布式大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜。 对于分布式系统而言,理想情况下,随着系统规模(节点数量)的增加,应用整体耗时线性下降。如果一台机器处理一批大量数据需要120分钟,当机器数量增加到3台时,理想的耗时为120 / 3 = 40分钟。但是,想做到分布式情况下每台机器执行时间是单机时的1 / N,就必须保证每台机器的...

Spark Executor内存管理

我们都知道 Spark 能够有效的利用内存并进行分布式计算,其内存管理模块在整个系统中扮演着非常重要的角色。为了更好地利用 Spark,深入地理解其内存管理模型具有非常重要的意义,这有助于我们对 Spark 进行更好的调优;在出现各种内存问题时,能够摸清头脑,找到哪块内存区域出现问题。 首先我们知道在执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor...

Spark RDD

RDD核心抽象和概览 1. 什么是 RDD The main abstraction Spark provides is a resilient distributed dataset (RDD), which is a fault-tolerant collection of elements partitioned across the nodes of the cluster ...

Design Pattern

设计模式分享 开发模式 (OOP) 面向对象编程 (DDD) 领域驱动开发 (TDD) 测试驱动开发 设计模式的8个基本原则 单一职责原则(Single Responsibility Principle): 一个类只负责一个功能领域中的相应职责(只做一类事情) 里氏代换原则(Lisko...

log4j2如何动态的创建logger和appender

背景 平台现在通过页面通过 SparkLauncher 提交Spark训练任务,随着而来的一个问题就是任务出错之后不知道哪里出问题,而日志在提交节点上,并且所有的任务混在一起打印日志,很不方便查看。能不能把 Spark 任务的日志分别打印在自己的日志文件呢? 解决方案 Spark2.x 有 redirectToLog 方法可以把任务日志重定向,但是 Spark1.x 没有提供这个功能,...

Spark如何查看某个applicationId的executor日志

方法一:直接在界面上查看 如果你运行在 YARN 模式,你可以在 ResourceManager 节点的 WEB UI 页面根据 任务状态、用户名 或者 applicationId Search 到你的应用。然后 点击表格中 Tracking UI 列的History 链接;或者 点击相关的 ApplicationId 链接,进入到详情页面点击上面的 Tracking URL:...

Spark任务读取HDFS文件报Filesystem closed异常

现象 今天早上过来发现昨天晚上浏览器搜索样本生成任务出问题了。日志显示: [INFO ] 2018-10-18 22:03:41.443 [launcher-proc-1] spark-sample-generate - at com.argan.internt.ai.platform.datadriver.sample.plugin.DefaultPluginService...

配置Nginx支持CORS的一个『坑』

前几天遇到前端跨域问题,之前也整理过这方面的问题:JS跨域问题及解决方案。第一种方案 Cross Origin Resource Sharing(CORS) 是目前主流的解决方案。 http { ... upstream scheduler { server 10.21.8.66:8080; } server { lis...

nginx proxy_pass 的一个『坑』

前几天在配置线上的 nginx 的时候,遇到一个诡异的问题,还搞了蛮久,记录一下。 首先配置入口:nginx.conf #user nobody; worker_processes 4; error_log /home/work/nginx/logs/error.log; pid /home/work/nginx/logs/nginx.pid; #Specifi...

maven如何deploy到多个repositories

背景 公司的私服部署在测试环境,跟线上的环境在网络上是物理隔离的。导致在线上无法使用 maven 编译,因为拉取不到测试环境的私服。只能在线下进行打包,然后通过终端上传到线上机器,问题是打出来的包往往有几十上百 M,上传速度超级慢,还容易断开出错。 解决方案 因为网络是物理隔离的,所以只能在线上部署一个maven私服了。部署过程很简单,这里不赘述。但是部署完成之后有一个问题,就是需要将...