java多类加载器类冲突案例分析

2021-02-19
阅读 3 分钟
5.7k
众所周知,jvm类加载机制采用双亲委派机制。但在有些框架中,常常为了提供某种形式的“隔离和沙盒”,自定义一种称为ChildFirst的了类加载器,简单的说就是破坏了双亲委派,由自定义子类加载器优先加载类,而不是先委派给父加载器。由于同一个类可以在不同的类加载器中分别加载,使用ChildFirst机制,可以让类加载器形成一...

在Kubernetes上运行Flink

2021-02-09
阅读 5 分钟
7.4k
Flink是目前最热门的分布式流/批处理框架,而Kubernetes是目前最热门的资源管理和调度平台。Flink支持在Kubernetes上采用Session模式或Application模式部署作业。基于实践经验,本文主要讨论在Kubernetes上部署Flink作业需要注意的地方。

使用Spring拦截器实现SPNEGO服务端

2021-02-09
阅读 6 分钟
4.7k
在理清SASL/GSSAPI/Kerberos文中,我们了解到,在java中可以通过Krb5LoginModule模块实现Kerberos登录,以及通过GSSAPI完成校验的基本流程;同时也明白java还定义了一个高层次接口SASL,抽象校验流程。校验流程并没有定义客户端和服务端之间传递“票据”的通信方式,用户可以自己开发合适的通信方案,而SPNEGO协议就是基于...

理清SASL/GSSAPI/Kerberos

2021-01-25
阅读 2 分钟
7k
信息安全越来越重要,企业里面越来越多的开始重视信息安全。其中在java/大数据领域很容易遇到SASL/Kerberos这些概念。比如:hadoop,kafka等常见的大数据组件。本文试图理清楚这些概念之间的真正联系。

Livy探究(七) -- 编程接口分析

2020-10-09
阅读 3 分钟
3k
与REPL不同的是,Programmatic API提供了在一个“已经存在”的SparkContext上执行处理程序的机制。用户需要实现Job接口:

Livy探究(六) -- RPC的实现

2020-10-07
阅读 4 分钟
3.1k
Kryo是一种对象序列化和反序列化工具。通信双方需要互相发送消息,livy选择了Kryo作为消息的编解码器,并在netty框架中实现编码和解码接口:

Livy探究(五) -- 解释器的实现

2020-10-04
阅读 3 分钟
2.5k
ReplDriver是真正最终运行的Driver程序对应的类(其基类是第三篇中提到的RSCDrvier)。在这一层,重点关注handle系列方法:

Livy探究(四) -- 从es读取数据

2020-10-03
阅读 2 分钟
2.1k
在前面的所有例子中,我们只是运行了livy官方给的两个例子。这篇我们要尝试运行一些有意义的代码。如没有特殊说明,以后所有的实验都是在yarn-cluster模式下运行的。我们打算尝试运行下面代码: {代码...} 这段代码用spark sql加载了elasticsearch的某个index,并使用show()打印几行数据。为了完成这个实验,有两个问题...

Livy探究(三) -- 核心架构细节探索

2020-10-03
阅读 2 分钟
4.1k
客户端创建session,LivyServer收到请求后启动一个RpcServer。RpcServer会顺序选择一个从10000~10010之间的可用端口启动监听,假设此时是10000。

Livy探究(二) -- 运行模式

2020-10-02
阅读 3 分钟
5.7k
上一篇的例子采用Livy默认的Local模式运行Spark任务。本篇我们尝试一下其他模式。因为修改配置文件需要重启,而每次重启服务都要设置SPARK_HOME和HADOOP_CONF_DIR比较麻烦。我们首先修改一下conf/livy-env.sh:

Livy探究(一) -- 初体验

2020-10-01
阅读 5 分钟
6.3k
Livy是Apache的开源项目,目前仍然处于孵化阶段。它提供了一种通过restful接口执行交互式spark任务的机制。通过它可以进一步开发交互式的应用。当然,交互式spark应用其实有许多实现。本系列与大家一起对Livy做个探索

