Datax+DataX-Web分布式搭建

news2024/11/15 19:46:29

Datax+DataX-Web分布式搭建

DataX简介

DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。

在这里插入图片描述

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

DataX 框架设计

在这里插入图片描述

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

DataX插件体系

经过几年积累,DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入。DataX目前支持数据如下:

类型数据源Reader(读)Writer(写)文档
RDBMS 关系型数据库MySQL读 、写
Oracle读 、写
OceanBase读 、写
SQLServer读 、写
PostgreSQL读 、写
DRDS读 、写
达梦读 、写
通用RDBMS(支持所有关系型数据库)读 、写
阿里云数仓数据存储ODPS读 、写
ADS
OSS读 、写
OCS读 、写
NoSQL数据存储OTS读 、写
Hbase0.94读 、写
Hbase1.1读 、写
MongoDB读 、写
Hive读 、写
无结构化数据存储TxtFile读 、写
FTP读 、写
HDFS读 、写
Elasticsearch

DataX Framework提供了简单的接口与插件交互,提供简单的插件接入机制,只需要任意加上一种插件,就能无缝对接其他数据源。详情请看:DataX数据源指南

DataX核心架构

DataX 开源版本支持单机多线程模式完成同步作业运行,本小节按一个DataX作业生命周期的时序图,从整体架构设计非常简要说明DataX各个模块相互关系。

在这里插入图片描述

核心模块介绍:

  1. DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
  2. DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
  3. 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
  4. 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
  5. DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0

DataX调度流程:

举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:

  1. DataXJob根据分库分表切分成了100个Task。
  2. 根据20个并发,DataX计算共需要分配4个TaskGroup。
  3. 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

DataX调度流程:

举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:

  1. DataXJob根据分库分表切分成了100个Task。
  2. 根据20个并发,DataX计算共需要分配4个TaskGroup。
  3. 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

DataX单机部署

系统需求

  • Linux
  • JDK(1.8以上,推荐1.8)
  • Python(2或3都可以)
  • Apache Maven 3.x (Compile DataX)

安装部署

(1)、下载DataX源码:

wget https://github.com/alibaba/DataX/archive/refs/tags/datax_v202210.tar.gz

(2)、通过maven打包:

cd DataX-datax_v202210
mvn -U clean package assembly:assembly -Dmaven.test.skip=true

编译报错:

在这里插入图片描述

手动下载

# 搜索缺失jar包
https://mvnrepository.com/artifact/org.pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde
# 无法下载
# Google 搜到 https://repository.mapr.com/nexus/content/groups/mapr-public/conjars/org/pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde/

wget https://repository.mapr.com/nexus/content/groups/mapr-public/conjars/org/pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde/pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar
wget https://repository.mapr.com/nexus/content/groups/mapr-public/conjars/org/pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde/pentaho-aggdesigner-algorithm-5.1.5-jhyde.pom
# 或参照 https://blog.csdn.net/AlierSnow/article/details/125105548

# 手动安装到本地库
mvn install:install-file -Dfile=./pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-algorithm -Dversion=5.1.5-jhyde -Dpackaging=jar

# 搜索缺失jar包
https://mvnrepository.com/artifact/eigenbase/eigenbase-properties/1.1.4
# 无法下载
# Google 搜到 https://archiva.wikimedia.org/repository/mirrored/eigenbase/eigenbase-properties/1.1.4/

wget https://archiva.wikimedia.org/repository/mirrored/eigenbase/eigenbase-properties/1.1.4/eigenbase-properties-1.1.4.jar
wget https://archiva.wikimedia.org/repository/mirrored/eigenbase/eigenbase-properties/1.1.4/eigenbase-properties-1.1.4.pom

# 手动安装到本地库
mvn install:install-file -DgroupId=eigenbase -DartifactId=eigenbase-properties -Dversion=1.1.4 -Dpackaging=jar -Dfile=eigenbase-properties-1.1.4.jar

编译成功

ls ./target/datax/datax/
# 结构如下
bin		conf		job		lib		log		log_perf	plugin		script		tmp

配置示例

从stream读取数据并打印到控制台

  • 第一步、创建作业的配置文件(json格式)

    可以通过命令查看配置模板: python datax.py -r {YOUR_READER} -w {YOUR_WRITER}

    cd ./target/datax/datax/bin
    vim stream2stream.json
    

    根据模板配置json如下:

    # stream2stream.json
    {
      "job": {
        "content": [
          {
            "reader": {
              "name": "streamreader",
              "parameter": {
                "sliceRecordCount": 10,
                "column": [
                  {
                    "type": "long",
                    "value": "10"
                  },
                  {
                    "type": "string",
                    "value": "hello,你好,世界-DataX"
                  }
                ]
              }
            },
            "writer": {
              "name": "streamwriter",
              "parameter": {
                "encoding": "UTF-8",
                "print": true
              }
            }
          }
        ],
        "setting": {
          "speed": {
            "channel": 5
           }
        }
      }
    }
    
  • 第二步:启动DataX

    python datax.py ./stream2stream.json 
    

    同步结束,显示日志如下:

