自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王小禾

who can block you ?

  • 博客(304)
  • 收藏
  • 关注

原创 [DN优化] [锁优化][HDFS-15160] ReplicaMap, Disk Balancer and others use datanode readlock

背景现在我们已经引入了HDFS-15150,我们可以开始改进一些DN操作来使用读锁而不是写入锁来提高并发。第一步是对Replicamap进行更改ReplicaMap:一些方法会调用replicmap .replicas()(例如getBlockReports, getFinalizedBlocks, deepCopyReplica),并且只以只读方式使用,所以它们也可以切换到使用readLock。接下来是目录扫描仪和磁盘均衡器,只需要读锁。Disk Balancer, Directory S

2022-03-24 19:40:15 760

原创 [DN优化] [锁优化] [HDFS-15150] Introduce read write lock to Datanode

分析背景:DN性能优化的一部分目标:AutoCloseableLock 改为 ReadWriteLock知识回顾:假设在程序中定义一个共享的数据结构,它大部分时间提供读服务,而写操作占有的时间很少,但是写操作完成之后的更新需要对后续的读服务可见。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写(也就是说:读-读能共存,读-写不能共存,写-写不能共存)。这就需要一个读/写锁来解决

2022-03-24 16:41:36 1799

原创 Lock基础

Lock基础|并发编程的艺术内容

2022-03-24 14:51:18 554

原创 [iceberg]3-spark调用iceberg入口分析

以sql调用来分析: [hadoop@10 ~]$ spark-sql --masterlocal\ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog \ --co..

2021-10-09 16:21:53 774

原创 [iceberg]2-hivecatalog

spark-sql --master local \--driver-java-options "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5060" \--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \--conf spark.sql.catalog.my_catalog=org.

2021-09-28 11:07:02 571

原创 [iceberg]1-环境

环境hadoop客户端spark包hivemetastore(可选)使用spark时的两点配置:在$SPARK_HOME/conf/spark-env.sh中配置:HADOOP_HOME=/home/ec2-user/hadoop-currentHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop/如果使用metastore,需要在$SPARK_HOME/conf/hive-site.xml中配置metastore的地址。...

2021-09-26 10:43:26 250

原创 HDFS副本和块状态

在NameNode看来,块(Block)主要有以下4种状态:// HdfsServerConstants enum BlockUCState { COMPLETE, UNDER_CONSTRUCTION, UNDER_RECOVERY, COMMITTED }在DataNode看来,块(Block)应该称为“副本 (Replica)”比较合适,在DataNode种,副本主要有以下5种状态: enum ReplicaState { /** Replic

2021-05-14 16:49:07 210

原创 HDFS中的优秀的设计模式

1.[HDFS-14854]的代码改造:从一个单工作类,改造成可备选的工作类的方式。

2021-02-22 14:57:57 257

原创 java工程打包通用篇

说明本文针对一般的java工程,包括tomcat、springboot、普通的java -jar启动的工程的打包方式说明。

2021-02-07 14:31:19 289 1

原创 1. 编写YARN应用程序

参考:http://dongxicheng.org/mapreduce-nextgen/how-to-write-an-yarn-applicationmaster/1. 概述YARN是一个资源管理系统,负责集群资源的管理和分配。如果想要将一个新的应用程序运行在YARN之上,通常需要编写两个组件:客户端ApplicationMaster由于这两个组件编写非常复杂,尤其ApplicationMaster,需要考虑RPC调用、任务容错等细节,所以,往往由专业的开发人员编写这两个组件,并提供给上.

2021-02-06 18:59:48 417

原创 ZKFC原理解析

本文参考自:HDFS高可用(HA)之ZKFC详解Zookeeper 只需要用3台机器启动zookeeper集群即可。无特殊之处。见:zookeeper服务配置及启动 ,ZK本文不阐述。ZKFC(ZKFailoverController)用于对NameNode状态进行控制 。FC是要和NN一一对应的,两个NN就要部署两个FC。它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为.

2021-02-03 11:44:30 1167

原创 HDFS EC Reconstruction

hdfs ec重构块的代码设计巧妙,本文总结其设计思想。

2021-01-25 20:33:06 574 2

原创 HDFS中的优秀的多线程设计

关于ThreadPoolExecutor、ExecutorCompletionService等多线程设计在HDFS中得到了淋漓尽致的应用。本文总结HDFS中的优秀的多线程的设计,学习其设计思想。1.HDFS Hedged Read :两个线程多数据,谁先读到用谁的,其他线程取消。...

2021-01-25 20:22:08 351

原创 ExecutorService与CompletionService(ExecutorCompletionService)使用与探究

好文链接深度剖析好文:“既生 ExecutorService, 何生 CompletionService?”ExecutorCompletionService的使用和实现1.重大差异:ExecutorService submit()的结果是Future, Future get() 方法的致命缺陷:如果 Future 结果没有完成,调用 get() 方法,程序会阻塞在那里,直至获取返回结果。CompletionService 可以做到获取最先执行完的任务结果。2.使用方式:execut

