自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

赞的心路历程

Engineers are versatile minds who create links between science, technology, and society.

  • 博客(235)
  • 资源 (1)
  • 收藏
  • 关注

原创 记录一次kafka百万消息堆积的处理过程

业务背景可以详见上一篇文章:通过kafka,canal进行数据异构同步的一套技术方案_赞的心路历程-优快云博客2021年10月25日开始,业务大爆发,数据量激增 ,到了28日zabbix监控显示差不多堆积了90万的消息通过skywalking查看消费者的消费吞吐量并没有异常,是业务数据大爆发,造成了日数据增量成倍增加,消费不及时,造成了消息堆积。逐步排查消费瓶颈在何处:将涉及到的服务资源按,kafka,消费者,目标数据库的cpu,内存,硬盘,带宽,逐一排查;首先

2021-11-01 17:15:34 4221 1

原创 通过kafka,canal进行数据异构同步的一套技术方案

业务背景说明:本公司有一个业务场景是需要从A数据库异构同步至B数据库,在B数据库进行一些逻辑统计查询操作,大致如下图:当时设计的技术架构如下:第一步:通过canal监听A库的binlog日志,将binlog日志信息发送至kafka消息队列第二步:部署由纯java编写的canal-kafka工程,消费kafka消息,异构原始数据,落B库,canal-kafka可以多节点分片部署该方案咋一看可能存在一些问题,如同步性能如何,sql执行顺序问题如何保证,下面一一解答.

2021-11-01 14:46:14 2064 2

原创 代码之外的生存指南

2021-10-19 17:20:07 217

原创 HBase

安装包:链接:提取码: 5up7。

2024-09-09 23:37:39 805 2

原创 11、Hive+Spark数仓环境准备

1)把hive-3.1.3.tar.gz上传到linux的/opt/software目录下2)解压hive-3.1.3.tar.gz到/opt/module/目录下面3)修改hive-3.1.3-bin.tar.gz的名称为hive4)修改/etc/profile.d/my_env.sh,添加环境变量添加内容重启Xshell对话框或者source一下 /etc/profile.d/my_env.sh文件,使环境变量生效。5)解决日志Jar包冲突,进入/opt/module/hive/lib目录。

2024-09-09 23:26:41 1307

原创 10、业务数据同步

数据同步工具种类繁多,大致可分为两类,一类是以DataX、Sqoop为代表的基于Select查询的离线、批量同步工具,另一类是以Maxwell、Canal为代表的基于数据库数据变更日志(例如MySQL的binlog,其会实时记录所有的insert、update以及delete操作)的实时流式同步工具。全量同步通常使用DataX、Sqoop等基于查询的离线同步工具。而增量同步既可以使用DataX、Sqoop等工具,也可使用Maxwell、Canal等工具,下面对增量同步不同方案进行简要对比。增量同步方案。

2024-09-09 22:49:41 1506

原创 9、DataX部署

DataX的使用十分简单,用户只需根据自己同步数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

2024-09-09 21:49:41 1387

原创 8、用户行为数据同步

按照规划,该Flume需将Kafka中topic_log的数据发往HDFS。并且对每天产生的用户行为日志进行区分,将不同天的数据发往HDFS不同天的路径。此处选择KafkaSource、FileChannel、HDFSSink。

2024-09-09 21:29:28 1015

原创 7、Maxwell业务数据采集模块

Maxwell 是由美国Zendesk公司开源,用Java编写的MySQL变更数据抓取软件。它会实时监控MySQL数据库的数据变更操作(包括insert、update、delete),并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流数据处理平台。

2024-09-09 21:23:17 920

原创 6、Flume安装

按照规划,需要采集的用户行为日志文件存放在hadoop102,故需要在该节点配置日志采集Flume。日志采集Flume需要采集日志文件内容,并对日志格式(JSON)进行校验,然后将校验通过的日志发送到Kafka。此处可选择TaildirSource和KafkaChannel,并配置日志校验拦截器。选择TailDirSource和KafkaChannel的原因如下:TailDirSource相比ExecSource、SpoolingDirectorySource的优势。