在这里插入图片描述

datax编译成功。

DataX-Web简介

系统需求

1、datax:datax-web的核心资源包
2、jdk(jdk版本建议1.8.201以上)
3、Maven(编译工具)
4、python (推荐python 2.7, python 3需要修改datax相关配置)
5、tomcat (可不装)
6、mysql 5.7 或者8 (用于存放datax-web相关用户信息以及任务信息)

安装部署

基础环境准备

# 测试是否安装
java -version
mvn -v
python --version

在这里插入图片描述

安装mysql5.7

# 这里使用docker安装
docker run --name ainns-mysql -e MYSQL_ROOT_PASSWORD=wntime*8 -d -v /tmp/mysql-dir:/var/lib/mysql -p 3306:3306 mysql:5.7.42-oracle --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

docker exec -it ainns-mysql /bin/bash
# 配置mysql
mysql -uroot -p;
use mysql;
select host, user, authentication_string, plugin from user;
GRANT ALL ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

安装datax

# data 安装路径 ~/Programs/datax/
cd ~/Programs/datax/
python ./bin/datax.py ./job/job.json

# 配置环境变量
vim ~/.bashrc
#set datax environment
export DATAX_HOME=/home/WNTime/Programs/datax
export PATH=$PATH:$DATAX_HOME/bin

如下图所示,表示datax安装成功

在这里插入图片描述

安装datax-web

tar -zxf ~/Downloads/datax-web-v-2.1.2.tar.gz
cd datax-web-v-2.1.2

初始化数据库

# 找到 bin/db/datax_web.sql 文件,进行初始化

打包程序

mvn clean install

在./build/文件夹中可以找到打包好的文件

测试运行

cd ./build/
tar -zxf datax-web-2.1.2.tar.gz

cd datax-web-2.1.2/
./bin/install.sh #按照提示安装

安装后效果

在这里插入图片描述

修改admin配置

vim ./modules/datax-admin/conf/bootstrap.properties

#Database
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=wntime*8
DB_DATABASE=datax_web

环境变量配置文件

vim ./modules/datax-admin/bin/env.properties

# environment variables

#JAVA_HOME=""

WEB_LOG_PATH=${BIN}/../logs
WEB_CONF_PATH=${BIN}/../conf

DATA_PATH=${BIN}/../data
SERVER_PORT=9527

#PID_FILE_PATH=${BIN}/dataxadmin.pid

# mail account
MAIL_USERNAME=""
MAIL_PASSWORD=""

#debug
#REMOTE_DEBUG_SWITCH=true
#REMOTE_DEBUG_PORT=7003

启动admin

./bin/start.sh -m datax-admin

在这里插入图片描述

修改executor

环境变量配置文件

vim ./modules/datax-executor/bin/env.properties

# environment variables

#JAVA_HOME=""

SERVICE_LOG_PATH=${BIN}/../logs
SERVICE_CONF_PATH=${BIN}/../conf
DATA_PATH=${BIN}/../data


## datax json文件存放位置
JSON_PATH=${BIN}/../json


## executor_port
EXECUTOR_PORT=9999


## 保持和datax-admin端口一致
DATAX_ADMIN_PORT=9527

## PYTHON脚本执行位置
#PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
PYTHON_PATH=${BIN}/../python


## dataxweb 服务端口
SERVER_PORT=9504

#PID_FILE_PATH=${BIN}/service.pid


#debug 远程调试端口
#REMOTE_DEBUG_SWITCH=true
#REMOTE_DEBUG_PORT=7004

启动executor

./bin/start.sh -m datax-executor

在这里插入图片描述

分布式安装

for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
	ssh ubuntu@10.10.10.$i 'source /etc/profile; \
	java -version; \
    mvn -v; \
    python --version;';
done;

配置maven

