自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kafka topic分区增加副本

Kafka中topic的每个分区可以设置多个副本。如果副本数为1,当该分区副本的leader节点宕机后,会导致该分区不可用。故需要设置多副本来保证可用性。实际项目中,存在项目初期创建了副本数为1的topic,但是后期又需要扩大副本数的场景。通常不能直接删除topic重建,可以通过如下操作实现。

2022-09-29 09:22:52 3564 1

原创 prometheus告警流程及相关时间参数说明

详解Prometheus告警的流程,解释相关时间参数的配置。

2022-06-25 11:07:19 3530 2

原创 Linux sar命令

sar命令,Linux服务器负载查看神器。

2022-06-10 17:05:12 942 1

原创 Kafka传输文件(字节数组)

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

2022-04-24 21:01:55 6734

原创 Spark处理hdfs文件时获取文件名

Spark处理hdfs文件时,获取所处理文件的文件名

2022-04-02 18:27:08 2567

原创 Clickhouse EmbeddedRocksDB引擎

使用clickhouse时,处理kv场景总是不得劲,偶然间看到官方的EmbeddedRocksDB引擎 ,可以支持kv场景,特此实践。RocksDB是一个嵌入式的KV存储,用来存储key和value,支持常用的读写场景。广泛应用于各大开源框架,在Flink中就用于状态存储。去ck官网看了下changelog,EmbeddedRocksDB表引擎是在ClickHouse release v20.12.3.3-stable, 2020-12-13推出的,下载其之后的版本就可以使用了。我用的ck是21..

2022-03-12 10:58:59 1466

原创 Spark读取gz文件时忽略报错的文件

背景业务需要解析HDFS上的大量文件,文件使用gzip压缩,使用Spark core来实现,代码如下:sparkContext.textFile(srcPath);运行过程中报Caused by: java.io.EOFException: Unexpected end of input stream的错,导致Spark程序直接退出,不能完成解析。这个错误的原因就是其中有一个gz文件有误,不能被读取,程序直接抛出错误。解决办法执行解析程序前,写程序/脚本去检测文件,将异常的文件移走。之

2022-03-08 13:03:59 1411

原创 Docker安装Clickhouse

去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.

2022-03-04 15:03:34 579

原创 安装hadoop集群是否需要免密以及为什么需要

> 最近好多朋友问到安装hadoop集群为什么需要配置免密登录,这里统一说下。安装hadoop一般有两种方法:手动安装。手动在多台机器上安装master、slave通过管理平台安装。通过CDH/HDP安装手动安装时是需要配置免密登录的。有以下两点原因:配置免密后,执行ssh或者scp时不需要输密码,方便快捷。这点不是必要的原因。安装集群完成后,通常在master侧执行start-all.sh脚本来启动整个集群,脚本会ssh到各个slave来执行启动命令。如果没有配置免密,那么启停集群时要手

2022-02-28 10:26:50 4971

原创 Python程序现场部署

最近在搞涉及到机器学习的项目,需要用到python。本地开发爽歪歪,部署上线遇到了很多问题。特此记录。说明本地开发时,直接pip install解决依赖,import导入,愉快的调用包,一切很顺利。但是部署上线的过程比较坎坷,碰到了以下几个问题:线上机器没有安装python,安装python的机器和本地python版本不一致线上机器没有外网,不能pip install线上机器运行了别人的python代码,依赖可能冲突我的程序是用python3.7.9开发的,线上有台机器装有pytho.

2021-11-12 21:06:42 1925

原创 正则表达式速查表

