info

记一次spark中task卡顿引发的血案

这一生的挚爱 提交于 2019-12-27 15:59:42
记一次spark中task卡顿引发的血案 背景介绍: 由于spark-steaming中其中一个job中某个task卡顿,导致平均30s的平均处理时间的task,整整耗费了10个小时。 问题的排查差不多花费了一周的时间,可以说为解决这个问题,同时掺杂其他工程化的事情,真的一周心情都不好了。 这里特此记录一下吧,给自己做个了断 !嘿嘿 ~ 前言提要 : (1)当前spark采用粗粒度的执行方式,资源申请都是一次性的完成;不存在后期申请不到资源的情况; (2)数据量很小,每秒100条左右,基本不存在数据倾斜的问题,但是执行的业务流程很复杂; (3)采用spark on mesos的组粒度模式运行 1. 问题描述: 2019年12月24日ML处理30个文件时间很异常超过10h; xx中部分task处理时间超长,导致整个任务job失败的问题; 1.1 spark ui 卡顿情况 查看spark ui的监控发现,如下图: 图 1 其中的spark中部分task已经卡顿超过10个小时 备注:spark中其中一个task已经卡顿超过10个小时,其他task很快就完成了; 1.2查看服务器日志: 没有发现明显的异常日志, 19/12/27 01:25:45 INFO ContextCleaner: Cleaned RDD 93 19/12/27 01:25:45 INFO

MySQL DBA好帮手--dbm

拜拜、爱过 提交于 2019-12-27 12:04:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 导读 : 作者:蒋乐兴 MySQL-DBA 目前在 github 上维护着两套 MySQL 开源工具 mysqltools & dbm(dbm-agent dbm-center),对机器学习和程序化交易也有些心得。 目录 用dbm来解放生产力 安装&初始化dbm-agent 一行命令解决安装单机的问题 一行命令解决增加slave的问题 一行命令解决搭建MGR集群的问题 dbm-agent建设出来的实例质量如何 一、用dbm来解放生产力 对于 dbm 来说不管你是搭建单机、主从复制、异或是 MGR 都只需要一行命令就能高效、高质量的解决;并且几乎不会有任何成本(dbm是全开源的,包含dbm-agent,dbm-center),下面先来检验一下 dbm-agent 常来的效率提升。 二、安装&初始化dbm-agent 1、 通过 pip3 这个 python 包管理工具来安装 dbm-agent bash sudo su pip3 install dbm-agent Installing collected packages: dbm-agent Running setup.py install for dbm-agent ... done Successfully installed dbm-agent-0.4

进程内核栈、用户栈

扶醉桌前 提交于 2019-12-27 10:18:34
Linux 进程栈和线程栈的区别 http://www.cnblogs.com/luosongchao/p/3680312.html 总结: 线程栈的空间开辟在所属进程的堆区,线程与其所属的进程共享进程的用户空间,所以线程栈之间可以互访。线程栈的起始地址和大小存放在pthread_attr_t 中,栈的大小并不是用来判断栈是否越界,而是用来初始化避免栈溢出的缓冲区的大小(或者说安全间隙的大小) 进程内核栈、用户栈 1.进程的堆栈 内核在创建进程的时候,在创建task_struct的同事,会为进程创建相应的堆栈。每个进程会有两个栈,一个用户栈,存在于用户空间,一个内核栈,存 在于内核空间。当进程在用户空间运行时,cpu堆栈指针寄存器里面的内容是用户堆栈地址,使用用户栈;当进程在内核空间时,cpu堆栈指针寄存器里面的内 容是内核栈空间地址,使用内核栈。 2.进程用户栈和内核栈的切换 当进程因为中断或者系统调用而陷入内核态之行时,进程所使用的堆栈也要从用户栈转到内核栈。 进程陷入内核态后,先把用户态堆栈的地址保存在内核栈之中,然后设置堆栈指针寄存器的内容为内核栈的地址,这样就完成了用户栈向内核栈的转换;当进程从内 核态恢复到用户态之行时,在内核态之行的最后将保存在内核栈里面的用户栈的地址恢复到堆栈指针寄存器即可。这样就实现了内核栈和用户栈的互转。 那么

python函数

こ雲淡風輕ζ 提交于 2019-12-27 09:52:38
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 () 。 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 def ChangeInt(a): a = 10 b = 2 ChangeInt(b) print(b) def changeme(mylist): "修改传入的列表" mylist.append([1, 2, 3, 4]) print("函数内取值: ", mylist) return # 调用changeme函数 mylist = [10, 20, 30] changeme(mylist) print("函数外取值: ", mylist) def printme(str): "打印任何传入的字符串" print(str) return #

将一个页面的数据传到另一个页面去

南楼画角 提交于 2019-12-27 07:42:46
/** * 详细信息 */ info:function(e){ var data = e.currentTarget.dataset.d console.log("in:" + data[0]); console.log("in:" + data[1]); wx.navigateTo({ url: './../info_job/info_job?nameData=' + data[0] + '&ageData=' + data[1], }) }, /** * 页面的初始数据 */ data: { jobName:'', jobMoney:'' }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { var that = this that.setData({ jobName: options.nameData, jobMoney: options.ageData }); console.log(that.data.jobName); console.log(that.data.jobMoney); }, 来源: CSDN 作者: 不努力,谁会可怜你? 链接: https://blog.csdn.net/qq_32603969/article/details/103644865