for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
	scp ~/Downloads/apache-maven-3.6.3.tar.gz ubuntu@10.10.10.$i:~/;
	ssh ubuntu@10.10.10.$i 'sudo mkdir -p /opt/software/; \
	#sudo rm -f /etc/profile.d/Z99-wntime-env-config.sh; \
	sudo touch /etc/profile.d/Z99-wntime-env-config.sh; \
	sudo tar -zxf ~/apache-maven-3.6.3.tar.gz -C /opt/software/;';
	# config env
	rm -rf /tmp/"10.10.10.$i"/;
	mkdir -p /tmp/"10.10.10.$i"/;
	scp ubuntu@10.10.10.$i:/etc/profile.d/Z99-wntime-env-config.sh /tmp/"10.10.10.$i"/Z99-wntime-env-config.sh;
	sudo cat>>/tmp/"10.10.10.$i"/Z99-wntime-env-config.sh<<EOF

# MVN_HOME
export MVN_HOME=/opt/software/apache-maven-3.6.3
export PATH=\$PATH:\$MVN_HOME/bin

EOF
	cat /tmp/10.10.10.$i/Z99-wntime-env-config.sh;
	scp /tmp/10.10.10.$i/Z99-wntime-env-config.sh ubuntu@10.10.10.$i:~/Z99-wntime-env-config.sh;
	ssh ubuntu@10.10.10.$i 'sudo mv ~/Z99-wntime-env-config.sh /etc/profile.d/Z99-wntime-env-config.sh; \
	sudo chmod +x /etc/profile.d/Z99-wntime-env-config.sh; \
	source /etc/profile; \
	echo $MVN_HOME;'
done;

安装python

for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
	ssh ubuntu@10.10.10.$i 'sudo apt install python2; \
	source /etc/profile; \
	java -version; \
    mvn -v; \
    python --version;';
done;

安装datax

for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
	scp ~/Downloads/datax_v202210.tar.gz ubuntu@10.10.10.$i:~/;
	ssh ubuntu@10.10.10.$i 'sudo mkdir -p /opt/software/; \
	#sudo rm -f /etc/profile.d/Z99-wntime-env-config.sh; \
	sudo touch /etc/profile.d/Z99-wntime-env-config.sh; \
	sudo tar -zxf ~/datax_v202210.tar.gz -C /opt/software/; \
	sudo mv /opt/software/datax /opt/software/datax_v202210';
	# config env
	rm -rf /tmp/"10.10.10.$i"/;
	mkdir -p /tmp/"10.10.10.$i"/;
	scp ubuntu@10.10.10.$i:/etc/profile.d/Z99-wntime-env-config.sh /tmp/"10.10.10.$i"/Z99-wntime-env-config.sh;
	sudo cat>>/tmp/"10.10.10.$i"/Z99-wntime-env-config.sh<<EOF

# MVN_HOME
export DATAX_HOME=/opt/software/datax_v202210
export PATH=\$PATH:\$DATAX_HOME/bin

EOF
	cat /tmp/10.10.10.$i/Z99-wntime-env-config.sh;
	scp /tmp/10.10.10.$i/Z99-wntime-env-config.sh ubuntu@10.10.10.$i:~/Z99-wntime-env-config.sh;
	ssh ubuntu@10.10.10.$i 'sudo mv ~/Z99-wntime-env-config.sh /etc/profile.d/Z99-wntime-env-config.sh; \
	sudo chmod +x /etc/profile.d/Z99-wntime-env-config.sh; \
	source /etc/profile; \
	echo $DATAX_HOME;'
done;

验证datax 安装

for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
	ssh ubuntu@10.10.10.$i 'cd /opt/software/datax_v202210; \
	source /etc/profile; \
	python ./bin/datax.py ./job/job.json;';
done;

安装datax-web

for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
	scp ~/Downloads/datax-web-2.1.2.tar.gz ubuntu@10.10.10.$i:~/;
	ssh ubuntu@10.10.10.$i 'sudo mkdir -p /opt/software/; \
	sudo rm -rf /opt/software/datax-web-2.1.2; \
	sudo tar -zxf ~/datax-web-2.1.2.tar.gz -C /opt/software/;';
	ssh ubuntu@10.10.10.$i 'cd /opt/software/datax-web-2.1.2; \
	sudo ./bin/install.sh --force; \
	sudo chown -R ubuntu:ubuntu /opt/software/datax-web-2.1.2;';
done;

启动admin

# vim ./modules/datax-admin/conf/bootstrap.properties
for i in {134..135} 151;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
ssh ubuntu@10.10.10.$i "sed -i 's/127.0.0.1/10.10.10.77/g' /opt/software/datax-web-2.1.2/modules/datax-admin/conf/bootstrap.properties; \
source /etc/profile; \
cd /opt/software/datax-web-2.1.2/; \
./bin/start.sh -m datax-admin;";

done;

停止admin