elasticsearch插件开发--插件配置声明

2020-09-19
阅读 2 分钟
2.3k
getSettings方法需要返回一个Setting集合,es根据这个集合把elasticsearch.yml中的配置项通过构造函数传递给插件。Setting类是泛型的。例如:Setting<Boolean>表示bool类型的配置项。在nacos-elasticsearch中通过声明NACOS_ENABLED配置作为功能开关:

Mesos和Marathon简介

2020-09-19
阅读 2 分钟
4.5k
Mesos是apache的开源项目,是使用C++开发的资源管理框架。假设我们的数据中心有众多的服务器,这些服务器要运行业务程序,业务程序随着业务规模的增加往往需要扩容,在运维层面会遇到的问题是,运维无法准确把握资源分配是否合理,扩容是否需要购买和上架新的机器。这就造成了硬件资源往往是比实际需要的要宽裕的,但是...

elasticsearch插件开发--环境搭建

2020-08-29
阅读 6 分钟
2.8k
从这篇开始,以nacos-elasticsearch为例,一步步介绍如何开发插件。nacos-elasticsearch是一个自动将当前es节点注册到nacos注册中心的插件。环境基于maven,至少需要引用如下两个包 {代码...} 开发es插件,肯定是要引用es的依赖,而且es还提供了测试框架,方便测试。这里要注意两点:elasticsearch.version需要根据你的...

elasticsearch插件开发--概述

