<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[upupfeng的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ifenggege</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ifenggege]]></copyright><item><title><![CDATA[Kafka topic分区增加副本]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/127100902</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/127100902</guid><author>ifenggege</author><pubDate>Thu, 29 Sep 2022 09:22:52 +0800</pubDate><description><![CDATA[Kafka中topic的每个分区可以设置多个副本。如果副本数为1，当该分区副本的leader节点宕机后，会导致该分区不可用。故需要设置多副本来保证可用性。实际项目中，存在项目初期创建了副本数为1的topic，但是后期又需要扩大副本数的场景。通常不能直接删除topic重建，可以通过如下操作实现。]]></description><category></category></item><item><title><![CDATA[prometheus告警流程及相关时间参数说明]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/125456836</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/125456836</guid><author>ifenggege</author><pubDate>Sat, 25 Jun 2022 11:07:19 +0800</pubDate><description><![CDATA[详解Prometheus告警的流程，解释相关时间参数的配置。]]></description><category></category></item><item><title><![CDATA[Linux sar命令]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/125224903</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/125224903</guid><author>ifenggege</author><pubDate>Fri, 10 Jun 2022 17:05:12 +0800</pubDate><description><![CDATA[sar命令，Linux服务器负载查看神器。]]></description><category></category></item><item><title><![CDATA[Kafka传输文件（字节数组）]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/124391807</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/124391807</guid><author>ifenggege</author><pubDate>Sun, 24 Apr 2022 21:01:55 +0800</pubDate><description><![CDATA[使用Kafka以字节数组的形式传输文件

最近遇到解析大量小文件的需求，之前都是将文件放到HDFS，然后读取进行解析。
由于都是小文件且文件量很多，所以不想使用HDFS，于是采用Kafka来做中间件，效果还不错，特此分享。
原理是将文件以字节流的形式读入字节数组中，将字节数组发送到Kafka，供下游消费。
适用于海量小文件的处理。
实现
生产者
package com.upupfeng.kafka;

import org.apache.kafka.clients.producer.KafkaProduc.]]></description><category></category></item><item><title><![CDATA[Spark处理hdfs文件时获取文件名]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/123926535</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/123926535</guid><author>ifenggege</author><pubDate>Sat, 02 Apr 2022 18:27:08 +0800</pubDate><description><![CDATA[Spark处理hdfs文件时，获取所处理文件的文件名]]></description><category></category></item><item><title><![CDATA[Clickhouse EmbeddedRocksDB引擎]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/123440180</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/123440180</guid><author>ifenggege</author><pubDate>Sat, 12 Mar 2022 10:58:59 +0800</pubDate><description><![CDATA[使用clickhouse时，处理kv场景总是不得劲，偶然间看到官方的EmbeddedRocksDB引擎 ，可以支持kv场景，特此实践。

RocksDB是一个嵌入式的KV存储，用来存储key和value，支持常用的读写场景。广泛应用于各大开源框架，在Flink中就用于状态存储。
去ck官网看了下changelog，EmbeddedRocksDB表引擎是在ClickHouse release v20.12.3.3-stable, 2020-12-13推出的，下载其之后的版本就可以使用了。
我用的ck是21..]]></description><category></category></item><item><title><![CDATA[Spark读取gz文件时忽略报错的文件]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/123351056</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/123351056</guid><author>ifenggege</author><pubDate>Tue, 08 Mar 2022 13:03:59 +0800</pubDate><description><![CDATA[背景
业务需要解析HDFS上的大量文件，文件使用gzip压缩，使用Spark core来实现，代码如下：
sparkContext.textFile(srcPath);

运行过程中报Caused by: java.io.EOFException: Unexpected end of input stream的错，导致Spark程序直接退出，不能完成解析。
这个错误的原因就是其中有一个gz文件有误，不能被读取，程序直接抛出错误。
解决办法


执行解析程序前，写程序/脚本去检测文件，将异常的文件移走。

之]]></description><category></category></item><item><title><![CDATA[Docker安装Clickhouse]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/123277111</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/123277111</guid><author>ifenggege</author><pubDate>Fri, 04 Mar 2022 15:03:34 +0800</pubDate><description><![CDATA[去docker hub搜索clickhouse-server
点击tags寻找要下载的版本
拉取镜像
docker pull yandex/clickhouse-server:21.3.20.1
启动clickhouse-server# 启动镜像，不挂载存储盘
docker run -d --name ck-server-21-3 --ulimit nofile=262144:262144 \
    -p 18123:8123 -p 19000:9000 -p 19009:9009 yandex/cli.]]></description><category></category></item><item><title><![CDATA[安装hadoop集群是否需要免密以及为什么需要]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/123176712</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/123176712</guid><author>ifenggege</author><pubDate>Mon, 28 Feb 2022 10:26:50 +0800</pubDate><description><![CDATA[＞ 最近好多朋友问到安装hadoop集群为什么需要配置免密登录，这里统一说下。
安装hadoop一般有两种方法：

手动安装。手动在多台机器上安装master、slave
通过管理平台安装。通过CDH/HDP安装

手动安装时是需要配置免密登录的。有以下两点原因：

配置免密后，执行ssh或者scp时不需要输密码，方便快捷。这点不是必要的原因。
安装集群完成后，通常在master侧执行start-all.sh脚本来启动整个集群，脚本会ssh到各个slave来执行启动命令。如果没有配置免密，那么启停集群时要手]]></description><category></category></item><item><title><![CDATA[Python程序现场部署]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/121296003</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/121296003</guid><author>ifenggege</author><pubDate>Fri, 12 Nov 2021 21:06:42 +0800</pubDate><description><![CDATA[最近在搞涉及到机器学习的项目，需要用到python。本地开发爽歪歪，部署上线遇到了很多问题。特此记录。

说明
本地开发时，直接pip install解决依赖，import导入，愉快的调用包，一切很顺利。
但是部署上线的过程比较坎坷，碰到了以下几个问题：

线上机器没有安装python，安装python的机器和本地python版本不一致
线上机器没有外网，不能pip install
线上机器运行了别人的python代码，依赖可能冲突


我的程序是用python3.7.9开发的，线上有台机器装有pytho.]]></description><category></category></item><item><title><![CDATA[正则表达式速查表]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/121038370</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/121038370</guid><author>ifenggege</author><pubDate>Fri, 29 Oct 2021 16:51:31 +0800</pubDate><description><![CDATA[字符
描述




\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如，“n“匹配字符”n"。"\n“匹配一个换行符。串行”\\“匹配”\“而”\(“则匹配”("。


^
匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性，^也匹配“\n“或”\r"之后的位置。


$
匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性，$也匹配“\n“或”\r"之前的位置。


*
匹配前面的子表达式零次或多次。例如，...]]></description><category></category></item><item><title><![CDATA[yarn查看每个应用占用的cpu和内存]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/120441464</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/120441464</guid><author>ifenggege</author><pubDate>Thu, 23 Sep 2021 19:19:30 +0800</pubDate><description><![CDATA[本文将介绍在不能使用yarn resource manager ui时，如何查看每个应用占用的cpu和内存

方法1
使用yarn top命令查看，和linux的top类似
输出字段如下：
APPLICATIONID
USER             
TYPE      
QUEUE PRIOR   
#CONT     
#RCONT      使用的容器container个数
VCORES 
RVCORES     使用的cpu核数
MEM    
RMEM        使用的内存大小
VCORE.]]></description><category></category></item><item><title><![CDATA[ClickHouse借助ReplacingMergeTree实现重复数据删除]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/120110850</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/120110850</guid><author>ifenggege</author><pubDate>Sun, 05 Sep 2021 10:01:26 +0800</pubDate><description><![CDATA[MergeTree引擎的表，由于重复入库导致了表中数据重复，需要将重复的数据删除，只保留一条记录。
在使用Hive的时候，遇到这种情况通常是使用row_number取第一条插入到临时表中，然后将原表数据删除，再将临时表数据写回来就可以实现去重。
但是CK（clickhouse）中不支持row_number函数，需要使用别的方法去重。
翻阅文档后，发现可以使用ReplacingMergeTree + Optimize来手动实现去重。需要注意的是这种方式不太适合于超大数据量数据的去重。
先介绍下Replacin]]></description><category></category></item><item><title><![CDATA[clickhouse-client命令行参数及常用案例]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/119958937</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/119958937</guid><author>ifenggege</author><pubDate>Fri, 27 Aug 2021 18:42:23 +0800</pubDate><description><![CDATA[ClickHouse提供了原生的命令行客户端clickhouse-client来操作ClickHouse。
clickhouse-client可以在交互和非交互（批处理）模式下使用。
交互模式下，一次登录，可以执行多次查询。一般用不到，要查询数据直接用客户端软件就行了，如DBeaver。
非交互模式一般用于使用脚本执行查询语句。
使用方式
clickhouse-client [参数]

配置参数
可以通过两种方式来配置参数：

直接在命令行执行参数
通过配置文件指定

命令行指定

--host, -h -]]></description><category></category></item><item><title><![CDATA[Java对象转为CSV格式的字符串]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/119698481</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/119698481</guid><author>ifenggege</author><pubDate>Sat, 14 Aug 2021 11:23:57 +0800</pubDate><description><![CDATA[借助commons-lang3将Java对象转为CSV格式的字符串。
调用ReflectionToStringBuilder类的toString方法实现
导入commons-lang3依赖
&lt;!-- commons lang--&gt;
&lt;!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.apache.co]]></description><category></category></item><item><title><![CDATA[Clickhouse基于system.parts表查看磁盘占用情况]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/119088517</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/119088517</guid><author>ifenggege</author><pubDate>Sun, 25 Jul 2021 21:55:23 +0800</pubDate><description><![CDATA[日常工作中需要观察Clickhouse的磁盘使用情况，查看文档后发现基于system.parts表可以查询相关信息。
需要注意的是，systems.parts只可以查询MergeTree系列的表的情况。
systems.parts字段说明见文末。
相关查询
查看数据库的磁盘使用情况及数据行数
查询本机整个数据库所有表总共的情况
select \
    sum(rows) as row, \
    formatReadableSize(sum(bytes_on_disk)) as used_disk, \]]></description><category></category></item><item><title><![CDATA[clickhouse-client INSERT CSV/TSV时跳过错误行]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/119060384</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/119060384</guid><author>ifenggege</author><pubDate>Sat, 24 Jul 2021 16:33:54 +0800</pubDate><description><![CDATA[在使用clickhouse-client向ck中导入csv文件时，当csv中有个别行数据格式错误时，整个文件就插入失败了，经常会导致丢数据。
经过一番搜索，发现ck提供了两个参数可以跳过错误行，其他的行正常入库，可以满足要求。
参数说明
input_format_allow_errors_num
设置从文本格式（CSV、TSV等）读取时可接受的最大错误数。
默认值为0。
如果在读取行时发生错误，但错误数仍然小于input_format_allow_errors_num时，则ck将忽略该行并转到下一行。
in]]></description><category></category></item><item><title><![CDATA[Linux date时间转换操作]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/118400613</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/118400613</guid><author>ifenggege</author><pubDate>Thu, 01 Jul 2021 23:48:15 +0800</pubDate><description><![CDATA[获取毫秒值
date不支持直接获取毫秒值，需要使用纳秒转为毫秒。
nowNs=`date "+%s%N"`
echo $nowNs

nowMs=`expr $nowNs / 1000000`
echo $nowMs


获取秒时间戳
nows=`date +%s`
echo $nows


将秒转为时间
time=`date -d @1625153358`
echo $time

格式化时间为指定格式
# 将时间转为"YYYY-mm-dd HH:mm:ss"
t1=`date "+%Y-%m-%d %H:]]></description><category></category></item><item><title><![CDATA[Redis incrByFloat ERR increment would produce NaN or Infinity]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/117757088</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/117757088</guid><author>ifenggege</author><pubDate>Thu, 10 Jun 2021 00:06:53 +0800</pubDate><description><![CDATA[背景
项目中用到了Redis作为中间件，使用incrBy来承担一部分的累加计算。
数据量很大，要累加的这个值也很大。
代码如下：
ShardedJedisPipeline pipeline = jedis.pipelined();
# value就是字符串类型的值
pipeline.incrByFloat(redisKey, Double.valueOf(value));

报错
运行过程中出现了以下的错：
ERR increment would produce NaN or Infinity
21/06/]]></description><category></category></item><item><title><![CDATA[ClickHouse Kafka表引擎使用详解]]></title><link>https://blog.youkuaiyun.com/ifenggege/article/details/116861791</link><guid>https://blog.youkuaiyun.com/ifenggege/article/details/116861791</guid><author>ifenggege</author><pubDate>Sat, 15 May 2021 20:21:29 +0800</pubDate><description><![CDATA[前言
项目采用Flink、Kafka、Clickhouse的实时数仓架构，数据由Kafka接入，经过Flink处理，写入Clickhouse。
初期直接由Flink写入Clickhouse，经常会出现分区太多合并不来等意外情况，效果不是很好。而且数据也需要共享到其他地方，故直接写入CK对我们来说不是很好的选择。
于是先将数据写入Kafka，之后由Kafka对数据进行分发。
从Kafka写入CK有很多种方法：

使用Flink Connector
使用github上开源的kafka ck组件
使用CK的Kaf]]></description><category></category></item></channel></rss>