# vim ./modules/datax-admin/conf/bootstrap.properties
for i in {134..135} 151;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
ssh ubuntu@10.10.10.$i "source /etc/profile; \
cd /opt/software/datax-web-2.1.2/; \
./bin/stop.sh -m datax-admin;";

done;

启动executor

# vim ./modules/datax-admin/conf/bootstrap.properties
for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
ssh ubuntu@10.10.10.$i "sed -i 's/^DATAX_ADMIN_ADDRESSES=.*\$/DATAX_ADMIN_ADDRESSES=http:\/\/10.10.10.134:9527,http:\/\/10.10.10.135:9527,http:\/\/10.10.10.151:9527/g' /opt/software/datax-web-2.1.2/modules/datax-executor/bin/env.properties; \
source /etc/profile; \
cd /opt/software/datax-web-2.1.2/; \
./bin/start.sh -m datax-executor;";

done;

停止executor

# vim ./modules/datax-admin/conf/bootstrap.properties
for i in {133..135} 151 157;
do
	echo -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
ssh ubuntu@10.10.10.$i "source /etc/profile; \
cd /opt/software/datax-web-2.1.2/; \
./bin/stop.sh -m datax-executor;";

done;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

餐企复苏破局!高效智能营销+服务如何打造?

随着数字化时代的飞速发展&#xff0c;越来越多的行业对企业运营服务模式的需求已逐渐趋向于“智能化”发展。特别是“后疫情时代”及O2O模式下的餐饮变革&#xff0c;餐饮行业的竞争已从餐食本身&#xff0c;发展为流量、服务、品牌效应的竞争&#xff0c;很多企业为了进一步促…

MySQL 8.0.29 instant DDL 数据腐化问题分析

前言Instant add or drop column的主线逻辑表定义的列顺序与row 存储列顺序阐述引入row版本的必要性数据腐化问题原因分析Bug重现与解析MySQL8.0.30修复方案 前言 DDL 相对于数据库的 DML 之类的其他操作&#xff0c;相对来说是比较耗时、相对重型的操作; 因此对业务的影比较严…

ASO优化之关于应用宝的关键词排名

应用宝是国内主要的安卓应用分发渠道之一&#xff0c;它的流量和影响力是非常大的。所以我们可以通过ASO优化&#xff0c;来提升应用宝关键词覆盖和排名&#xff0c;从而有利于应用可以获得稳定的自然下载量。 关键词覆盖要围绕元数据的优化&#xff08;包括应用名称&#xff…

ai智能写诗你了解吗?

在当今科技快速发展的时代&#xff0c;越来越多的人开始注重人工智能在日常生活中的应用。其中之一就是智能写诗软件&#xff0c;这种技术不仅可以为我们提供便捷的创作体验&#xff0c;还可以让我们轻松地享受到优美的诗歌韵律。那么&#xff0c;智能写诗软件怎么用呢&#xf…

服务端测试深度解析:如何保障后端稳定性

一、引言 在日益数字化的时代&#xff0c;软件稳定性和高可用性的保证对企业来说至关重要。在众多环节中&#xff0c;服务端作为整个系统的心脏&#xff0c;它的稳定性对用户体验和企业声誉影响尤为深远。因此&#xff0c;进行全面彻底的服务端测试具有重要意义。本文将深入讨…

真和思科有关?官方严令广东电信彻查网络故障!

下午好&#xff0c;我的网工朋友。 广东电信那事儿&#xff0c;大家都听说了吧&#xff0c;这闹的&#xff0c;行业内无人不晓了吧。 昨天晚上有聚餐&#xff0c;没来得及跟你们唠上这事儿&#xff0c;这会儿下班前&#xff0c;唠唠&#xff1f; 虽然昨晚已经恢复正常&#x…

工作4/5年,中高级测试工程师的我需要掌握什么?该往哪个方向发展?

毕业到公司4/5年&#xff0c;一般做软件测试至少是中级测试工程师了&#xff0c;好一些到高级测试工程师了。 我觉得对于中高级测试工程师的要求有几点 首先&#xff1a;你得有比较强的产品思维能力&#xff0c;你要知道产品的逻辑是什么&#xff0c;你要能站在用户的角度去思…

ArkTS语言HarmonyOS/OpenHarmony应用开发-message事件刷新卡片内容

开发过程 在卡片页面中可以通过postCardAction接口触发message事件拉起FormExtensionAbility&#xff0c;然后由FormExtensionAbility刷新卡片内容。 common&#xff1a;公共文件 通过点击button按钮&#xff0c;刷新卡片内容。代码示例&#xff1a; WidgetCard.ets let stor…

网页端兼容ie浏览器,强制用户以最高版本的ie进行页面渲染