2024-09-09 21:12:01 1029

原创 5、Kafka

hadoop102hadoop103hadoop104zkzkzkkafkakafkakafka0)官方下载地址:Apache Kafka1)上传并解压安装包2)修改解压后的文件名称3)进入到/opt/module/kafka目录,修改配置文件输入以下内容:4)分发安装包5)分别在hadoop103和hadoop104上修改配置文件/opt/module/kafka/config/server.properties中的broker.id及advertised.listeners

2024-09-09 20:30:47 1285

原创 4、Zookeeper

1)集群规划在hadoop102、hadoop103和hadoop104三个节点上部署Zookeeper。服务器hadoop102服务器hadoop103服务器hadoop104ZookeeperZookeeperZookeeperZookeeper2)解压安装(1)解压Zookeeper安装包到/opt/module/目录下(2)修改/opt/module/apache-zookeeper-3.7.1-bin名称为zookeeper-3.7.13)配置服务器编号。

2024-09-09 20:15:37 846

原创 3、Hadoop部署

1)集群部署规划注意:NameNode和SecondaryNameNode不要安装在同一台服务器注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。hadoop102hadoop103hadoop104HDFSNameNodeDataNodeDataNodeDataNodeYARN2)将hadoop3.3.4.tar.gz导入到opt目录下面的software文件夹下面3)进入到Hadoop安装包路径下。

2024-09-09 10:10:14 1136

原创 2、数据模拟

1)将application.yml、gmall-remake-mock-2023-05-15-3.jar、path.json、logback.xml上传到hadoop102的/opt/module/applog目录下(1)创建applog路径(2)上传文件到/opt/module/applog目录2)配置文件(1)application.yml文件可以根据需求生成对应日期的用户行为日志。修改如下内容(2)path.json,该文件用来配置访问路径根据需求,可以灵活配置用户点击路径。

2024-09-09 09:30:03 715

原创 1、技术选型与前期准备

注意事项:框架选型尽量不要选择最新的框架,选择最新框架半年前左右的稳定版。框架旧版本新版本Hadoop3.1.33.3.4Zookeeper3.5.73.7.1MySQL5.7.168.0.31Hive3.1.23.1.3(修改源码)Flume1.9.01.10.1Kafka3.0.03.3.1Spark3.0.03.3.1DataX3.03.0(master分支向前,修改源码)Superset1.5.32.0.01.3.92.0.5。

2024-09-09 08:36:39 1461

原创 12、DolphinScheduler

打开要设置分组的 Worker 节点上的 worker.properties 配置文件,修改 worker.groups 参 数,worker.groups 参数的值为该 Worker 节点对应的分组名称,默认为 default,如果该 worker。此处可配置 Worker 运行环境(任务运行时所需的环境变量),默认的运行环境由 Worker节点中,dolphinscheduler 安装目录下的 conf/env/dolphinscheduler_env.sh 决定。

2024-01-06 14:02:43 1992

原创 10、采集通道启动、停止脚本

启停脚本:f1.sh ) ---> 投递kafka topic:topic_log --->[hadoop104] Flume(消费kafka日志 kafka_to_hdfs_log.conf;启停脚本:mxw.sh) --->投递kafka topic:topic_db ---> [hadoop104] Flume(消费kafka日志 kafka_to_hdfs_db.conf;启停脚本:f3.sh ) ps:增量表首日全量同步 mysql_to_kafka_inc_init.sh。

2023-07-05 14:27:04 340

原创 9.2、增量表数据同步

此处为了模拟真实环境,对Maxwell源码进行了改动,增加了一个参数mock_date,该参数的作用就是指定Maxwell输出JSON字符串的ts时间戳的日期,接下来进行测试。通常情况下,增量表需要在首日进行一次全量同步,后续每日再进行增量同步,首日全量同步可以使用Maxwell的bootstrap功能,方便起见,下面编写一个增量表首日全量同步脚本。需要注意的是, HDFSSink需要将不同mysql业务表的数据写到不同的路径,并且路径中应当包含一层日期,用于区分每天的数据。

