自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (2)
  • 收藏
  • 关注

原创 ranger patch

From 0a4b63a9c66497bb63542887da9af50121a03968 Mon Sep 17 00:00:00 2001From: yangxuze <[email protected]>Date: Sat, 30 Apr 2022 20:59:07 +0800Subject: [PATCH 1/1] RANGER-3685: hive 'show' sql produces excessive audit log--- .../hadoop/constants/

2022-05-02 07:31:21 191

原创 rm状态机流转流程

创建RMAppImpl对象;发送RMAppEventType.START事件RMAppImpl收到RMAppEventType.START后,触发执行RMAppImpl.RMAppNewlySavingTransition.transition()方法,在该方法内部会触发RMStateStoreAppEvent.STORE_APP事件,RMStateStore收到RMStateStoreAppEvent.STORE_APP事件后,触发执行RMStateStore.StoreAppTransition.t.

2022-04-16 17:30:37 352

原创 hadoop远程调试

2 hadoop远程调试服务器端配置修改服务器上的配置文件${HADOOP_HOME}/etc/hadoop/hadoop-env.sh 增加 环境变量即可:组件环境变量设置nnexport HADOOP_NAMENODE_OPTS=“-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=y”dnexport HADOOP_DATANODE_OPTS=“-agentlib:jdwp=trans

2022-04-12 19:22:02 1313

原创 yarn学习大纲

任务如何启动运行的, 这个是一个大的整体, 涉及RM、NM两大模块NM启动任务的时候 又分为 资源本地化、 任务进程启动、 日志聚合 三大流程(中间贯穿了 各种状态机)yarn的相关概念(application,attempt,container)application的完整流程(提交,创建,运行,结束)yarn中的事件分发与状态机框架RM中的application的状态机RM中的applicationAttempt的状态机RM中的container的状态机RM中的权限管理与k

2021-11-12 15:05:41 1010

原创 ranger

RangerBaseService再服务端创建服务,有两个步骤1. 定义一个json文件(资源,操作类型,config)2. 实现RangerBaseService类。实现lookupResource()、validateConfig()、getdefaultRangerPolicies()方法工程实现方法: 1. 将实现了RangerBaseService类的实现类打一个jar包放到{Ranger_home}/ews/webapp/WEB-INF/classes/ranger-plugin...

2021-08-23 08:22:22 112

原创 从集线器、交换机和路由器说起

1 集线器要保证网络节点间的相互通信,最简单的想法就是每两个节点间都建立一根网线,如下图所示,这样A、B、C、D、E五个节点之间就可以任意通信了。但这种方法显然不可行,因为电脑显然没有这么多网口,即使有这么多网口,每个节点连接的网线数量为n-1,显然是不现实的。其实只要保证任意两节点间有路径可以到达,那么理论上就是可以通信的,像下面的图所示:更进一步,如果每个节点只连一根网线,是否可以做到互相通信呢,答案是可以的,这里就要引入集线器了。每个节点与集线器相连,包转发操作由集线器实现,集线器的转发

2021-05-02 10:20:51 153

原创 NN启动测试优化遇到的问题汇总3

2 应用启动优化代码后遇到的问题1.1 优化后的性能反而比优化前差问题场景:改造namenode启动时加载fsimage文件的逻辑,将串行加载改成了并行加载,并行加载启动了4个线程。但是最后测出来的结果却是优化前的耗时更短原因:当时排查了内存、cpu、io,都不是瓶颈,又深入代码层面,模拟由于并行增加的加锁逻辑的耗时,发现即使争用锁会有一点性能消耗,但是无论如何也抵消不了并行带来的性能提升。后来发现了问题所在,我在查看cpu使用率时是通过prometheus采集到的jmx指标,但是忽略了nameno

2021-04-30 17:55:28 167 1

原创 NN启动测试优化遇到的问题汇总2

1.3 文件写入速度明显下降问题场景:在写入5000w文件后,发现之后的写入速度很慢,之前每秒能写六七百个文件,现在每秒只能写几十个文件,甚至个位数的文件。排查CPU、网络和内存都不是瓶颈。原因:在排查datanode的io时,发现了一个奇怪的现象,读io很高(每秒数万个读请求),写io很低(每秒几十个写请求),集群明明一直在写文件,并没有读的操作,怎么会出现如此反常的现象?通过top查看cpu使用率高的几个进程,发现排在前两位的居然是两个du进程,第三位的才是datanode进程。通过查阅资料和阅读

