<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zhangxiaohui4445的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zhangxiaohui4445</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zhangxiaohui4445]]></copyright><item><title><![CDATA[Java对象头结构]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121797898</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121797898</guid><author>zhangxiaohui4445</author><pubDate>Wed, 08 Dec 2021 18:46:13 +0800</pubDate><description><![CDATA[Java对象（Object 实例） 结构包含三部分：对象头、对象体、对其子节，具体如下图所示



对象的三个部分

对象头

对象头包括三个字段，第一个字段叫作Mark Word (标记字)，用于存储自身运行时的数据，例如GC标志位、哈希码、锁状态等信息。
第二个字段叫作Class Pointer (类对象指针)，用于存放方法区Class对象的地址，虚拟机通过这个指针来确定这个对象是哪个类的实例。

第三个字段叫作Array Length (数组长度)。如...]]></description><category></category></item><item><title><![CDATA[AQS加锁流程（ReentrantLock）]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121679684</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121679684</guid><author>zhangxiaohui4445</author><pubDate>Thu, 02 Dec 2021 18:46:26 +0800</pubDate><description><![CDATA[定义
全称是AbstractQueuedSynchronizer，AQS是JUC提供的一个用于构建锁和同步容器的基础类。JUC包内许多类都是基于AQS构建的，例如ReentrantLock、 Semaphore、 CountDownI atch、ReentrantReadWriteLock、 FutureTask 等。通过内置的 CLH(FIFO)队列的变种来完成资源获取线程的排队⼯作,将每条将要去抢占资源的线程封装成⼀个 Node节点来实现锁的分配，有⼀个int类变量表示持有锁的状态,通...]]></description><category></category></item><item><title><![CDATA[【图解】【源码】公平锁⾮公平锁]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121658650</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121658650</guid><author>zhangxiaohui4445</author><pubDate>Wed, 01 Dec 2021 17:58:47 +0800</pubDate><description><![CDATA[公平锁

概念

所谓公平锁，就是多个线程按照申请锁的顺序来获取锁，类似排队，先到先得。在获取锁的自由状态时，若锁可获取不会直接获取该锁，而是需要判断是否需要入队（AQS）。

图解

由如下图可知，tn线程创建成功，进行锁状态的判断，当能获取自由状态时，需要判断是否需要入队，若不需要直接进行加锁成功，若需要进行入队操作。获取锁流程的源码后续会有专门的章节来详细讲述。



源码

从代码中也清楚的看到，没有直接持有锁的操作，而是对队列进行操作。

本文中只了解是对队列的操作即可，后续有专门文章对队列操..]]></description><category></category></item><item><title><![CDATA[三色标记法]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121608686</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121608686</guid><author>zhangxiaohui4445</author><pubDate>Mon, 29 Nov 2021 20:00:00 +0800</pubDate><description><![CDATA[基本原理

当前主流编程语言的垃圾收集器基本.上都是依靠可达性分析算法来判定对象是否存活的，可达性分析算法理论上要求全过程都基于-一个能保障一致性的快照中才能够进行分析，这意味着必须全程冻结用户线程的运行。由于GC Roots相比起整个Java堆中全部的对象毕竟还算是极少数，且在各种优化技巧(如OopMap) 的加持下，它带来的停顿已经是非常短暂且相对固定(不随堆容量而增长)的了。可从GC Roots再继续往下遍历对象图，停顿时间就必定会与Java堆容量直接成正比例关系了:堆越大，存储的对...]]></description><category></category></item><item><title><![CDATA[【Spark 源码】1-Spark RPC]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121493368</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121493368</guid><author>zhangxiaohui4445</author><pubDate>Tue, 23 Nov 2021 22:00:00 +0800</pubDate><description><![CDATA[Spark 的 RPC 概述

Spark 是一个 通用的分布式计算系统，既然是分布式的，必然存在很多节点之间的通信，那么 Spark不同组件之间就会通过 RPC（Remote Procedure Call）进行点对点通信。以下所有都是基于spark2.4.X版本进行分析学习的，该版本也是当前CDH 稳定版本

spark中网络通信无处不在，例如



-driver和master的通信，比如driver会向master发送RegisterApplication消息 
...]]></description><category></category></item><item><title><![CDATA[[Kafka]消息超过最大值限制max.request.size]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121136403</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/121136403</guid><author>zhangxiaohui4445</author><pubDate>Thu, 04 Nov 2021 10:02:39 +0800</pubDate><description><![CDATA[问题： 在抽取关系型数据库到kafka 中时，出现以下问题：



max.request.size

生产者客户端能发送消息的最大值，默认值为1048576B，1MB。不建议盲目修改，这个参数涉及其他的一些参数的联动，比如broker端的message.max.bytes参数，如果broker的message.max.bytes参数设置为10，而max.request.size设置为20，当发送一条大小为15B的消息时，生产者参数就会报错。

因此需要连续修改以上多个参数，才能生效

修改如下：

mes]]></description><category></category></item><item><title><![CDATA[Hive-执行计划操作符解析]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/114981673</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/114981673</guid><author>zhangxiaohui4445</author><pubDate>Thu, 18 Mar 2021 15:45:54 +0800</pubDate><description><![CDATA[操作符
			描述
		TableScanOperator
			扫描hive表数据
		ReduceSinkOperator
			创建将发送到Reducer端的&lt;Key,Value&gt;对
		JoinOperator
			Join两份数据
		SelectOperator
			选择输出列
		FileSinkOperator
			建立结果数据,输出至文件
		FilterOperator
			过滤输入数据
		GroupByOperator
			Group By语句
		MapJ..]]></description><category></category></item><item><title><![CDATA[Redis 集群内存限制]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/113542104</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/113542104</guid><author>zhangxiaohui4445</author><pubDate>Tue, 02 Feb 2021 10:47:44 +0800</pubDate><description><![CDATA[一 配置文件修改




maxmemory 524288000
maxmemory-policy volatile-lru

此配置我在测试环境进行测试，所以内存设置为500M 为 上限。注意集群环境下每个节点的配置文件都需要进行修改。

参数说明：

maxmemory 为redis 的最大内存限制，不带单位默认为bytes。

maxmemory-policy 共有八种淘汰策略


			

			淘汰策略名称
			
			策略含义
		noeviction
			默认策略，不淘汰数据；大...]]></description><category></category></item><item><title><![CDATA[Phoenix + Hbase 用户权限]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/110382351</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/110382351</guid><author>zhangxiaohui4445</author><pubDate>Mon, 30 Nov 2020 11:31:15 +0800</pubDate><description><![CDATA[目录



一 Hbase 启用授权配置

1 hbase 开启安全授权

2 添加超级管理员配置

3 重启相关服务和部署客户端设置。

4 创建对应用户

二 HBase的 ACLs 权限控制说明

1 HBase ACLs的访问级别

2 HBase 授权范围

3 Hbase 权限授权测试

授权

查看权限：

收回权限

测试

三 Phoenix 权限

1 zhangxh用户启动客户端

2 修改权限

3 查询测试

四 Phoenix 映射Hbase NameSpace

1 修改两..]]></description><category></category></item><item><title><![CDATA[MongoDB 控制内存使用量]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/108976154</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/108976154</guid><author>zhangxiaohui4445</author><pubDate>Fri, 09 Oct 2020 11:55:13 +0800</pubDate><description><![CDATA[增加storage.wiredTiger.engineConfig.cacheSizeGB配置项

1 完整配置文件如下：



storage:
  #dbPath: /var/lib/mongodb
  dbPath: /data/mongodb/singleton/data
  journal:
    enabled: true

#  engine:

#  mmapv1:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1

systemLo]]></description><category></category></item><item><title><![CDATA[Flink 自定义读取mysql数据源]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/108026142</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/108026142</guid><author>zhangxiaohui4445</author><pubDate>Sat, 15 Aug 2020 18:00:41 +0800</pubDate><description><![CDATA[1 pom 依赖


&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.]]></description><category></category></item><item><title><![CDATA[centos7 在线安装nginx]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/107919103</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/107919103</guid><author>zhangxiaohui4445</author><pubDate>Mon, 10 Aug 2020 18:18:50 +0800</pubDate><description><![CDATA[1、添加源

　　默认情况Centos7中无Nginx的源，最近发现Nginx官网提供了Centos的源地址。因此可以如下执行命令添加源：


sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm



2、安装Nginx

　　通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。


sudo yum i.]]></description><category></category></item><item><title><![CDATA[优雅的停止SparkStreaming]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/107670824</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/107670824</guid><author>zhangxiaohui4445</author><pubDate>Wed, 29 Jul 2020 17:33:38 +0800</pubDate><description><![CDATA[背景：流式任务需要7*24小时执行，但是有时涉及到升级代码需要主动停止程序，但是分布式程序，没办法做到一个个进程去杀死，所有配置优雅的关闭就显得至关重要了。可以考虑使用外部文件存储或者关系型数据库、缓存等来控制内部程序关闭。

此例子使用hdfs创建指定文件来控制程序的关闭，想要更好的在前端进行控制，可以在注册程序中修改标志源。


import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Pat]]></description><category></category></item><item><title><![CDATA[Sqoop增量更新（自动更新参数）]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/106357042</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/106357042</guid><author>zhangxiaohui4445</author><pubDate>Tue, 26 May 2020 15:21:46 +0800</pubDate><description><![CDATA[1原始导出脚本：

sqoop import --connect jdbc:mysql://dev07:3306/dianpingdb --username root --password root --table category --target-dir /user/zxh/sqoop1 --incremental lastmodified --check-column updated_at --merge-key id --last-value "2019-06-12 12:39:43" --m 1 ]]></description><category></category></item><item><title><![CDATA[【解决方案】pyspark 初次连接mongo 时报错Class not found exception:com.mongodb.spark.sql.DefaultSource]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/104412312</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/104412312</guid><author>zhangxiaohui4445</author><pubDate>Thu, 20 Feb 2020 16:06:55 +0800</pubDate><description><![CDATA[部分报错如下：


Traceback (most recent call last):
   File "/home/cisco/spark-mongo-test.py", line 7, in &lt;module&gt;
    df = spark.read.format("com.mongodb.spark.sql.DefaultSource").load()
   ...]]></description><category></category></item><item><title><![CDATA[elasticsearch-7.3.1 IK热加载自动以分词和停用词]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/103417282</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/103417282</guid><author>zhangxiaohui4445</author><pubDate>Fri, 06 Dec 2019 10:31:32 +0800</pubDate><description><![CDATA[背景：

使用本地的自定义词典和停用词词典每次都需要重启ES,这对线上是一个很不好的体验，于是需要进行不重启热加载分词库。

一 搭建远程词库（采用nginx）

1 配置nginx,添加以下配置。


server {
        listen 8848;
        server_name _1;
        location /dict   { alias /data/dict...]]></description><category></category></item><item><title><![CDATA[python3的urllib3和requests及问题解决]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/103269368</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/103269368</guid><author>zhangxiaohui4445</author><pubDate>Wed, 27 Nov 2019 09:29:24 +0800</pubDate><description><![CDATA[1 版本变化

Python2 之前使用 urllib2 库，在版本升级后出现问题，因为在3版本中库进行了整合，具体变动如下：
Py3.x：
删除了Urllin2库，统一更改为Urllib
Urllib库
变化：
在Pytho2.x中使用import urllib2——-对应的，在Python3.x中会使用import urllib.request，urllib.error。
在Pytho2....]]></description><category></category></item><item><title><![CDATA[hdfs 安全模式及解决]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/102715439</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/102715439</guid><author>zhangxiaohui4445</author><pubDate>Thu, 24 Oct 2019 09:09:18 +0800</pubDate><description><![CDATA[一 安全模式

NameNode在重启的时候，DataNode需要向NameNode发送块的信息，NameNode只有获取到整个文件系统中有99.9%（可以配置的）的块满足最小副本才会自动退出安全模式。最小副本和那个99.9%阀值可以通过下面配置来设定：


			&lt;property&gt;

			&lt;name&gt;dfs.namenode.replication.min&lt...]]></description><category></category></item><item><title><![CDATA[ubuntu18.04 下安装pyenv并使用pyenv+virtualenv创建python虚拟环境]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/102562156</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/102562156</guid><author>zhangxiaohui4445</author><pubDate>Tue, 15 Oct 2019 10:27:27 +0800</pubDate><description><![CDATA[安装pyenv
1.安装下载工具curl
  sudo apt-get install curl
2.使用curl下载pyenv
  curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  会出现提示
  export PATH="~/.pyenv/bin:$P...]]></description><category></category></item><item><title><![CDATA[elasticsearch7.3 在启动时设置heap的大小]]></title><link>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/100743168</link><guid>https://blog.youkuaiyun.com/zhangxiaohui4445/article/details/100743168</guid><author>zhangxiaohui4445</author><pubDate>Wed, 11 Sep 2019 17:39:29 +0800</pubDate><description><![CDATA[es节点的默认的heap内存大小是 1G 大小，在实际生产中，很容易导致内存溢出而导致进程被kill掉。所以我们一般会自己配置自己的，以前的版本可以通过export ES_HEAP_SIZE=10g或者./bin/elasticsearch -Xmx10g -Xms10g来设置自己的堆内存的大小，在新的版本使用上述命令会设置不成功。

查询官网后得知可以通过如下命令进行设置

ES_JAVA_OP...]]></description><category></category></item></channel></rss>