字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n“匹配字符”n"。"\n“匹配一个换行符。串行”\\“匹配”\“而”\(“则匹配”("。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n“或”\r"之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n“或”\r"之前的位置。*匹配前面的子表达式零次或多次。例如,...

2021-10-29 16:51:31 93

原创 yarn查看每个应用占用的cpu和内存

本文将介绍在不能使用yarn resource manager ui时,如何查看每个应用占用的cpu和内存方法1使用yarn top命令查看,和linux的top类似输出字段如下:APPLICATIONIDUSER TYPE QUEUE PRIOR #CONT #RCONT 使用的容器container个数VCORES RVCORES 使用的cpu核数MEM RMEM 使用的内存大小VCORE.

2021-09-23 19:19:30 7884 1

原创 ClickHouse借助ReplacingMergeTree实现重复数据删除

MergeTree引擎的表,由于重复入库导致了表中数据重复,需要将重复的数据删除,只保留一条记录。在使用Hive的时候,遇到这种情况通常是使用row_number取第一条插入到临时表中,然后将原表数据删除,再将临时表数据写回来就可以实现去重。但是CK(clickhouse)中不支持row_number函数,需要使用别的方法去重。翻阅文档后,发现可以使用ReplacingMergeTree + Optimize来手动实现去重。需要注意的是这种方式不太适合于超大数据量数据的去重。先介绍下Replacin

2021-09-05 10:01:26 10998

原创 clickhouse-client命令行参数及常用案例

ClickHouse提供了原生的命令行客户端clickhouse-client来操作ClickHouse。clickhouse-client可以在交互和非交互(批处理)模式下使用。交互模式下,一次登录,可以执行多次查询。一般用不到,要查询数据直接用客户端软件就行了,如DBeaver。非交互模式一般用于使用脚本执行查询语句。使用方式clickhouse-client [参数]配置参数可以通过两种方式来配置参数:直接在命令行执行参数通过配置文件指定命令行指定--host, -h -

2021-08-27 18:42:23 19167 5

原创 Java对象转为CSV格式的字符串

借助commons-lang3将Java对象转为CSV格式的字符串。调用ReflectionToStringBuilder类的toString方法实现导入commons-lang3依赖<!-- commons lang--><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency> <groupId>org.apache.co

2021-08-14 11:23:57 1595

原创 Clickhouse基于system.parts表查看磁盘占用情况

日常工作中需要观察Clickhouse的磁盘使用情况,查看文档后发现基于system.parts表可以查询相关信息。需要注意的是,systems.parts只可以查询MergeTree系列的表的情况。systems.parts字段说明见文末。相关查询查看数据库的磁盘使用情况及数据行数查询本机整个数据库所有表总共的情况select \ sum(rows) as row, \ formatReadableSize(sum(bytes_on_disk)) as used_disk, \

2021-07-25 21:55:23 4324 1

原创 clickhouse-client INSERT CSV/TSV时跳过错误行

在使用clickhouse-client向ck中导入csv文件时,当csv中有个别行数据格式错误时,整个文件就插入失败了,经常会导致丢数据。经过一番搜索,发现ck提供了两个参数可以跳过错误行,其他的行正常入库,可以满足要求。参数说明input_format_allow_errors_num设置从文本格式(CSV、TSV等)读取时可接受的最大错误数。默认值为0。如果在读取行时发生错误,但错误数仍然小于input_format_allow_errors_num时,则ck将忽略该行并转到下一行。in

2021-07-24 16:33:54 2559

原创 Linux date时间转换操作

获取毫秒值date不支持直接获取毫秒值,需要使用纳秒转为毫秒。nowNs=`date "+%s%N"`echo $nowNsnowMs=`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:

2021-07-01 23:48:15 3410

原创 Redis incrByFloat ERR increment would produce NaN or Infinity

背景项目中用到了Redis作为中间件,使用incrBy来承担一部分的累加计算。数据量很大,要累加的这个值也很大。代码如下:ShardedJedisPipeline pipeline = jedis.pipelined();# value就是字符串类型的值pipeline.incrByFloat(redisKey, Double.valueOf(value));报错运行过程中出现了以下的错:ERR increment would produce NaN or Infinity21/06/

2021-06-10 00:06:53 267

原创 ClickHouse Kafka表引擎使用详解

前言项目采用Flink、Kafka、Clickhouse的实时数仓架构,数据由Kafka接入,经过Flink处理,写入Clickhouse。初期直接由Flink写入Clickhouse,经常会出现分区太多合并不来等意外情况,效果不是很好。而且数据也需要共享到其他地方,故直接写入CK对我们来说不是很好的选择。于是先将数据写入Kafka,之后由Kafka对数据进行分发。从Kafka写入CK有很多种方法:使用Flink Connector使用github上开源的kafka ck组件使用CK的Kaf

2021-05-15 20:21:29 8779 12

原创 Kafka命令行常用操作

创建topickafka-topics --zookeeper mdw:2181,sdw1:2181,sdw3:2181 --create --replication-factor 1 --partitions 12 --topic test_ck_sync1查看所有topickafka-topics --zookeeper mdw:2181,sdw1:2181,sdw3:2181 --list删除topickafka-topics --zookeeper mdw:2181,sdw1:2181,

2021-05-14 14:35:05 425

原创 Flink自定义OutputFormat将DataSet写入Kafka

说明在项目中需要读取HDFS文件,将文件内容写入Kafka。在Spark中是有现成支持的,但是由于项目用的是Flink,为了统一技术栈,于是采用Flink来实现。Flink的DataSet中只提供了几个写入HDFS的方法,其他的需要自己实现。看看代码就能发现DataSet中的写出都是通过OutputFormat接口的实现类来支持的,并且提供了output方法供我们传入OutputFormat的对象。// 使用OutputFormat写出DataSetpublic DataSink<T&gt

2021-05-05 11:32:31 1449

原创 Flink DataStream readFile中FilePathFilter存在的坑

说明最近有需求需要实时监控HDFS指定目录,然后对新增文件的每一行进行处理。采用了Flink DataStream API的readFile方法来实现。文件都是.gz结尾的,也会存在脏文件进来,所以需要对文件名进行过滤,于是就用FilePathFilter。在不过滤之前,可以正常监听目录;但是加了过滤后就不能监听了。纳闷了好一会,后来点进去仔细看了看源码,才发现是使用FilePathFilter的姿势有问题。这里的FilePathFilter居然是用来过滤目录的。。。实现代码如下:代码摘自

2021-04-10 21:31:27 685 1

原创 Flink中DataGeneratorSource和DataGen Connector的使用

在我们学习Flink的时候,往往需要写很多的代码去造数据,会浪费很多时间,Flink为DataStream和Table&SQL Api提供了生成数据的Source,我们可以方便的使用。先说一下DataStream提供的DataGeneratorSourceDataGeneratorSource描述DataGeneratorSource抽象了数据生成器,可以轻松的生成数据。DataGeneratorSource有状态、可以并行。DataGeneratorSource的构造器需要传入dat

2021-03-22 23:08:41 2849

原创 Flink日志配置

介绍flink在本地运行和on yarn运行时的日志配置。很多现代框架都是用门面模式进行日志输出,例如使用Slf4j中的接口输出日志,具体实现类需要由log4j,log4j2,logback等日志框架进行实现。Flink 中的日志记录就是使用slf4j日志接口实现的。Slf4j简要说明slf4j全名Simple Logging Facade for Java,为java提供的简单日志Facade。Facade门面说白了就是接口。它允许用户以自己的喜好,在工程中通过slf4j接入不同的日志系统。s.

2021-03-06 10:00:26 15753 7

原创 Flume KafkaChannel的使用

Flume提供了Kafka Sink将数据写入Kafka,也提供了KafkaChannel使用Kafka作为Channel存储数据。使用KafkaChannel既可以避免Memory Channel的内存溢出,又可以提供不错的性能。另外当我们需要将数据写入Kafka时,可以不需要Sink,直接使用KafkaChannel就可以将数据写入Kafka,省去了Sink的开销。以下简单介绍下KafkaChannel的使用。Flume的版本是1.9.0。需要注意的几点通常,与channel相关的配置值应用

2021-03-03 11:47:02 1910

原创 Flink JDBCSink使用及源码解析

以下所有都是基于Flink 1.12.0版本Flink JDBCSink的使用flink提供了JDBCSink方便我们写入数据库,以下是使用案例:pom依赖需要引入flink-connector-jdbc的依赖。另外,我这里是写入mysql,所以还引入了mysql的驱动包<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc_2

2021-02-28 19:45:41 10226 6

原创 Flink自定义Source实现对HDFS文件进行tail -f操作

背景需要读取HDFS上变化的日志文件,对每一行进行处理,就是类似于Linux中tail -f实现的功能。看了看好像Spark和Flink都没有类似的支持,于是就用Flink自定义了Source实现了这个功能。实现思路维持一个当前读取位置的偏移量,然后每隔几秒去看下文件的大小是否大于当前偏移量。如果最新文件大小大于当前偏移量就读取数据,并将当前偏移量设置为最新的文件大小;反之,不做任何操作。以下的代码,还没有把当前读取位置存储到状态中,如果重启会重头开始读。实现代码自定义Sourcepacka

2021-02-12 21:21:47 2415 3

原创 Flink动态添加依赖Jar包提交到Yarn

背景开发的flink程序,要使用yarn-cluster的方式进行部署。程序中依赖了很多第三方jar包,不想用shade那种打包方式打成一个大jar包,然后提交。想将应用程序jar包和依赖jar包分开,依赖的jar包在提交时一起提交上去(像spark on yarn直接指定“–jars”这样),但是找了好久发现flink官方没有提供这样的方式。直接将依赖的jar包放在flink的lib目录下,可以实现,但是感觉这样会污染flink的lib包。于是找到了如下方法,可以实现类似的功能。在此记录分享一下

2021-02-06 22:17:38 3661 1

原创 Flink自定义生成测试数据的Source

Flink通过实现SourceFunction接口来自定义非并行的Source,实现ParallelSourceFunction接口来自定义并行的Source。实现SourceFunction需要重写以下两个方法:run 发射元素cancel 关闭source为了测试开发,以下实现一个Source来生成测试数据。生成如下格式的流量测试数据:用户id|城市id|上行流量|下行流量|发生时间471|4|0.0745|0.3826|1609863101410495|0|0.5707|0.327

2021-01-06 00:25:53 1232

原创 Flink

文章目录什么是Flink?Flink优点分层抽象架构Flink比Spark做的好的地方最后本文将简单介绍Flink的概念、优点、架构,以及Flink比Spark做的好的地方什么是Flink?借官网的一句话。Apache Flink是一个框架和分布式处理引擎,用于在无边界和有边界的数据流上进行有状态的计算。首先,Flink和Spark一样,都是分布式的计算框架,用来处理大规模数据;其次,用于在无边界和有边界的数据上计算,有无边界起始就是我们常说的批和流,Flink现在在流处理方面所向披靡,在近来的

2021-01-02 21:33:36 156 1

原创 hadoop kerberos java客户端报错

背景使用hadoop java客户端访问带有kerberos认证的hadoop集群时,出现了Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]的错误。输出日志[WARN ] 2020-12-15 15:04:35,904 org.apache.h

2020-12-15 23:49:09 5584 6

原创 maven-assembly打包中文乱码问题

背景在使用maven-assembly-plugin打包时,发现打包后文件中有部分中文出现乱码解决经过一番排查之后,发现是mvn编码的问题,window中mvn的默认编码是GBK。可通过如下命令查看:C:\Users\2>mvn -vApache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)Maven home: D:\upupfeng\installed\apache-maven-3.6.3\bin\..Java ver

2020-11-04 10:36:09 2142 1

原创 ftp命令行操作及注意事项

ftp客户端的命令行操作

2020-10-16 20:35:47 2759

原创 postgresql copy from、copy to

使用postgresql官方提供的copy来进行数据的高效导入导出,分别介绍命令行使用方法和Java中的使用方法。

2020-10-02 22:47:24 14429 1

原创 记服务器时间错误导致的数据异常

今天碰到了一个实时处理丢数据的问题。技术栈使用的是Kafka + Spark Streaming + pgsql。首先确认kafka没有丢数据,也没有堆积数据;之后看了Spark Streaming处理逻辑,代码中也没做过滤,可数据就是少了。就很懵逼。排查了很久,突然想起来可能是服务器时间不对导致的问题,结果发现真是。因为在Spark Streaming处理中,用到了批对应的batchtime,这个时间就是系统的时间,所以导致很多数据不能成功写入。教训:写代码尽量少依赖操作系统的时间出现莫

2020-09-28 23:25:49 747

原创 jar命令用法及实例

记录一下jar命令的使用方法及一些实例

2020-09-19 12:18:23 893

原创 linux netstat详解

通过netstat命令来了解网络状态,可以查看网络连接,路由表,接口状态等信息。

2020-09-13 12:26:32 626

原创 Spark Streaming fileStream基于文件的流计算

通过Spark Streaming提供的fileStream来实时处理落在hdfs中的文件

2020-09-12 18:57:01 1018

原创 使用Java发送Socket消息到Spark Streaming

使用Java ServerSocket来发送Socket消息,在Spark Streaming中通过socketTextStream来接收消息。

2020-09-12 00:56:15 527

空空如也

空空如也

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

TA关注的人

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