2023-07-05 13:58:42 744

原创 9.1、全量表数据同步

由于DataX同步任务要求目标路径提前存在,故需手动创建路径,当前activity_info表的目标路径应为/origin_data/gmall/db/activity_info_full/2020-06-14。注:由于目标路径包含一层日期,用于对不同天的数据加以区分,故path参数并未写死,需在提交任务时通过参数动态传入,参数名称为targetdir。4)执行gen_import_config.sh脚本,生成配置文件。1)在~/bin目录创建mysql_to_hdfs_full.sh。

2023-07-05 13:49:13 485

原创 9、DataX安装部署

通常情况下,离线数据同步任务需要每日定时重复执行,故HDFS上的目标路径通常会包含一层日期,以对每日同步的数据加以区分,也就是说每日同步数据的目标路径不是固定不变的,因此DataX配置文件中HDFS Writer的path参数的值应该是动态的。为实现这一效果,就需要使用DataX传参的功能。DataX的使用十分简单,用户只需根据自己同步数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

2023-07-05 13:40:32 3230

原创 8、离线数仓同步数据

元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在Namenode内存中。并且对每天产生的用户行为日志进行区分,将不同天的数据发往HDFS不同天的路径。用户行为数据由Flume从Kafka直接同步到HDFS,由于离线数仓采用Hive的分区表按天统计,所以目标路径要包含一层日期。官方默认的这三个参数配置写入HDFS后会产生小文件,hdfs.rollInterval、hdfs.rollSize、hdfs.rollCount。

2023-07-05 11:45:02 196

原创 7、Maxwell安装部署

但有时只有增量数据是不够的,我们可能需要使用到MySQL数据库中从历史至今的一个完整的数据集。1)第一条type为bootstrap-start和最后一条type为bootstrap-complete的数据,是bootstrap开始和结束的标志,不包含数据,中间的type为bootstrap-insert的数据才包含数据。Maxwell需要在MySQL中存储其运行过程中的所需的一些数据,包括binlog同步的断点位置(Maxwell支持断点续传)等等,故需要在MySQL为Maxwell创建数据库及用户。

2023-07-05 11:28:52 1162

原创 6、Flume安装部署

按照规划,需要采集的用户行为日志文件分布在hadoop102,hadoop103两台日志服务器,故需要在hadoop102,hadoop103两台节点配置日志采集Flume。(1)将apache-flume-1.9.0-bin.tar.gz上传到linux的/opt/software目录下。修改/opt/module/flume/conf/flume-env.sh文件,配置如下参数(虚拟机环境暂不配置)(2)解压apache-flume-1.9.0-bin.tar.gz到/opt/module/目录下。

2023-07-05 11:10:03 832

原创 5、Kafka安装部署

因为Zookeeper集群当中记录着Kafka集群相关信息,Zookeeper集群一旦先停止,Kafka集群就没有办法再获取停止进程的信息,只能手动杀死Kafka进程了。5)分别在hadoop103和hadoop104上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=1、broker.id=2。(1)在/etc/profile.d/my_env.sh文件中增加kafka环境变量配置。(2)把主题中所有的数据都读取出来(包括历史数据)。

2023-07-05 11:00:35 247

原创 4、Zookeeper分布式安装部署

集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。(1)重命名/opt/module/zookeeper/conf这个目录下的zoo_sample.cfg为zoo.cfg。(2)在/opt/module/zookeeper/zkData目录下创建一个myid的文件。(1)在/opt/module/zookeeper/这个目录下创建zkData。

2023-07-04 18:06:18 1037

原创 3、Hive安装部署

新版本的Hive启动的时候,默认申请的JVM堆内存大小为256M,JVM堆内存申请的太小,导致后期开启本地模式,执行复杂的SQL时经常会报错:java.lang.OutOfMemoryError: Java heap space,因此最好提前调整一下HADOOP_HEAPSIZE这个参数。(1)修改$HIVE_HOME/conf下的hive-env.sh.template为hive-env.sh。2)解压apache-hive-3.1.2-bin.tar.gz到/opt/module/目录下面。