2021-04-30 17:54:55 582 1

原创 NN启动测试优化遇到的问题汇总

hadoop-2.8.51 写文件时遇到的问题1.1 出现大量Under-Replicated Blocks问题场景:写入1000w 4kB大小的文件时,出现大量Under-Replicated的block(默认3副本,大量2副本)。经排查,网络、内存、io和cpu都不是瓶颈。原因:最后定位出和代码中判断DN是否负载过大的逻辑有关。配置项"dfs.namenode.replication.considerLoad"默认为true,代表需要考虑DN的负载情况。NN首先根据放置策略选择放置副本

2021-04-30 17:53:41 381 1

原创 Namenode启动流程优化跟踪

主:14617加载fsimage是单线程的过程分区中创建子分区,每个子分区一个线程测试:316M inodes 35G磁盘数据Threads 1 2 3 4 --------------------------------inodes 448 290 226 189 inode_dir 326 211 170 161 Total 927 651 535 488 (MD5 calculation ab

2021-03-21 22:37:20 94

原创 2021-03-11

2.5 watcher和callbackzk客户端和zk集群之间会用到watcher机制,watcher的作用是监控连接变化和节点变化,在这个系统中有两个地方会注册watchernew Zookeeper()构造zk客户端对象时注册的watcher:不是一次性的,只当连接状态变化时被触发zkclient.exists()方法中传入的watcher:这个方法在joinElection尝试创建锁节点或锁节点数据变化后会在monitorActiveStatus()方法中被调用,因为这个watcher是一次

2021-03-11 20:23:41 64

原创 2021-03-11

3 切换耗时研究这里的切换耗时指发生HA切换,hadoop不能正常提供服务的时间。3.1 kill ANN切换时间服务不可用起始时间(ANN被kill时):2021-03-09 15:47:18,732 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: RECEIVED SIGNAL 15: SIGTERM切换成功时间(SNN成功切换为ANN时):2021-03-09 15:47:29,661 INFO org.apache.hadoo

2021-03-11 20:22:48 174

原创 2021-03-11

2.2 线程模型由上图可以看出,整个系统中有3类线程:主线程:在启动所有服务后开始循环等待HealthMonitor线程:定期检查NN服务状态和健康状况,并在服务状态和健康状态发生变化时与ActiveStandbyElector交互完成HA过程zk客户端线程:监控zookeeper上结点的状态,发生变化时,回调ZKFailoverController的回调函数,通知ZKFailoverController,做出相应的变化2.3 RPC代理对象从上图可以看出,有3类RPC代理对象:pro

2021-03-11 20:21:37 257

原创 2021-03-10

1.8 删除/hadoop-ha/hdfsHACluser节点及其子节点现象:两个Namenode都为Standby状态解释:两个Namenode被kill后,健康状态变为SERVICE_NOT_RESPONDING,运行quitElection方法,删除znode,销毁zookeeper客户端对象两个Namenode重新上线后,HealthMonitor检测到健康状态为HEALTHY,会调用joinElection方法,尝试创建/hadoop-ha/hdfsHACluster/ActiveSta

2021-03-10 20:33:05 82

原创 2021-03-10

zk客户端会产生两种类型的watchernew Zookeeper()构造zk客户端对象时注册的watcher:不是一次性的,只当连接状态变化时被触发zkclient.exists(),监控锁节点方法注册的watcher:一次性,当监控节点增(create)、删(delete)、改(set)时被触发3类线程主线程:在启动所有服务后开始循环等待HealthMonitor线程:定期检查NN服务状态和健康状况zk客户端线程:监控zookeeper上结点的状态,发生变化时,回调ZKFailover

2021-03-10 20:32:10 133

原创 hadoop ha异常场景解释

正常启动流程:入口为DFSZKFailoverController的main()方法,总体流程在ZKFailoverController类的doRun()方法。在doRun()方法中定义了如下动作:initZK()解析zookeeper的相关配置,构造ActiveStandbyElector对象,在ActiveStandbyElector构造方法中创建了zookeeper集群的客户端对象,连接了zookeeper集群,在zookeeper客户端对象中关联了watch,作用是当连接发生变化或者zno

2021-03-07 23:45:00 955

原创 基础镜像中4大工具解析

1 placeholderplaceholder is a tool that used to convert placeholder, like ${envName::defaultValue}, in config file with enviroment value. if convert happen, the original file name will be changed to append ‘bak’ surfix; otherwise keep the original file na

2020-12-18 16:05:05 146 1

原创 git总结

查看分支git branch -a,若不显示最新分支,则先git pull一下切换分支切换到git项目目录下:cd /d/code_git/consoler/切换分支:可从IDEA右下角直接checkout切换。若用命令行则区分以下两种情况:若本地已创建分支,则直接git checkout develop若本地还未创建分支,则git checkout -b feature_consoler-resource-dev origin/feature_consoler-resource-dev

2020-12-14 19:43:11 87 1

原创 dockerfile命令

1 命令汇总1.1 FROM功能为指定基础镜像,并且必须是第一条指令。如果不以任何镜像为基础,那么写法为:FROM scratch,同时意味着接下来所写的指令将作为镜像的第一层开始。语法:FROM <image>FROM <image>:<tag>FROM <image>:<digest> 三种写法,其中和 是可选项,如果不写,默认值为latest1.2 ENV功能为设置环境变量。语法:ENV <key> &lt

2020-12-14 19:11:54 93

原创 僵尸进程和孤儿进程

1 僵尸进程(zombie process)是什么:已经被内核释放其占有的所有资源(包括占用的内存,打开的文件等),但是仍然保留了一定信息(PID;termination status;resource usage information)的进程。怎么产生:一个进程在结束自己生命的时候都会短暂地进入僵尸进程的状态,正常的情况是,它的父进程会调用wait或waitpid等待子进程结束,当子进程结束时,系统会发送SIGCHLD信号唤醒阻塞在wait或waitpid上的父进程,进而回收这个子进程保留的信息,

2020-12-14 19:11:30 71

原创 dumb-init

官方README.md文档给出的定义:dumb-init is a simple process supervisor and init system designed to run as PID 1 inside minimal container environments (such as Docker). (dumb-init是一个简单的进程管理器和初始化系统,旨在在最小的容器环境(例如Docker)中作为PID 1运行。)在Linux系统中PID1为systemd或sysvinit,他们担负着特殊

2020-12-11 23:27:30 702

原创 docker命令详解

1. docker run语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS:-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项(默认为3个);-d: 后台运行容器,并返回容器ID;-i: 以交互模式运行容器,通常与 -t 同时使用;-P: 随机端口映射,容器内部端口随机映射到主机的端口-p: 指定端口映射,格式为:主机(宿主)端口:容器端口-t: 为容器重新分配一个伪输入终端,通

2020-12-11 23:26:54 121

原创 常用Linux指令

1. killkill -l:列出所有kill能用的信号量及其对应的信号值常用的信号值:kill -1:重新读取一次参数的配置文件(类似reload)kill -2:与键盘输入CTRL+C一样的效果kill -9:立刻强制删除一个进程,等同于kill -SIGKILL。kill -15:以正常的进程方式终止一项工作,等同于kill -SIGTERM。(默认值)...

2020-12-11 22:41:47 126

原创 hadoop2.8.5源码编译(亲测无坑)

1 前期准备1.1 所需软件hadoop-2.8.5-src.tar.gzjdk-8u144-linux-x64.tar.gzapache-maven-3.6.3-bin.tar.gzapache-ant-1.9.15-bin.tar.gzprotobuf-2.5.0.tar.gzopenssl-develncurses-develglibc-headers 和 g++make和cmake下载地址为:1.2 环境配置规划:在/opt下创建两个目录,分别为/opt/softwa

2020-11-25 22:58:21 332

原创 Linux awk命令使用详解

awk是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。1 基本用法awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filenamepattern:表示AWK在数据中查找的内容,就是匹配模式action:在找到匹配内容时所执行的一系列命令2 选项参数说明选项参数功能-F指定输入文件分隔符,默认为空格-v赋值一个用户定义变量3 命令格式命令格式:aw

2020-11-23 21:37:25 568

原创 HDFS文件目录结构详解

Namenode中主要存储fsimage和editlog文件,Datanode中主要存储数据块blk文件。下面分别介绍Namenode和Datanode中的文件存储结构。文章目录1 Namenode1.1 文件所在位置1 Namenode1.1 文件所在位置文件所在位置由hdfs-site.xml中的配置项dfs.namenode.name.dir配置。这些文件都存于${dfs.namenode.name.dir}/current文件夹下,在dfs.namenode.name.dir配置项中可以配置

2020-11-22 09:11:03 5994

原创 Linux sed命令使用详解

文章目录1 基本用法2 选项参数说明3 命令功能描述4 具体应用4.1 删除行4.2 添加行4.3 替换内容1 基本用法sed [选项参数] ‘command’ filename2 选项参数说明选项参数功能-esed后可以跟多个-e,每个-e指定一个操作。-i改变原文件内容3 命令功能描述命令功能描述a新增,a的后面可以接字串,在下一行出现d删除s查找并替换4 具体应用以Linux中/etc/fstab文件为例,

2020-11-21 22:42:30 157

原创 yarn日志聚合配置项大全

(1)yarn.log-aggregation-enable:是否开启日志聚合。是否启用日志聚合。 日志聚合在应用程序完成后收集每个容器的日志,并将这些日志移动到文件系统中,例如 HDFS。 用户可以配置“yarn.nodemanager.remote-app-log-dir”和“ yarn.nodemanager.remote-app-log-dir-suffix”属性来确定将这些日志移至何处。 用户可以通过Application Timeline Server访问日志。<property>

2020-11-15 09:10:59 1531

原创 RPC服务端Server

源头:1 NameNode的initialize方法中会构造NameNodeRpcServer对象rpcServer,在NameNodeRpcServer构造方法中会构造Server对象。即第1步会调用Server的构造方法。2 NameNode的initialize方法中会调用startCommonService方法,该方法中会调用rpcServer.start(),rpcServer.start()方法又会调用第1步构造的Server对象的start方法。即第2步会调用Server的start方法。

2020-11-13 19:08:00 1249

原创 HDFS RPC客户端处理流程详解

源头:在ProtobufRpcEngine.Invoker的invoke()方法中会调用client.call()方法。将RPC请求信息封装成一个Call对象创建Connection对象管理客户端和服务端的Socket连接Call对象会放入Connection.calls字段中Connection对象会放入Client.connections字段中以供复用。通过Connection.setupIOstreams()方法建立客户端与服务端的Socket的连接setup

2020-11-13 19:03:56 390

原创 Hadoop RPC详解

文章目录1 定义RPC协议2 实现RPC协议2.1 真实现(服务端)2.2 假实现(客户端)3 client端获得代理对象3.1 NonHA proxy3.2 (todo)HA proxy4 server端启动监听5 总结5 总结  Hadoop中使用RPC的场景很多,比如client和Namenode之间,Namenode和Datanode之间,Namenode和Namenode之间等等。本文只讨论client和Namenode之间的RPC机制,把这一种搞懂了,其它几种也迎刃而解,因为都是同样的道理。H

2020-11-07 22:56:55 381

原创 editLog刷盘时机和日志重置

文章目录1 刷盘时机2 日志重置2.1 ANN端触发2.2 SNN端触发2.2.1 EditLogTailerThread线程的启动2.2.2 EditLogTailerThread线程run()方法2.2.2.1 编辑日志重置2.2.2.2 编辑日志追踪3 总结  用户对命名空间的修改(包括创建、删除、写入等)都会被记录到editlog文件中,但一开始是记录在缓冲区的,它是什么情况下从缓冲区刷到磁盘上是我们接下来要讨论的第一个问题,具体见刷盘时机一节。另外,即使我们对命名空间没做任何修改,ANN(Act

2020-11-01 15:39:29 778

原创 volatile关键字小记

volatile关键字小记  这两天在看FSEditLog类的时候遇到了volatile关键字和ThreadLocal变量,对这部分的知识已经有点模糊,故记此一篇已备忘,本篇介绍volatile,有关ThreadLocal的之后再整理。  其实java并发的问题根因是两个,一是高速缓存,二是乱序执行。下面简单介绍一下这两个根因。  高速缓存其实描述的是物理机内存的模型,为了提高速度,每个处理器都对应一个高速缓存,而所有的高速缓存都共享一个主内存区域,因此主内存和高速缓存之间就有一个一致性的问题。对应到

2020-10-31 22:07:45 64

转载 Linux top命令详解

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器top参数详解第一行,任务队列信息,同 uptime 命令的执行结果系统时间:07:27:05运行时间:up 1:57 min,当前登录用户:  3 user负载均衡(uptime)  load average: 0.00, 0.00, 0.00     average后面的三个数分别是1分钟、5分钟、1...

2020-09-22 23:26:37 294

转载 kerberos认证原理

前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去。后来想想原因有以下两点:对于一个没有完全不了解Kerberos的人来说,Kerberos的整个Authentication过程确实不好理解——一会儿以这个Key进行加密、一会儿又要以另一个Key进行加密,确实很容易把人给弄晕;另一方面是我讲解方式有问题,一开始就从Ker...

2020-09-19 17:43:55 207

原创 HDFS RPC客户端和服务端流程解析

Namenode端会有Server对象一直监听RPC请求,我们先来看一下这个Server对象是何时被构造的。在Namenode启动的时候,构造方法中会调用initialize()方法,在initialize()方法中会调用createRpcServer()方法,createRpcServer()方法则直接构造一个NameNodeRpcServer对象并返回。下面我们看一下NameNodeRpcServer的构造方法。在NameNodeRpcServer的构造方法中会构造一个ProtobufRpcEn

2020-09-15 18:34:21 330

原创 RPC3

2.4 服务端获取服务对象serverNamenode会在它的初始化方法initialize()方法中调用createRpcServer()方法创建NameNodeRpcServer对象的实例。createRpcServer()方法会直接调用NameNodeRpcServer的构造方法。NameNodeRpcServer的构造方法很长,因为它实现了多个接口,如果我们只关注与ClientProtocol相关的代码,则构造方法中的流程可以分为两个部分:获取响应ClientNamenodeProtoc

2020-09-06 21:16:40 182

原创 RPC2

2 Hadoop RPC使用抽象 Hadoop RPC框架的使用可以抽象成以下几个步骤:定义RPC协议 实现RPC协议 客户端获取代理对象proxy 服务端获取服务对象server2.1 定义RPC协议 ClientProtocol协议定义了HDFS客户端与名字节点交互的所有方法,但是ClientProtocol协议中方法的参数是无法在网络中传输的,需要对参数进行序列化操作,所以HDFS又定义了ClientNamenodeProtocolPB协议。ClientNa...

2020-09-06 21:15:04 381 1

原创 HDFS租约机制

目录1 租约介绍... 11.1 LeaseManager 11.2 Lease. 21.3 Monitor 21.4 LeaseRenewer 21.5 时间参数... 22 租约恢复... 32.1 recoverLeaseInternal() 32.2 internalReleaseLease() 43 一个场景... 44 注意的点... 5

2020-09-05 17:39:02 742

原创 RPC1

1 Hadoop RPC概述是什么 RPC:Remote Procedure CallProtocol,远程过程调用协议。有什么用允许本地程序像调用本地方法一样调用远程机器上应用程序提供的服务。为什么引入 Hadoop作为分布式存储系统,各个节点之间的通信和交互是必不可少的,所以需要实现一套节点间的通信交互机制。Hadoop中RPC特性 Hadoop RPC框架并没有使用JDK自带的RMI(Remote Method Invocation,...

2020-09-05 17:35:51 219

git学习所用,供参考

git学习所用,供参考

2023-11-11

draw.io源码框图

draw.io源码框图

2022-04-16

hadoop2.8.5编译所需软件

hadoop2.8.5编译所需软件的压缩包,压缩包内清单为 * hadoop-2.8.5-src.tar.gz * jdk-8u144-linux-x64.tar.gz * apache-maven-3.6.3-bin.tar.gz * apache-ant-1.9.15-bin.tar.gz * protobuf-2.5.0.tar.gz

2020-11-25

空空如也

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

TA关注的人

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