自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不清不慎的博客

java大数据开发工程师、数据挖掘、人工智能、区块链兴趣爱好者。 Github地址:https://github.com/ljcan...

原创 Docker Dockerfile详解

在前面的一篇文章中,我们介绍了如何构建镜像,其中使用Dockerfile文件是最为常用的一种方式,在本篇文章中我们将详细介绍Dockerfile构建镜像的过程以及其命令参数等等。 首先我们来看看Dockerfile构建镜像的过程: 从基础镜像运行一个容器 执行一条指令对容器做出修改 执行类似do...

2019-07-07 22:46:10 1556 2

原创 分布式一致性协议:Raft算法详解

在分布式系统中,有很多复杂的理论,从CAP理论到BASE理论,我们不断的在可用性以及一致性之间做出抉择,每一部分都相当复杂,就分布式一致性而言,又有许多协议,从2PC到3PC再到paxos算法,到ZAB协议,再到Raft算法。本篇文章主要介绍Raft算法的实现过程,最近有空看了下国外的论文,这里做...

2019-05-24 21:37:40 1913 0

原创 如何设计一个多级缓存系统?

在一个高并发的分布式系统中,缓存系统是必不可少的一部分,大多数情况下,我们需要设计一个多级缓存系统到生产中使用,那么如何设计呢?这也是笔者在前一段时间的面试中,被问到的一个问题,虽然当时这道题过了,但是面试结束之后对自己的回答不是很满意,所以,再反复思考之后决定分享下自己的设计思路。欢迎留言批评指...

2019-05-24 00:29:49 625 0

原创 Hive调优总结

熟悉Hive的开发者都知道,Hive会将操作语句转换为MapReduce作业,对于开发者是透明的,我们并不需要理解其原理就可以专注手头的工作,但是在实际开发当中数据量巨大,我们需要采取一些优化措施来提高MR作业的效率。 1.执行计划 与关系型数据库一样,我们可以使用EXPLAIN命令来分析HQL...

2019-05-05 18:40:59 3633 2

原创 浅谈分布式事务的解决方案

一、分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部...

2019-04-21 00:21:52 238 0

原创 深入理解Kafka数据高并发写入、可靠性以及EOS语义

Kafka作为一个优秀的高性能消息队列,广泛用于各种大数据高并发场景下,常常听一些技术大牛讲起kafka滔滔不绝,赞不绝口,但是它是如何保证数据的高并发写入,可靠性以及流数据处理中常见的EOS语义的呢?本篇文章让我们来一起深入探究其内部原理。 一、 高并发写入 作为一个消息队列,我们首先需...

2019-03-17 00:59:16 573 0

原创 ElasticSearch使用Java API进行索引文档的操作

ElasticSearch版本:7.6.2 首先构建maven项目,导入依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache....

2020-07-03 00:03:09 24 0

原创 美团,滴滴,蘑菇街Java大数据面经分享