2021-01-25 16:42:26 670

原创 一文总结线程池ThreadPoolExecutor

文章目录1. 概述2. 线程池核心设计与实现参考文献:Java线程池实现原理及其在美团业务中的实践java并发编程的艺术1. 概述好处使用线程池可以带来一系列好处:降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。提高响应速度:任务到达时,无需等待线程创建即可立即执行。提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。提供更多更强大

2021-01-23 23:37:15 262

原创 zookeeper服务配置及启动

zookeeper-3.4.10进行配置,zookeeper安装启动

2020-11-03 11:51:05 387

原创 记一次HDFS死锁问题的排查

背景离线HDFS集群在执行hdfs dfsadmin -refreshNamenodes hostname:50020向新的NameSpace注册的过程中,出现>10个DataNode节点发生死锁的情况,发生概率约1‰。本文用于记录该问题的排除过程及解决办法。基础回顾java中,无论是使用synchronized关键字隐式地获取锁再释放锁,还是使用Lock接口(以及相关实现类)显示地调用lock()/unlock()方法,都能达到锁功能的目的。而死锁是两个甚至多个线程被永久阻塞时的一种运行局面,

2020-10-26 16:28:01 26304 2

原创 关于线程池ConnectionPool的临时记录

hadoop中router就是自己实现线程池来维护响应线程,来响应请求的。package org.apache.hadoop.hdfs.server.federation.router;public class ConnectionPool { protected ConnectionContext getConnection() { this.lastActiveTime = Time.now(); // Get a connection from the pool foll

2020-08-17 14:22:29 198

原创 HDFS Hedged Read

Hedged reads是HDFS的一个功能,在Hadoop 2.4.0之后引入。一般来说,每个读请求都会由生成的一个线程处理。在Hedged reads 启用后,客户端可以等待一个预配置的时间,如果read没有返回,则客户端会生成第二个读请求,访问同一份数据的另一个block replica之后,其中任意一个read 先返回的话,则另一个read请求则被丢弃。Hedged reads使用的场景是:解决少概率的slow read(可能由瞬时错误导致,例如磁盘错误或是网络抖动等)。客户端hedged读两个

2020-07-29 16:14:45 1716

原创 节点间scp写数据慢与close_wait关系的排查

close_wait是关闭连接过程中的正常状态,但是正常情况下close_wait的状态很快就会转换所以很难被捕捉到。所以如果你能发现大批量的close_wait基本可以确定是出问题了

2020-07-29 14:53:42 212

原创 NameNode与DataNode删除块逻辑分析

1.删除逻辑分析 1.删除文件NameNode入口 2.RedundancyMonitor监控线程 3.DataNode心跳及IBR 2.大量删除数据块的隐患及解决办法1.背景出现多次Unable to close file情况,具体如下。Client: Caused by: java.io.IOException: Unable to close file because the last block does not have enough number of...

2020-07-22 17:43:38 2430 1

转载 zookeeper概览及系列目录

zookeeper概览及博客概览

2020-07-19 20:32:44 411

原创 Java进程的内存与占用系统内存的研究

1.问题1-Xms4g -Xmx4g -Xmn1g启动该java进程,那么该进程占用机器内存情况是什么样的呢?A:进过查看GClog及top、pmap看机器内存使用情况,发现以下实践真知:1.进程启动后,该进程占用机器村内逐步增大,如500M、1g,期间会进行YGC,对此影响不大;2020-xx-04T09:03:32.529+0800: 41.575: [GC (Allocation Failure) [PSYoungGen: 839680K->13428K(990720K)] 887823

2020-07-17 00:15:46 438

转载 Java中的ThreadLocal

ThreadLocal解决了什么问题

2020-07-07 16:49:21 116

原创 SparkCore-2-Spark几种提交方式

1.local仅用于开发环境单机调试。1.standalone方式standalone是spark自带的资源调度框架。这种方式下需要配置Mater和Worker,并启动Master服务(如7077端口的)。该模式下,也可以client或cluster模式运行。...

2020-07-04 17:59:26 3172

原创 SparkCore-1-概览

1.RDD(ResilientDistributedDataset)• 五大特性:– A list of partitions– A function for computing each partition– A list of dependencies on other RDDs– Optionally, a Partitioner for key-value RDDs • shuffle的时候– Optionally, a list of preferred locations to co

2020-07-02 20:47:53 113

原创 JVM参数列表

本文将对JVM常见调优作总结,包括JVM的参数

2020-06-27 15:49:53 234

原创 并发截图版2

先找L1缓存,再找L2缓存,再找L3缓存。缓存是按块来读的。缓存块的大小叫做缓存行,固定大小64字节。缓存一致性:缓存行在其他核更新时,本缓存如何更新?缓存行的4中状态。英特尔CPU使用MESI缓存一致性协议。花3s时间。对比:只花了1.2s。说明:两个值非常近时,多线程访问速度可能低。加入填充后,x不可能与其他变量在同一个缓存行。因此改变时不需要通知其他缓存行。有的源码如下:添加了无效字段的填充。volatile:1.线程可见性2.禁止重排序。cp..

2020-06-26 21:41:07 181

原创 并发截图版

1.进程:操作系统分配资源(空间、文件、接口等)的基本单位线程:CPU执行的基本单位。2.1个cpu在一个时间点只执行一个线程。能执行多个线程是因为线程切换(上下文切换)3.ALU:计算使用Registers:存储PC:记录位置线程切换时要【保护现场】,下次切回来再使用。切换线程也有线程开销的,线程个数经验:cpu 密集型n+1 非cpu密集型 2n+1重量级:操作系统来管理的;轻量级:不需要操作系统来管理的,都是轻量级。调用了汇编指令的cmpx..

2020-06-25 21:58:36 269

原创 离线架构HADOOP/HIVE/SPARK服务端环境

hadoop离线服务端

2020-06-21 17:31:15 174

原创 top/ps查看高内存进程/查看机器核数

说明本文主题:1.使用ps命令查看使用内存或CPU最多的10个进程2.top 或 ps 相关命令常见使用:toptop -c: 显示全命令top 交互 M :以内存排序top 交互 P :以CPU排序top 交互 H :线程也显示出来psps -aux | head -1; ps -aux | sort -k4rn | headps -aux 和 ps -ef 都显示进程信息不过aux能显示内存和cpu上述top和ps都能查看进程使用情况。下文是详细解释。headhe

2020-06-20 17:29:09 1031

原创 iftop

iftop链接:每天学习一个命令:iftop 流量监控

2020-06-02 22:09:58 194

原创 nethogs查看每个进程流量

sudo nethogs找到每个进程消耗流量的pid通过ps -ef | grep pid 来查看对应的任务。

2020-06-02 21:53:57 748

原创 rpm

使用yum安装sudo yum clean allsudo yum update -y --enablerepo=xx_hadoop xx-hadoop-xx使用rpm包安装sudo rpm -ivh http://xxx.rpmfile /usr/local/x-2.7.2/share/xxxhadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/classes/httpfs.properties from install of xxx-2.7.2-xx

2020-06-02 17:01:44 151

原创 proto类型与java类型的转化

proto协议ECpublic final class ECSchema implements Serializable { private static final long serialVersionUID = 0x10953aa0; public static final String NUM_DATA_UNITS_KEY = "numDataUnits"; public static final String NUM_PARITY_UNITS_KEY = "numParityUn

2020-06-01 11:31:13 1588

原创 netstat -anp查看端口

常见参数-a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字。-l 仅列出有在 Listen (监听) 的服務状态-p 显示建立相关链接的程序名-r 显示路由信息,路由表-e 显示扩展信息,例如uid等-s 按各个协议进行统计-c 每隔一个固定时间,执行该netstat命令。提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到因此,简单来使用最常

2020-05-31 19:44:38 14764

原创 HDFS await()和interrupt()引起的死循环问题分析

1.背景hdfs短路读利用UNIX域套接字,可以让客户端和DataNode通信(客户端与dn是同一台机器)。需要在datanode和客户端的配置中都配置一个套接字路径,并且开启短路读特性。官方链接hdfs在短路读时, 2.7版本的代码中DomainSocketWatcher(linux机器进程的socket通信的监听)类中有个bug需要修复。分析如下://DomainSocketWatcher#add相关代码public void add(DomainSocket sock, Handler han

2020-05-28 16:01:01 352

原创 hdfs quota物理空间转逻辑空间

1.现有quota的设置与使用 1.setQuota客户端到NN的主要流程 2.count -q / -u 查看quota 2.quota在hadoop中的限制作用 2.SpaceQuota改逻辑空间 1.改动 2.测试 put mv setrep du rm 重启后查看 cp 子目录测试 EC测试 进一步测试 4.可能的问题1.现有quota的设置与使用1.setQuota客户端到NN的主要流程s...

2020-05-22 17:09:41 683

原创 HDFS块恢复流程初级版

1.先看几个线程栈1.没有修改代码时走localRack -> nextRack -> Random时的流程"RedundancyMonitor" #48 daemon prio=5 os_prio=0 tid=0x00007f925ec14800 nid=0x10544 runnable [0x00007f5a2491d000] java.lang.Thread.State...

2020-04-26 10:32:16 285

原创 springBoot(1)截图版

demo:1.从springmvc引入:

2020-04-22 20:48:28 275

空空如也

空空如也

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

TA关注的人

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