自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 Spark RDD count, sample, colease, distinct, order by 等算子实现原理解析

前言我们在编写 spark 代码来处理数据时,大多数的工作都是调用 spark api 对数据做转换,然后收集最终结果。这些 api 函数便被称之为算子(operation)。一、RDD 算子概览Spark rdd 算子可以分为以下 3 类:非 shuffle 类 transform 算子,以 map,filter,flatmap 算子为代表,这类算子的特点是不会触发 rdd 计算过程,只是将一个 rdd 转换成另一个 rdd,前后两个 rdd 之间是窄依赖关系(Narrow Depende

2021-09-24 19:35:44 2015 2

原创 Java 多线程学习笔记—— volatile、ThreadLocal、synchornized、Lock、ReentrantLock 加锁源码分析等

1. 当线程在没有同步的情况下读取变量时,可能会得到一个失效值,但至少这个值是由之前某个线程设置的值,而不是一个随机值。这种安全性保证也被称为最低安全性保证。最低安全性保证适用于绝大数变量,但是存在一个例外:非volatiel类型的64位数值变量,double和long。2. 当把变量声明位volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会讲该变量的操作与其他内存操作进行一起重排序。volatile变量不会被缓存在寄存器或者处理器不可见的地方,因此在读取volatile类型的变量

2021-08-19 07:53:24 460 1

原创 Spark sql 学习笔记 —— DataFrame、Dataset、sql 解析原理

一、Spark sql创建dataframe的三种方式1. 要使用sparksql功能,需要需创建一个SparkSession对象,使用SparkSession.builder()方法来创建: val session = SparkSession .builder() .appName("Spark Hive Example") .master("local[2]") .enableHiveSupport() //开启Hive支持 ...

2021-08-15 09:14:14 1022

原创 Spark on yarn——Spark提交任务到yarn集群源码分析

1. 当使用spark-submit命令提交任务时,处理类是SparkSubmit,核心代码如下:object SparkSubmit extends CommandLineUtils with Logging { override def main(args: Array[String]): Unit = { appArgs.action match { case ...

2021-08-07 12:44:48 1811 1

原创 Spring Boot 的IOC启动源码分析——三级缓存、后置处理器、@Enablexxx 注解、事件监听器等原理解析

一、IoC与DIIoC(控制反转)就是把原来代码里需要实现的对象创建、依赖,反转给容器来帮忙实现。我们需要创建一个容器,同时需要一种描述来让容器知道要创建的对象和对象的关系。这个描述的最具体的表现就是我们看到的配置文件。DI(Dependency Injection,依赖注入) 就是指对象被动接收依赖类而不自己主动去找,换句话说,就是指对象不是从容器中查找它依赖的类,而是在容器实例化对象时主动将它依赖的类注入给它。二、Spring核心容器类1. BeanFactorySpring中Bea

2021-08-01 12:52:37 709 2

原创 Hadoop 学习笔记——HDFS架构设计概览

一、HDFS是什么随着移动互联网技术的发展,产生的用户数据也越来越多,对服务器存储需求也越来越大。服务器存储扩展有两个方向:1)垂直扩展,添加多个磁盘,缺点是单台机器能支持的磁盘总数有限,并且磁盘数太多会影响机器读取数据的能力。2)水平扩展,添加多台机器组成集群,将文件分散到集群中各个机器上存放,但是需要机器间网络通信以及某个节点挂掉无法提供的问题,而HDFS的出现便是为了解决这个问题的。HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datanod

2021-07-13 08:47:01 294 1

原创 Spark Standalone模式部署教程及参数配置修改

1. 下载Spark安装包并解压后,有以下目录:其中bin目录下放置了和spark server端交互的shell文件,如spark-submit,spark-sql,beeline等。conf目录下放置关于spark应用的配置文件,jars目录下存放spark程序运行的依赖jar包,sbin目录下存放启动和停止spark进程的控制脚本。2. spark standalone模式采用M...

2021-07-12 06:58:16 929 2

原创 Hive 架构、日期函数、动态分区、高级查询函数,最详细全面的hive 知识点总结

1. hive数据类型1.1 基本类型类型与表中的列关联。 支持以下基本类型:整型TINYINT-1个字节的整数SMALLINT-2字节整数INT—4字节整数BIGINT-8字节整数布尔型BOOLEAN-正确/错误浮点型FLOAT-单精度双倍—双精度定点数DECIMAL-用户定义的比例和精度的固定点值字符串类型STRING-指定字符集中的字符序列VARCHAR...

2021-07-09 23:24:56 735 5

原创 linux文件系统——磁盘分区、Ext格式、文件属性与权限

1. 机械磁盘组成一个传统的机械硬盘结构如下图:机械硬盘主要由磁盘盘片、磁头、主轴与传动轴等组成,数据就存放在磁盘盘片中。大家见过老式的留声机吗?留声机上使用的唱片和我们的磁盘盘片非常相似,只不过留声机只有一个磁头,而硬盘是上下双磁头,盘片在两个磁头中间高速旋转,类似图 2。也就是说,机械硬盘是上下盘面同时进数据读取的。那扇区又是十么呢?扇区其实是很形象的,大家都见过...

2021-07-06 11:04:13 1605 1

原创 Java HashMap ArrayList 实现原理浅析

一、数组1. 数组常用排序算法有冒泡排序,选择排序,插入排序,快速排序,归并排序,堆排序。冒泡排序关键思想是相邻两个元素交换,所以有两层循环,外面循环控制交换趟数,里面循环控制相邻两个元素交换,里层循环从左想要扫描交换时,结果只能是最大的放在最右端,所以内循环关键在于j的终止条件:for(int j = 0; j < length - i - 1; j++)。冒泡排序基本时间复杂度都是o(n^2),至于o(n)的说法,是需要加1个flag,即第一次内循环结束时,如果没有元素交换,则flag=t

2021-06-25 16:32:48 348 1

原创 mysql InnoDB——插入缓存、二次写、支持事务、异步IO等特性介绍

觉得自己对Mysql事务很熟悉?那可能是你没碰到阿里面试官Java程序猿呀关注12020.06.29 18:10:29字数 4,585阅读 2,682前言迎面走来了一个风尘仆仆的身穿格子衫的男子,手里拿着一个MacBook Pro,看着那稀少的发量,和那从容淡定的眼神。我心里一颤,我去,这是架构师,架构师来面我技术面,我心里顿时不淡定了,表面很稳实则心里慌得一批。果然,他手里拿着我的简历,快速的扫了一下,然后用眼角余光看了一下我,上来就开问。Mysql事务简介面试官:看.

2021-06-23 16:47:38 2776

原创 javascript学习笔记

1.全局作用域不在任何函数内定义的变量就具有全局作用域。实际上,JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性:'use strict';var course = 'Learn JavaScript';alert(course); // 'Learn JavaScript'alert(window.course);...

2021-06-22 11:11:59 54

原创 kudu Clock considered unsynchronized 问题解决

1. 必须开启本机的ntpd服务2. 必须在高版本的ntp配置文件中加上这行记录:server 127.127.1.0 iburst fudge 127.127.1.0 stratum 8否则使用ntpp -q命令会报如下错误:ntpq -pNo association ID's returned3....

2021-06-22 11:04:23 2184

原创 Java 对象序列化学习笔记

1、什么是Java对象序列化?Java的对象序列化是将那些实现了Serializable接口的对象转化成一个字节序列,并能够在以后将这些字节序列完全恢复成原来的对象。简单来说序列化就是将对象转化成字节流,反序列化就是将字节流转化成对象。对象必须在程序中显示的序列化(serialize)和反序列化(deserialize)。2、序列化的作用序列化的主要用途主要有两个,一个...

2021-06-22 10:43:10 221 1

原创 Java jvm 学习笔记

2624/5000Java™2平台标准版(J2SE™)的一项优势是它可以执行自动存储管理,从而使开发人员免受显式内存管理的复杂性的影响。本文概述了Java HotSpot虚拟机(JVM)中的内存管理。Sun的J2SE 5.0版本。它描述了可用于执行内存管理的垃圾收集器,以及提供有关选择和配置收集器以及设置存储区大小的一些建议收集器操作。它还用作资源,列出了一些最常用的选项影响垃圾收集器的行为,并提供许多指向更详细文档的链接。第2节适用于对自动内存管理概念不熟悉的读者。进行了简短的讨论与要

2021-06-22 03:48:20 208 1

原创 Java编程学习笔记

1. java boolean不能强转为int,不能进行加减乘除操作,但是可以进行按位与或操作。java char 转 int 需调用Integer.parseInt()方法,如果直接调用char c = 'c', int i = c,得到的是变量c的ascll码值。char 在java中占用两个字节,可以进行加减乘除操作。2. java RTTIRTTI(Run-time Type Id...

2021-06-22 03:32:55 380 1

原创 理解Scala反射——TypeTag和ClassTag作用

一、理解反射1.1什么是反射反射是程序检查甚至可能自我修改的能力。 它在面向对象,功能和逻辑编程范例方面有着悠久的历史。 有些语言是以反射为指导原则而构建的,而有些语言是随着时间的推移,逐渐发展出反射能力。反射涉及具体化(即明确)程序的其他隐含元素的能力。 这些元素可以是静态程序元素,如类,方法或表达式,也可以是动态元素,如方法调用和字段访问。 通常根据执行反射过程的时间来区分编译时...

2021-06-22 03:14:31 1474

原创 Hadoop源码分析---Namenode和Datanode

1. 使用hadoop FileSystem类读取文件系统代码如下:public static void main(String[] args) { Configuration conf = new Configuration(); try { FileSystem fs = FileSystem.get(conf); ...

2021-06-22 03:11:11 676 2

原创 ambari学习笔记-ambariagent

1. ambari-agent初始化脚本位于/etc/init.d/ambari-agent 脚本,来自于ambari/ambari-agent/etc/init.d/ambari-agent:case "$1" in start) $command_prefx "/usr/sbin/ambari-agent $@" ;; stop) ...

2021-06-22 03:06:31 482

原创 ambari-server启动流程分析

1. ambari-server 服务启动有两种方式:service ambari-server start 和 ambari-server start.分别对应脚本文件/etc/init.d/ambari-server 和 /usr/sbin/ambari-server,其中/usr/sbin/ambari-server文件是一个快捷方式,指向/etc/init.d/ambari-server:...

2021-06-22 03:00:10 2291

原创 ambari 服务配置(Service Configuration)源码解析

1. 在manager界面选择添加服务, 选中一个服务后, 进入配置服务步骤,页面先去请求了http://leapmgr-3:8080/api/v1/stacks/LEAP/versions/3.4.8/services?StackServices/service_name.in(HDFS,HIVE,AMBARI_INFRA,SENTRY,YARN,MAPREDUCE2,ZOOKEEPER,LEA...

2021-06-22 02:45:53 979

原创 Scala编程——变量、函数、闭包、函数柯里化、偏函数、隐式转换等知识点总结

1. 变量定义Scala有两种变量,var和val,val类似于Java里的final变量,一旦初始化了,val就不能被再赋值。相反,var如同java里的非final变量。2.函数定义一个简单的函数定义如下:def max(x: Int, y: Int): Int = { if (x > y) x else y}函数的定义以def开始。然...

2021-06-21 19:20:10 362 1

原创 openssl和keytool生成rsa密钥及证书开发指南

二、der编码与pem编码我们使用程序代码或者openssl命令生成秘钥对时,会先在内存中生成数据,然后序列化到文件中。而数据序列化需要一种特定的编码格式——DER。DER 是distinguished encode rule 的简写,它是ASN.1编码标准的一种编码方式,该编码方式的输出是二进制而不是普通的文本。DER 编码二进制输出的文件将会是一个二进制文件。PEM是一个用来存储和发送密码学key、证书和其他数据的文件格式的事实标准。许多使用ASN.1的密码学标准(比如X.509和PKCS)都使用.

2021-04-30 15:57:19 3384 5

原创 ubuntu+pycharm搭建superset开发环境

前言网上关于superset开发环境搭建的教程有很多,但是基本都已经过时不可用了,所以发出来这篇教程,希望大家少走一些弯路。开发环境:ubuntu 19.10 + pycharm 2019.3.3 + jdk 1.8 + python 3.7项目版本信息:release分支信息一、环境准备1. 克隆项目到本地:git clone https://github.com/ap...

2020-02-19 10:51:13 2150 4

原创 记一次遇到的Redis集群报错问题——[ERR] Nodes don't agree about configuration!的解决方案

最近在研究搭建redis集群。根据redis的官方文档,搭建redis集群至少需要6台机器:3台机器作为master节点,负责处理数据请求,以及参与集群选举投票,采用过半通过机制,所有需要2n+1(n >= 1)个节点;3台机器作为slave节点,作为master的备份节点。当master节点挂掉后,slave节点便提升为master节点。受限于硬件环境配置,我选择了使用3台机器来搭建red...

2019-11-04 15:22:10 2127

原创 Scala模式匹配(match case)

Scala的match表达式类似于其他语言中的switch语句,它可以提供给你在多个备选项中做选择。基本上match表达式可以让你使用任意的模式(pattern)做选择。1. 按值匹配def valueMatch(fruit: String) { fruit match { case "apple" => print("apple") case "b...

2019-06-01 02:51:00 8976

原创 ambari源码编译教程

前言ambari源码编译是一个非常痛苦的过程,其官网上的编译资料非常少。本人在尝试编译ambari编码的过程中,遇到了非常多的问题,特别是ambari-web模块,吃了不少苦头。本文介绍的是ambari-2.4.0.0的源码编译过程,如果是高版本编译,可能会少一些问题。编译环境基本从零构建,我相信本教程应该适用绝大多数用户。一、编译环境准备1. 安装必要的编译工具:yum ins...

2019-04-27 17:52:09 1351 3

原创 内网穿透-公网访问家庭内网

一、为什么需要内网穿透相信学过计算机网络知识的同学都知道,因为IPV4地址的稀缺性,局域网内的电脑通过路由器上网时,是需要经过NAT转换为公网ip的,而电脑被分配到的私有ip一般是192.168.x.x(注:电脑ip地址查看可以通过ifconfig(Linux系统)或ipconfig(windows)系统命令查看),而在公网中的另一台电脑要访问该电脑时,该电脑没有公网ip地址,是无法直接访问的...

2019-03-25 07:37:06 20713 7

原创 深入理解namenode和secondarynamenode工作机制

一、namenode启动过程1. hadoop的hive-site配置文件中的dfs.namenode.name.dir属性,指定了namenode进程读取数据的目录,该目录下包含了hdfs文件系统的元信息。2. 首次安装hadoop,执行hdfs namenode -format命令格式化文件系统,打开dfs.namenode.name.dir属性配置目录,该current目录下会产生...

2019-03-23 22:41:00 843

原创 openfire源码部署到IDEA

声明:本篇教程实用于openfire 4.2.x版本,如果你使用的是其他版本的源码,可能会遇到其他的问题。在本篇文章中,我会告诉你怎么在IDEA环境中搭建该项目,同时告诉你出现错误问题的解决方案,但更重要的是告诉你出现错误问题的根本原因,而不是像其他教程那样随便粘贴复制文章。一、环境准备下载IDEA工具,下载jdk 1.8.0版本,下载openfire源码openfire 4.2.x并解压...

2018-11-24 14:02:11 996

原创 msvc2015 编译Qt源码

前言Qt源码编译有很多选项:目标platforms,编译静态库或者动态库,skip某个功能模块等选项。本文主要介绍在Win 10 x64平台下使用visual studio 2015 编译Qt 5.9源码的流程。1.源码下载源码获取有两种方式:1.直接下载,下载地址:http://download.qt.io/archive/qt/,2.git clone Qt源码,仓库地址:http...

2018-01-05 15:54:17 6732

原创 QML 进阶---Coordinate Transformations

QML 进阶—在项目中遇到的那些坑Qt的坐标系统一、坐标系统 Qt的坐标系由QPainter类控制。QPaintDevice,QPaintEngine,QPainter这三个类构成了Qt绘画系统的基础。QPainter用于执行绘图操作,QPaintDevice是可以使用QPainter来绘制的抽象二维空间,而QPainteEngine提供了painter在不同类型设备上绘制的接口。 QPaint

2017-09-07 10:36:00 1713

原创 QT开发--初识QML

QML 进阶—在项目中遇到的那些坑Qml Overview一、qml是什么、 先来一段Qt官方的解释:qml是用户界面规范和编程语言。它允许开发人员和设计人员创建高性能,流畅的动画和有视觉吸引力的应用程序。QML提供了高度可读的、声明式的类JSON语法,支持JavaScript表达式以及动态属性绑定。qml语言和引擎是由Qt QML模块提供的。有关QML语言的更多信息,请参阅Qt QML模块文档。

2017-09-05 15:42:29 3898

原创 Openfire源码分析

Openfire 源码分析 XMPP IM 即时通信

2017-03-07 14:53:54 978

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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