大概在三月份开始面了几家互联网公司,主要方向是java后端和大数据开发,最近整理学习资料,所以分享一下美团,滴滴,蘑菇街等公司的面经。 美团 一面 聊你最熟悉的项目和技术。 项目中为什么要使用spark。 spark怎么划分stage,宽窄依赖,聊源码 spark提交一个作业的执行流程(单机模...

2020-07-02 23:52:44 185 0

原创 以太坊智能合约编译,部署以及打包调用【Mac系统】

本文主要讲解如何进行智能合约的编译,部署以及打包,首先,读者需要会编写智能合约,了解solidity语言以及以太币。 我这里环境是Mac系统,linux系统命令也是类似。 1.安装geth客户端以及操作 brew tap ethereum/ethereum brew install ethere...

2020-05-07 22:26:31 561 0

原创 truffle init问题解决

首先Truffle是针对基于以太坊的Solidity语言的一套开发框架。 在Mac OS执行truffle init报错: Starting unbox... ================= ✔ Preparing to download box ✖ Downloading Unbox fa...

2020-04-30 20:09:39 849 7

原创 SpringCloud Hystrix断路器实战

SpringCloud Hystrix实现断路器,线程隔离等一系列服务保护功能,它是基于Netflix开源框架Hystrix实现的,该框架的目标是用于通过控制远程系统,服务和第三方节点,从而对延迟和故障提供更强大的容错能力。它具备服务降低,熔断,线程和信号隔离,请求缓存,请求合并以及服务监控等强大...

2020-03-29 16:27:55 114 0

原创 Luasql mysql安装错误解决

首先需要安装LuaRocks: wget http://luarocks.org/releases/luarocks-2.2.1.tar.gz tar zxpf luarocks-2.2.1.tar.gz cd luarocks-2.2.1 ./configure; sudo make boots...

2020-03-07 21:03:56 399 0

原创 【JVM实战】GC回收器详解

在Java虚拟机中,GC回收器不仅仅只有一种,在哪一块内存区域以及场景使用什么垃圾回收器,对于我们编写的程序的性能都有着至关重要的影响,因为,如果我们熟悉每一个GC回收器的运行机制就可以给我们的程序的性能带来很大的提升,本篇文章中,我们来探究一下每一种GC回收器的结构原理。 首先,在JVM中,总共...

2019-08-11 12:58:02 751 1

原创 Flink启动报错could not be determined automatically

今天发布Flink应用,报如下错误: The return type of function 'main(RyeCollectorLauncher.java:77)' could not be determined automatically, due to type eras...

2019-07-29 20:02:02 2411 0

原创 【JVM实战】如何防止OOM内存溢出?

Java开发者们最为头疼的问题就是线上常常会抛出OOM异常,有人说,这肯定是内存不够用了啊,扩大内存容量不就可以了嘛,但是内存是需要代价的,不能无限的扩展,虽然JVM为我们管理内存,保证了内存的合理回收,但是如果我们对它的底层了解的够透彻,编写出更加健壮的程序,就可以降低成本,充分利用资源,减少线...

2019-07-27 19:06:13 351 0

原创 Flink Kafka connector详解

在Flink中提供了特殊的Connectors从kafka中读写数据,它基于Kafka Consumer API以及Producer API封装了自己的一套API来连接kafka,即可读取kafka中的数据流,也可以对接数据流到kafka中,基于kafka的partition机制,实现了并行化数据...

2019-07-20 22:29:17 630 0

原创 Hive权威指南学习笔记

原文链接: Hive权威指南学习笔记

2019-07-20 14:33:20 127 0

原创 Docker镜像创建,拉取以及推送

本篇文章主要讲述如何创建镜像,拉取镜像以及推送镜像到自己的仓库中。 创建镜像 创建镜像有两种方式: docker commit 构建容器 docker build 使用Dockerfile文件来构建 docker commit方式来构建容器 命令格式如下: 例如使用下面命令就可以构建一个镜像...

2019-07-07 13:00:34 314 0

原创 实现LRU Cache(java版)

LRU算法,也叫最近最少使用算法,我们可以使用该算法来实现cache机制,简单地说就是缓存一定量的数据,当超过设定阀值的时候就把一些过期的数据删除掉,本篇文章我们来看看如何实现LRU Cache,下面我们使用两种方式来实现。 基于LinkedHashMap 在java的集合类中有LinkedHas...

2019-07-07 09:57:36 755 0

原创 Linux系统常用压测工具和性能分析工具

本篇文章介绍几款linux系统性能压测以及分析工具,在实际开发环境中,我们会经常使用到它们对我们的系统进行性能分析。 当我们需要判断linux系统的性能时,常常会观察几个常用的指标:平均负载、CPU使用率,IO负载等等。 那么当我们需要查看系统平均负载的时候可以使用uptime命令来查看,它代表系...

2019-06-29 14:53:03 2057 0

原创 Spark源码剖析之数据通信模块解析

Spark是一个分布式计算框架,当 我们提交一个任务,会划分为多个子任务分发到集群的各个节点进行计算,这里思考一个问题,Spark是如何进行消息的传递,如何将任务分发到各个节点,并且如何将计算结果汇总起来的呢? 实际上,Spark内部使用Akka进行消息的传递,心跳报告等,使用Netty提供RPC...

2019-06-17 10:24:43 165 1

原创 Spark源码解读之Shuffle计算引擎剖析

Shuffle是Spark计算引擎的关键所在,是必须经历的一个阶段,在前面的文章中,我们剖析了Shuffle的原理以及Map阶段结果的输出与Reduce阶段结果如何读取。该篇文章是对前面两篇文章 【Spark源码解读之Shuffle原理剖析与源码分析】 【Spark存储机制源码剖析】 细节的深入探...

2019-06-16 20:08:21 174 0

原创 Flink Savepoint简单介绍

一、什么是savepoint? savepoint是通过checkpoint机制为streaming job创建的一致性快照,比如数据源offset,状态等。 需要我们手动去触发,因此,需要和checkpoint进行区分。checkpoint主要用于自动故障恢复,由Flink自动创建、拥有和发布,...

2019-06-10 17:00:02 815 0

原创 浅谈Kafka选举机制

Kafka是一个高性能,高容错,多副本,可复制的分布式消息系统。在整个系统中,涉及到多处选举机制,被不少人搞混,这里总结一下,本篇文章大概会从三个方面来讲解。 控制器(Broker)选主 分区多副本选主 消费者选主 控制器(Broker)选举 所谓控制器就是一个Borker,在一个kafka集...

2019-06-09 00:10:46 5847 0

原创 Spark容错机制剖析

在一个分布式系统中,非常重要的一点就是容错性,Spark也不例外,当它机器发生故障的时候,可以很轻松的应对。本篇容错机制的剖析主要针对Standalone模式进行分析。 阅读本篇文章之前,你可以查看之前的【Spark源码解读之Master剖析】以及【Spark源码解读之Worker剖析】的文章,该...

2019-06-06 09:43:34 275 0

原创 Spark Streaming Window核心源码剖析

在Spark Streaming中,提供了窗口计算,可以转换滑动窗口内的数据。每次窗口都在DStream中滑动,窗口内的RDD将被合并生成窗口内的DStream的RDD。如下图所示为滑动窗口的操作: 从上图可以看见,window操作需要指定两个参数: 窗口长度(window length):窗...

2019-06-05 12:40:15 197 0

原创 Spark SQL源码剖析之SqlParser解析

在使用Spark的过程中,由于Scala语法复杂,而且更多的人越来越倾向使用SQL,将复杂的问题简单化处理,避免编写大量复杂的逻辑代码,所以我们想是不是可以开发一款类似Hive的工具,将其思想也应用在Spark之上,建立SQL来处理一些离线计算场景,由于Spark SQL应用而生。在本篇文章中,我...

2019-06-04 00:18:01 891 0

原创 Flink State状态以及Checkpoint机制(二)

在上篇文章中介绍了如何Flink的State状态,本篇文章接着上篇文章继续介绍Flink的Checkpoint机制。启动checkpoint机制它可以为每一个job备份了一份快照,当job遇到故障重启或者失败的时候,我们就不必从每个job的源头去重新计算,而是从最近的一个完整的checkpoint...

2019-05-30 16:15:17 949 3

原创 Flink State状态以及Checkpoint机制(一)

一、State状态 在Flink中,它使用了State状态机制以及Checkpoint策略提供了强大的容错机制,不过我们需要注意区分它们,State状态是指一个Flink Job中的task中的每一个operator的状态,而Checkpoint是指在某个特定的时刻下,对整个job一个全局的快照,...

2019-05-29 11:04:56 4885 0

原创 Flink Window介绍

一、Window的分类 什么是window? Flink是一个流处理计算框架,它底层基于流处理引擎,实现了批处理与流处理,在流处理中,为了处理无限的数据集,使用window将无限的数据流切分多个有限的数据块进行计算。 我们按照具体的业务需求将window划分为KeyedWindow以及Non-Ke...

2019-05-27 11:10:46 595 0

原创 Flink Runtime详解

Flink运行时架构 Flink集群的架构,也是典型的主从架构模型,启动Flink,它会启动JobManager以及TaskManager进程,这里以standalone模式来讲解其运行时的架构以及一些细节,集群模式后面的文章汇介绍到。 JobManager是master主节点,它主要负责资源的分...

2019-05-26 18:53:34 426 0

原创 【JVM实战】类的加载机制

所谓虚拟机类的加载机制,就是把一个描述类的class文件加载到内存当中,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。 一个类从被加载到虚拟机内存开始,到卸载出内存为止,它的主要生命周期有:加载、连接、初始化。而连接过程又被分为验证、准备、解析这几个过程。所...

2019-05-23 16:09:41 127 0

原创 Flink数据类型、序列化与累加器Accumulator

本篇文章简单介绍一下Flink中的数据类型与累加器以及计数器的使用。 一、数据类型 在Flink的DataSet以及DataStream中对可使用的元素添加了一些约束条件,目的是为了能够有效的分析这些类型的执行策略以及选择不同的序列化方式。 以下列举7种Flink种常用的数据类型: Java/...

2019-05-21 23:35:07 496 0

原创 Flink DataSet迭代运算

对于迭代运算,通常应用于一些数学计算,机器学习算法以及图计算等领域,在Flink中,对于批处理作业,也提供了相应的迭代运算,主要分为下面两大类: Bulk Iterate Delta Iterate 什么是迭代运算? 所谓迭代运算,就是给定一个初值,用所给的算法公式计算初值得到一个中间结果,然...

2019-05-18 14:43:53 887 1

原创 Flink DataSet Transformations【翻译】

在前面的文章中介绍了一下DataStream的一些Operator的操作,这篇文章主要讲述DataSet的一些Transformations操作。它主要有以下操作: 下面会逐一进行讲解 Map Map操作为DataSet提供了一个用户自定义的map函数,它实现了一对一的映射,并且该函数只能返回一...

2019-05-17 23:29:15 202 0

原创 【JVM实战】再谈GC算法

JVM GC算法,对于了解JVM的程序员,应该都不会陌生,在这篇文章中,整理一下常见的GC算法分享给大家。 GC算法 复制算法 标记清除算法(Mark-Sweep) 标记压缩算法(Mark-Compact) 分代算法(Genarational Collection) 分区算法(Region 主要...

2019-05-17 16:15:33 82 0

原创 【JVM实战】JVM常用参数

在虚拟机运行过程中,如果可以跟踪系统的运行状态,那么对于问题的故障排查会有一定帮助,本篇文章主要总结一些常用的参数,这样就可以在系统能够运行时监控垃圾回收,便于分析。 主要参数如下: -XX:+PrintGC 打印GC日志 -XX:+PrintGCDetails 打印详细的...

2019-05-14 16:46:57 150 0

原创 Flink Operator之CoGroup、Join以及Connect

在Flink中由很多Operator,大致分为两类,DataStream和DataSet,即流处理数据和批处理数据,这an文章主要讲解CoGroup、Join和Connect的使用,之所以将它们放在一起是因为它们比较相似,但也有所不同,在DataStream和DataSet中都存在这三个Opera...

2019-05-13 16:55:39 2254 0

原创 【基础巩固篇】Java中String揭秘

String对象是我们日常使用的对象类型,字符串对象或者其等价对象(如char数组),在内存中总是占据了最大的空间块,因此如何高效地处理字符串,是提高系统整体性能的关键。 在此之前,String作为一个对象类型,我们必须清楚Java对象的创建以为对象的内存结构。 1.对象的创建以及内存结构 创建一...

2019-05-12 17:11:20 151 0

原创 【基础巩固篇】Java 8中对CAS的优化

Java的并发包下存在着许多并发工具,CAS也是其中的一员,对于CAS(CompareAndSet)我们并不陌生,它基于乐观锁的机制,当前值等于期望值时设置成功,但是它也会导致一系列问题,当大量线程同时去访问时,就会导致空旋转,CPU资源消耗过多,而且执行效率也不高。同时它也会产生ABA问题,不过...

2019-05-10 23:23:32 426 0

提示
确定要删除当前文章?
取消 删除