1.针对浏览器&#xff0c;兼容不同ie版本写法 //IE9以及低于IE9版本 : <!--[if IE]><link rel"stylesheet" type"text/css" href"index.css" /> <![endif]-->//IE10或IE11: media all and (-ms-high-contrast: none), (-ms-h…

【JavaScript】实战训练小项目-WebAPI

JavaScript实战训练小项目 文章目录 JavaScript实战训练小项目 & WebAPI1. JS操作DOM树1.1 获得HTML控件/元素标签1.2 操纵控件1.2.1 获取属性值1.2.1 修改属性值 1.3 实现一个猜数字的功能 2. JQuery3. 简单计算器4. 聚合搜索5. 表白墙 JavaScript实战训练小项目 & We…

cuda编程入门07

程序优化技巧 程序解读 降低256倍&#xff0c;但是后面数组长度还是不知道的 对1万的元素在此降低一定倍数 初始加速比为9.58左右 这里没有volatie if (tid < 32) sdata[tid] sdata[tid 32];__syncthreads();在一个wrap内进行合并 sdata[tid] sdata[tid 32];sdata[ti…

【kali】使用VMware安装kali

目录 2、解压 3、安装 3.1 然后打开vm虚拟机&#xff0c;在文件菜单中选择打开 3.2 找到已解压的文件&#xff0c;选择一下文件 4、开启虚拟机&#xff0c;进入系统 1、下载 Get Kali | Kali Linux 我使用的是VMware12&#xff0c;所有下载下图 2、解压 3、安装 3.1 然后…

一文讲透彻!RobotFramwork测试框架教程(全能)

Robot Framwork在业界早已名声大振&#xff01;有很多刚学自动化测试的伙伴问我&#xff1a;有没有不需要编程就可以玩自动化的方法&#xff1f; 有吗&#xff1f;有的&#xff01;——Robot Framwork 我们今天就一篇文章&#xff0c;把它讲得明明白白&#xff01; 一、Robo…

使用php语言抓取网站商品详情代码及解析效果展示

抓取网站商品详情需要使用爬虫技术&#xff0c;可以使用 PHP 的 CURL 库来发送 HTTP 请求&#xff0c;然后解析 HTML 页面&#xff0c;获取商品详情信息。以下是一个简单的示例代码&#xff1a; <?php // 定义要抓取的商品 URL $url "https://example.com/produ…

华为OD机试 JavaScript 实现【密码强度等级】【牛客练习题】,附详细解题思路

一、题目描述 密码按如下规则进行计分&#xff0c;并根据不同的得分为密码进行安全等级划分。 1、密码长度&#xff1a; 5 分: 小于等于4 个字符 10 分: 5 到7 字符 25 分: 大于等于8 个字符 2、字母&#xff1a; 0 分: 没有字母 10 分: 密码里的字母全都是小&#xff08;…

执行修改方法返回值为0但是也没报错是什么原因

这篇文章仅仅记录 用springBoot加mybatis 搭建环境 一直没执行成功 百思不得其解 最后发现是controller中一个参数问题 一开始是这样 修改成这样就好了 数据库数据也能更新了 将param改成RequestParam 具体原因大家可以网上找找

jenkins显示gitlab的认证报错

描述 使用“List Git branches (and more)”功能&#xff0c;显示gitlab的分支或者标签。报错“org.eclipse.jgit.api.errors.TransportException: http://gitlab.test.com/userCenter/userCenterServer: not authorized” 排查与解决 使用的凭证再gitlab是Maintainer身份&…

c++ nlohmann/json

json为JavaScript object notation 是一种数据格式&#xff0c;逐渐替换掉了传统的xml 。json数据格式的属性名称和字符串值需要用双引号引起来&#xff0c;用单引号或者不用引号会导致读取数据错误。json的另外一个数据格式是数组&#xff0c;和javascript中的数组字面量相同。…

金融计量学第1节课:股指收益率序列统计特征

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 导论与介绍 大家好&#xff0c;我是Le Chiffre 今天我们来为大家分享金融计量学系列内容&#xff0c;在松鼠量化3年多分享的内容中&#xff0c;大部分以量化策略为主&#xff0c;至今为止&#xff0c;…

EasyExcel导入导出

在项目开发中往往需要使用到数据的导入和导出&#xff0c;导入就是从Excel中导入到DB中&#xff0c;而导出就是从DB中查询数据然后使用POI写到Excel上。所以今天就为大家带来一款基于阿里EasyExcel的导入导出功能&#xff0c;开放了一个demo&#xff0c;以下是gitee地址&#x…