SpringBoot 多环境配置

巧了我就是萌 提交于 2019-12-27 04:39:03
为什么要配置多环境? 在我们开发测试过程中,因为线上线下环境的差异,比如数据库数据量或者准确性的原因,通常需要在不同的环境进行测试。 我们可以在测试的时候修改配置文件来达到对应的效果,但是这样有不足的地方: 每次修改显得很麻烦 如果忘记改回原来的配置,发布到线上就会造成事故 怎么做? 多配置文件 复制三份配置文件分别命名为: application.yml application-dev.yml application-product.yml 然后在配置里面配置不同环境的参数: # application.yml # 通用配置 | 本地环境 server: port: 8080 # application-dev.yml # 测试环境 server: port: 8081 # application-product.yml # 线上环境 server: port: 8082 然后我们在application.yml 通过spring.profile.active 来指定到底使用那个配置文件: # application.yml # 默认使用配置 spring: profiles: active: dev 测试 我们启动项目,因为指定了dev 环境,那么开启的端口应该是8081 : 2019-12-26 18:01:37.845 INFO 9405 --- [ main] o.s.s

Building System之 get_abs_build_var() && get_build_var()

无人久伴 提交于 2019-12-27 04:10:56
点击打开链接 1、get_abs_build_var() 和 get_build_var()的实现都在build/envsetup.sh中。 2、在buld目录下grep这两个函数可知:这两个函数只在build/envsetup.sh脚本中使用。 言归正传,贴代码 [plain] view plain copy # Get the value of a build variable as an absolute path. function get_abs_build_var() { T=$(gettop) if [ ! "$T" ]; then echo "Couldn't locate the top of the tree. Try setting TOP." >&2 return fi (\cd $T; CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \ command make --no-print-directory -f build/core/config.mk dumpvar-abs-$1) } # Get the exact value of a build variable. function get_build_var() { T=$(gettop) if [ ! "$T" ]; then echo "Couldn

二十三、枚举

◇◆丶佛笑我妖孽 提交于 2019-12-27 00:35:34
很多的编程语言里面实际上都存在有枚举的概念,但是Java一直到JDK1.5之后才可以正式推出枚举这一概念,在这之前枚举的概念只能够通过多例设计模式来描述。 了解单例和多例点这里 一、枚举的基本定义 在JDK1.5之后提供有一个enum的关键字,该关键字的主要作用就是实现枚举类的定义,同时在进行枚举类定义的时候一定要遵循一些多例设计模式原则(构造方法私有、内部要提供有若干个对象常量) **例:**定义枚举 enum Color { //颜色基色的枚举 RED, GREEN, BLUE; //多例设计中的对象是常量必须大写 } public class TestEnum { public static void main(String[] args) { Color red = Color.RED; //直接获取枚举对象 System.out.println(red); } } 程序执行结果: RED (默认获取的就是枚举名称) 使用enum定义的枚举类可以方便的通过valuesO静态方法获取全部的枚举定义内容。 例 :使用values()获取全部枚举信息 enum Color { //颜色基色的枚举 RED, GREEN, BLUE; //多例设计中的对象是常量必须大写 } public class TestEnum { public static void main(String[

consul与跨主机Docker通信

喜欢而已 提交于 2019-12-26 23:12:59
#Consul 介绍 Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性: 服务发现。Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者。通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务。 健康检查。Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%).。这个信息可由operator用来监视集群的健康。被服务发现组件用来避免将流量发送到不健康的主机。 Key/Value存储。应用程序可用根据自己的需要使用Consul的层级的Key/Value存储。比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用。 多数据中心。Consul支持开箱即用的多数据中心。这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。 基础架构 Consul是一个分布式高可用的系统,这节将包含一些基础,我们忽略掉一些细节这样你可以快速了解Consul是如何工作的,如果要了解更多细节,请参考深入的架构描述。 每个提供服务给Consul的阶段都运行了一个Consul agent 。发现服务或者设置和获取 key

Python 日志学习

旧街凉风 提交于 2019-12-26 19:14:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> print 不是一个好主意 虽然日志很重要,但并不是所有的开发者都知道如何正确的记录日志。之前在开发过程中往代码里插入print语句,然后在开发完成之后删掉他们……但是针对以简单的脚本时,这种方式很有效;但是对于复杂的系统,这么做并不是一个明智的选择。首先你不可能指望日志里输出重要的信息,你可能在日志里看到一大堆垃圾信息,却找不到任何有用的内融。print语句不能很好的做到控制,除非你修改源代码。如果忘记删除没有用的print,所有的消息都会给输出到stdout,终究不是记录日志的好习惯。 使用 Python longging标准库 使用Python内置的标准模块,是记录日志的正确姿势。logging是一个标准模块,设计优良,易于使用,同时易于扩展。 import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) logger.info('Start reading database') # read database here records = {'john': 55, 'tom': 66} logger.debug('Records: %s', records) logger.info(