2020-08-15
阅读 4 分钟
8.3k
elasticsearch(简称es)是一款运用广泛的支持实时搜索的数据库。常用于全文检索、时序数据分析等领域。es本身基于模块设计,同时支持插件定制,当现有的功能和插件无法满足需求的时候,我们可以基于es的插件框架和接口,实现自己的插件,完成功能。常见的插件,有中文分词、hdfs数据备份还原、云平台自动发现(ec2, gce, a...

mesos对jvm进程的隔离和资源限制

2020-07-29
阅读 3 分钟
3.3k
根据资料显示,jdk版本必须为Java 8u131及以上 ,实测采用8u201没毛病: {代码...} mesos-slave isolation模式之前之所以不能限制jvm,是由于slave的默认isolation并不是cgroup,需要通过slave启动参数启用: {代码...} 参考Mesos isolation cgroups/cpu & cgroups/mem测试代码 {代码...} 这个代码传入m会打印出jvm...

spark executor 被yarn杀掉的问题

2020-06-28
阅读 2 分钟
4.7k
spark的任务,在运行期间executor总是挂掉。刚开始觉得是数据量太大executor内存不够。但是估算了数据量,觉得不应该出现内存不够。于是,首先尝试通过jvisualvm观察executor的内存分布:

spark通过kafka-appender指定日志输出到kafka引发的死锁

2020-05-08
阅读 9 分钟
3.1k
在采用log4j的kafka-appender收集spark任务运行日志时,发现提交到yarn上的任务始终ACCEPTED状态,无法进入RUNNING状态,并且会重试两次后超时。期初认为是yarn资源不足导致,但在确认yarn资源充裕的时候问题依旧,而且基本上能稳定复现。

JVM内存分配和垃圾回收

2020-05-04
阅读 5 分钟
3.6k
对象一般在堆上分配,但JVM支持一种在栈上分配内存的机制。通过-XX:+DoEscapeAnalysis开启逃逸分析(默认开启),JVM会针对不会逃逸的对象分配在栈上。好处是,栈可以自动弹出,不需要垃圾回收参与处理这些对象。

Akka单元测试

2018-07-02
阅读 5 分钟
4.2k
scalatest是一个特别针对scala语言设计的单元测试框架,除了提供必要的基类和断言系统外,scalatest可以与IntelliJ IDEA和maven等IDE或构建工具集成。akka提供的测试框架就是在scalatest的基础上构建的,所以有必要先了解scalatest。

机器学习从入门到XX(七):支持向量机

2018-04-30
阅读 4 分钟
4k
如果y=1,那么$ h_\theta(x) \approx 1 $,进而$ Θ^Tx \gg 0 $如果y=0,那么$ h_\theta(x) \approx 0 $,进而$ Θ^Tx \ll 0 $

机器学习从入门到XX(六):神经网络代价函数和BP算法

2018-04-19
阅读 4 分钟
5.6k
代价函数 现在来讨论神经网络模型的代价函数。首先有如下定义: L:网络中的层数 $ s_l $:第l层中的单元数(不包括偏差单元) K:输出单元个数 我们记$ h_Θ(x)_k $表示第k个输出单元。回顾在逻辑回归中,我们使用如下代价函数: $$ J(θ) = - \frac{1}{m} \displaystyle \sum_{i=1}^m [y^{(i)}\log (h_θ (x^{(i)})) + (1...

机器学习从入门到XX(五):神经网络模型

2018-03-30
阅读 3 分钟
7.4k
神经网络(Neural Network)是一种十分强大的机器学习算法。神经网络的模型类似脑细胞传递神经信号的方式。下面是单个脑细胞的示意图:

机器学习从入门到XX(四):过拟合和正则化

2018-03-21
阅读 4 分钟
5.5k
图1采用$ y = θ_0 + θ_1x $的直线作为假设函数,然而训练数据集看起来并不适合直线,所以假设函数看起来不太合适。图2采用$ y = θ_0 + θ_1x + θ_2x^2 $,我们得到了一个拟合度更好的曲线。观察图3,貌似的,通过添加高阶特征,我们获得了更好的拟合。然而,如果加入过多的特征,尽管可以获得“完美”的拟合度,但是却不是...

机器学习从入门到XX(三):分类器和逻辑回归

2018-03-19
阅读 5 分钟
6.4k
分类(classification)问题的一种实现方式是,使用线性回归(linear regression),对于所有的预测结果,以某个值作为分界。比如小于0.5意味着0,大于0.5意味着1。然而,这种方法不够好,因为分类问题并不能用线性方程表示。

机器学习从入门到XX(二):多元线性回归和正规方程

2018-03-11
阅读 4 分钟
6.3k
多元线性回归 多特征 多个特征变量也称为多元线性回归(multivariate linear regression)。先解释一些符号含义: $ x^{(i)} $ 表示训练集中的第i组用例 $ x^{(i)}_j $ 表示第i组用例中的第j个特征变量 m表示训练用例的总数 n表示每组用例的特征数 多个特征变量有如下假设函数: $$ h_θ(x) = θ_0 + θ_1x_1+ θ_2x_2+ θ_3x_3...

机器学习从入门到XX(一):线性回归与梯度下降

2018-03-10
阅读 5 分钟
7.4k
介绍 什么是机器学习? 有两种定义。Arthur Samuel如此描述机器学习:一个领域的研究,旨在研究,在不进行编程的情况下,让计算机具有学习能力。 Tom Mitchell给出了一个更为现代的定义:一个计算机程序从经验E以及评判标准P中学习如何完成任务T,随着E的累积,P得到提升。 例如,下棋游戏中: E:在很多盘棋局中的经验 ...

/proc/pid/cmdline采坑

2018-02-27
阅读 2 分钟
16.4k
在Linux系统中,根据进程号得到进程的命令行参数,常规的做法是读取/proc/{PID}/cmdline,并用'\0'分割其中的字符串得到进程的args[],例如下面这个例子:

ELK和beats

2018-02-24
阅读 2 分钟
3.4k
Elasticsearch: 核心中的核心组件,基于著名的全文检索引擎lucence的一个分布式版本。由于扩展成分布式,容量和性能得到极大的提升,使得Elasticsearch得以成为目前许多大数据产品和大数据架构的核心组件。

Go编程技巧--io.Reader/Writer

2018-02-24
阅读 3 分钟
13.8k
Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比较常用的接口。很多原生的结构都围绕这个系列的接口展开,在实际的开发过程中,你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化。本文结合实际场景来总结一番。