2023-07-04 18:00:30 357

原创 1、hadoop集群搭建

这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载/etc/profile,~/.bash_profile,~/.bashrc。面临问题:数据统计主要用HiveSQL,没有数据倾斜,小文件已经做了合并处理,开启的JVM重用,而且IO没有阻塞,内存用了不到50%。Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bashrc,~/.bash_profile等,下面说明上述几个文件之间的关系和区别。

2023-07-04 14:39:03 615

原创 0、技术选型

以128G内存,20核物理CPU,40线程,8THDD和2TSSD硬盘,戴尔品牌单台报价4W出头。(一般大厂使用,技术实力雄厚,有专业的运维人员) (建议使用)(2)每条日志1K左右,每天1亿条:100000000 / 1024 / 1024 = 约100G。(2)CDH:国内使用最多的版本,但CM不开源,今年开始收费,一个节点1万美金/年。(1)每天日活跃用户100万,每人一天平均100条:100万*100条=1亿条。(3)HDP:开源,可以进行二次开发,但是没有CDH稳定,国内使用较少。

2023-07-04 14:28:31 239

原创 Hive SQL题库(中级)

第1章 环境准备1.1 用户信息表1)表结构user_id(用户id)gender(性别)birthday(生日)101男1990-01-01102女1991-02-01103女1992-03-01104男1993-04-01 2)建表语句3)数据装载1.2 商品信息表1)表结构sku_id(商品id)name(商品名称)category_id(分类id)from_date(上架日期)price(商品价格)1xiaomi 1012020-01-0120006洗碗机22020-02-0120009

2023-06-26 18:08:33 612

原创 Hive函数(二)

Lateral View可以将UDTF应用到源表的每行数据,将每行数据转换为一行或多行,并将源表中每行的输出结果与该行连接起来,形成一个虚拟表。绝大多数的聚合函数都可以配合窗口使用,例如max(),min(),sum(),count(),avg()等。窗口函数,能为每行数据划分一个窗口,然后对窗口范围内的数据进行计算,最后将计算结果返回给该行数据。思考:如下基于值的窗口划分方式,是基于哪个字段的值划分的?该查询语句的返回结果是什么?窗口范围的定义分为两种类型,一种是基于行的,一种是基于值的。

2023-06-26 15:28:07 663

原创 Hive SQL题库(初级)

① 先找出有两门以上不及格的学生名单,按照学生分组,过滤组内成绩低于60的并进行count,count>=2。② 接着做出一张表查询学生的平均成绩并和上一个子查询中的学生学号进行连接。(2)将如下4个文件放到/opt/module/data目录下。查询一共参加三门课程且其中一门为语文课程的学生的id和姓名。学生id 语文 数学 英语 有效课程数 有效平均成绩。(1)创建/opt/module/data目录。(2)验证插入数据情况。

2023-06-21 17:12:09 919

原创 Hive函数(一)

语法:get_json_object(string json_string, string path)Hive提供了大量的内置函数,按照其特点可大致分为如下几类:单行函数、聚合函数、炸裂函数、窗口函数。语法:regexp_replace(string A, string B, string C)| array(string))语法:concat(string A, string B, string C, ……语法:replace(string A, string B, string C)

2023-06-21 16:55:08 1246

原创 Linux下安装nginx

链接: https://pan.baidu.com/s/1RYqotdX5ziFbj-KlvB5zeQ 提取码: 6jni 云盘中有相关安装包。找到你安装的源码包(不是/usr/local/nginx)是那个带有版本号的位置。然后将刚刚编译好的nginx覆盖掉原有的nginx (这个时候nginx要停止状态)进入目录 /usr/local/nginx/sbin/nginx 启动服务。3.将pcre-8.37移动到 /usr/local/目录下。4.在/usr/local/pcre-8.37 目录下。

2023-06-15 14:49:01 554

原创 Linux下mysql5.7.28安装

1)/opt/software目录下上传MySQL安装包以及MySQL驱动jar包。1)用刚刚查到的密码进入MySQL(如果报错,给密码加单引号)2)设置复杂密码(由于MySQL密码策略,此密码必须足够复杂)7)修改user表,把Host表内容修改为%3)非必选 更改MySQL密码策略。5)安装mysql-client。6)安装mysql-server。4)非必选 设置简单好记的密码。2)解压MySQL安装包。4)安装MySQL依赖。8)查看MySQL密码。注意:若出现以下错误。5)进入MySQL库。

2023-05-29 17:34:36 876

原创 Hive安装部署

1)把apache-hive-3.1.3-bin.tar.gz上传到Linux的/opt/software目录下。观察HDFS的路径/user/hive/warehouse/stu,体会Hive与Hadoop之间的关系。2)解压apache-hive-3.1.3-bin.tar.gz到/opt/module/目录下面。3)修改apache-hive-3.1.3-bin.tar.gz的名称为hive。4)修改/etc/profile.d/my_env.sh,添加环境变量。1、Hive安装地址。

2023-05-29 15:42:12 856

原创 Linux下安装mysql8.0

1、选择Yum Repository 页面 https://dev.mysql.com/downloads/repo/yum/下载页面:https://dev.mysql.com/downloads/repo/yum/11、创建host(如果有"%"这个host值,则跳过这一步)(1)任意主机以用户root和密码pwd连接到mysql服务器。4、检查MySQL在Yum repository默认版本。2、在 /mydata/mysql 目录下下载rpm文件。7、检查mysql是否启动成功。

2022-11-10 15:17:48 553

原创 Spring 循环依赖与三级缓存源码debug

通常来说,如果问 Spring 容器内部如何解决循环依赖, 一定是指默认的单例 Bean 中,属性互相引用的场景。也就是说,Spring 的循环

2022-06-15 21:06:57 365

原创 14、课程总结与回顾

这基本上接近本课程终点了,O(∩_∩)O 请同学们务必动手学会+跳槽时动嘴可说, 你所谓的懂了可能只是理解了,一动手一动嘴估计可能挂了,请下苦功夫打磨自己 最后的梳理走走...... 1、CompletableFuture2、“锁”事儿 2.1、悲观锁 2.2、乐观锁 2.3、自旋锁 2.4、可重入锁(递归锁) 2.5、写锁(独占锁)/读锁(共享锁) 2.6、公平锁/非公平锁 2.7、死锁

2022-06-10 10:34:13 337

原创 13、ReentrantLock、ReentrantReadWriteLock、StampedLock讲解

无锁→独占锁→读写锁→邮戳锁你知道Java里面有哪些锁?你说你用过读写锁,锁饥饿问题是什么?有没有比读写锁更快的锁?StampedLock知道吗?(邮戳锁/票据锁)ReentrantReadWriteLock有锁降级机制策略你知道吗?读写锁定义为一个资源能够被 多个读线程 访问,或者被 一个写线程 访问,但是不能同时存在读写线程。 『读写锁』意义和特点『 读写锁 ReentrantReadWriteLock 』 并不是 真正意义上的读写分离, 它只允许读读共存,而读写和写写依然是互斥的, 大多实际场景是 “

2022-06-10 10:31:40 583 1

原创 12、AbstractQueuedSynchronizer之AQS

公平锁和非公平锁可重入锁自旋锁LockSupport数据结构之链表设计模式之模板设计模式抽象的队列同步器源代码 AbstractOwnableSynchronizer AbstractQueuedLongSynchronizer AbstractQueuedSynchronizer 通常地:AbstractQueuedSynchronizer简称为AQS 是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工

2022-06-10 10:21:24 484

LongAdder源码解读

通过对代码的流程分析,一步一步拆解,将源码解读变得简单

2022-06-10

空空如也

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

TA关注的人

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