HaDoop Hive

news2024/11/18 1:26:26

目录

1.VMware 的配置

2.JDK的部署

3.防火墙,SElinux,时间同步设置

4.云平台 

5.阿里云

6.UCloud

7.Hadoop理论

7.1   Hadoop理论 

7.2   VMware Hadoop实践

7.3集群部署常见问题解决

7.4   云服务器上 Hadoop实践

7.5   HDFS 的 shell

7.6HDFSShell解决权限不足

7.7   JetBrains使用插件

8   HDFS的存储原理

9.MapReduce

10. YARN

10.1   YARN 理论

10.2   YARN 实践

Hive理论

1.Hive理论​编辑

2.Hive部署

3.Hive初体验

4.Hive 客户端

5.Hive 原理


BV1WY4y197g7

1.VMware 的配置

 

免密登录:

ssh-keygen -t rsa -b 4096
ssh-copy-id node1
ssh node2

2.JDK的部署

ln -s /export/server/jdk1.8.0_361 jdk

3.防火墙,SElinux,时间同步设置

 

(为访到)关闭防火墙:

 systemctl stop firewalld.service

        禁止防火墙开机启动

 systemctl disable firewalld.service

 

4.云平台 

什么是云平台
云平台也称云计算平台。云计算,顾名思义,就是将计算在云上运行。

那么在这里面的3个概念

  • 云:通俗的理解就是远程计算机,并且是一组 一堆,这些远程计算机协同工作构建出一个平台,对用户提供服务
  • 计算:这是一个概念很大的名词,小了说可以认为是对业务数据进行计算分析的算力,不过通俗意义上,计算是指构建业务系统的各种需求
  • 平台:将云(远程硬件资源)和计算(远程软件资源)组合在一起,就形成了一个平台,对用户提供各种各样的服务。

我们可以这样理解,云平台是:一个云上的平台,聚合了一些软硬件资源,为用户提供各种各样的远程服务

 

5.阿里云

 

6.UCloud

 

 

7.Hadoop理论

7.1   Hadoop理论 

 

7.2   VMware Hadoop实践

https://hadoop.apache.org/

 

export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

<configuration>
 <property>
   <name>fs.defaultFS</name>
   <value>hdfs://node1:8020</value>
 </property>

  <property>
   <name>io.file.buffer.size</name>
   <value>131072</value>
 </property>
</configuration>

<configuration>
  <property>
     <name>dfs.datanode.data.dir.perm</name>
     <value>700</value>
  </property>

    <property>
     <name>dfs.namenode.name.dir</name>
     <value>/data/nn</value>
  </property>

    <property>
     <name>dfs.namenode.hosts</name>
     <value>node1,node2,node3</value>
  </property>

    <property>
     <name>dfs.blocksize</name>
     <value>268435456</value>
  </property>

    <property>
     <name>dfs.namenode.handler.count</name>
     <value>100</value>
  </property>

    <property>
     <name>dfs.datanode.data.dir</name>
     <value>/data/dn</value>
  </property>

</configuration>

export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

chown -R hadoop:hadoop /data
chown -R hadoop:hadoop /export

 看见了  就成功了:

7.3集群部署常见问题解决

7.4   云服务器上 Hadoop实践

 一个唯一的不同点:就是访问它的Web Ul   我们要走公网IP

7.5   HDFS 的 shell

hadoop-daemon.sh start datanode

7.6HDFSShell解决权限不足

 

7.7   JetBrains使用插件

 了解在JetBrains产品中安装使用BigDataTools插件

8   HDFS的存储原理

 

  	<property>
  	   <name>dfs.replication</name>
  	   <value>3</value>
  	</property>

 

9.MapReduce

10. YARN

10.1   YARN 理论

 

10.2   YARN 实践

1.

vm mapred-env.sh

 

#设置JDK路径
export JAVA_HOME=/export/server/jdk
# 设置JobHistoryServer进程内存为1G
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
#设置日志级别为INFO
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA

2.

  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <description>MapReduce的运行框架设置为YARN</description>
  </property>

    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node1:10020</value>
    <description>历史服务器通讯端口为node1:10020</description>
  </property>

    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node1:19888</value>
    <description>历史服务器web端口为node1:19888</description>
  </property>

    <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>/data/mr-history/tmp</value>
    <description>历史信息HDFS的记录临时路径</description>
  </property>

    <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/data/mr-history/done</value>
    <description>历史信息HDFS的记录路径</description>
  </property>

    <property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    <description>MapReduce HOME 设置为 HADOOP_HOME</description>
  </property>

      <property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    <description>MapReduce HOME 设置为 HADOOP_HOME</description>
  </property>

      <property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    <description>MapReduce HOME 设置为 HADOOP_HOME</description>
  </property>

1.

# 设置JDK路径的环境变显
export JAVA_HOME=/export/server/jdk
# 设置HADOOP HOME的环境变品
export HAD00P_HOME=/export/server/hadoop
 #设置配置文件路径的环境变品
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
 #设置目志文件路备的环境变量
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

2.

	<property>
		<name>yarn.resourcemanger.hostname</name>
		<value>node1</value>
		<description>ResourceManager设置在node1节点</description>
	</property>

	
	<property>
		<name>yarn.nodemanager.local-dirs</name>
		<value>/data/nm-local</value>
		<description>Nodemanager证中间数据本地存储路径</description>
	</property>


	<property>
		<name>yarn.nodemanager.log-dirs</name>
		<value>/data/nm-log</value>
		<description>Nodemanager数据日志本地存储路径</description>
	</property>


	
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
		<description>为MapReduce程序开启Shuffle服务</description>
	</property>


     <property>
		<name>yarn.log.server.url</name>
		<value>http://node1:19888/jobhistory/logs</value>
		<description>历史服务器URL</description>
	</property>


	<property>
		<name>yarn.web-proxy.address</name>
		<value>node1:8089</value>
		<description>代理服务器主机和端口</description>
	</property>


	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
		<description>开启日志聚合</description>
	</property>


	<property>
		<name>yarn.nodemanager.remote-app-log-dir</name>
		<value>/tmp/logs</value>
		<description>程序日志HDFS的存储日志</description>
	</property>


	<property>
		<name>yarn.resourcemanager.scheduler.class</name>
		<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
		<description>选择公平调度器</description>
	</property>

 3.

scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node3:/export/server/hadoop/etc/hadoop

mapred --daemon start historyserver

 mapred --daemon start historyserver

提交MapReduce任务到YARN执行:

Hive理论


1.Hive理论

2.Hive部署

VMware:

# 更新密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

# 安装Mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

# yum安装Mysql
yum -y install mysql-community-server

# 启动Mysql设置开机启动
systemctl start mysqld
systemctl enable mysqld

# 检查Mysql服务状态
systemctl status mysqld

# 第一次启动mysql,会在日志文件中生成root用户的一个随机密码,使用下面命令查看该密码
grep 'temporary password' /var/log/mysqld.log

# 修改root用户密码
mysql -u root -p -h localhost
Enter password:
 


mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root!@#$';

# 如果你想设置简单密码,需要降低Mysql的密码安全级别
set global validate_password_policy=LOW;    # 密码安全级别低
set global validate_password_length=4;     # 密码长度最低4位即可

# 然后就可以用简单密码了(课程中使用简单密码,为了方便,生产中不要这样)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

/usr/bin/mysqladmin -u root password 'root'

grant all privileges on *.* to root@"%" identified by 'root' with grant option;  


flush privileges;

   <property>
   <name>hadoop.proxyuser.hadoop.hosts</name>
   <value>*</value>
 </property>

   <property>
   <name>hadoop.proxyuser.hadoop.groups</name>
   <value>*</value>
 </property>

  • 切换到hadoop用户

su - hadoop

  • 下载Hive安装包:

http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz

  • 解压到node1服务器的:/export/server/内

tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/

  • 设置软连接

ln -s /export/server/apache-hive-3.1.3-bin /export/server/hive

  • 下载MySQL驱动包:

https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar

  • 将下载好的驱动jar包,放入:Hive安装文件夹的lib目录内

mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/

export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib

<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
  </property>
  
  <property>
	<name>javax.jdo.option.ConnectionDriverName</name>
	<value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
	<name>javax.jdo.option.ConnectionUserName</name>
	<value>root</value>
  </property>
  
  <property>
	<name>javax.jdo.option.ConnectionPassword</name>
	<value>root</value>
  </property>
  
  <property>
	<name>hive.server2.thrift.bind.host</name>
	<value>node1</value>
  </property>
  
  <property>
	<name>hive.metastore.uris</name>
	<value>thrift://node1:9083</value>
  </property>
  
  <property>
	<name>hive.metastore.event.db.notification.api.auth</name>
	<value>false</value>
  </property>
</configuration>

支持,Hive的配置已经完成,现在在启动Hive前,需要先初始化Hive所需的元数据库。

  • 在MySQL中新建数据库:hive

CREATE DATABASE hive CHARSET UTF8;

  • 执行元数据库初始化命令:

cd /export/server/hive

bin/schematool -initSchema -dbType mysql -verbos

  • # 初始化成功后,会在MySQL的hive库中新建74张元数据管理的表。

  • 确保Hive文件夹所属为hadoop用户
chown -R hadoop:hadoop apache-hive-3.1.3-bin hive
  • 创建一个hive的日志文件夹:

mkdir /export/server/hive/logs

  • 启动元数据管理服务(必须启动,否则无法工作)

前台启动:bin/hive --service metastore

后台启动:nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &

  • 启动客户端,二选一(当前先选择Hive Shell方式)

Hive Shell方式(可以直接写SQL): bin/hive

Hive ThriftServer方式(不可直接写SQL,需要外部客户端链接使用): bin/hive --service hiveserver2

阿里云部署:

3.Hive初体验

 

4.Hive 客户端

 

#先启动metastore服务 然后启动hiveserver2服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

netstat -anp | grep 10000

5.Hive 原理

 

内部标,外部表:

row format delimited fields terminated by '\t':表示以\t分隔

数据加载:

分区表:

分桶表:

set hive.enforce.bucketing=true;

create table course (c_id string,c_name string,t_id string) clustered by(c_id) into 3 buckets row format delimited fields terminated by '\t';

 

修改表:

Array复杂类型:

create table myhive.test_array(name string, work_locations array<string>)
row format delimited fields terminated by '\t'
COLLECTION ITEMS TERMINATED BY ',';

Map复杂类型:

 

create table myhive.test_map(
id int, name string, members map<string,string>, age int
)
row format delimited
fields terminated by ','
COLLECTION ITEMS TERMINATED BY '#' 
MAP KEYS TERMINATED BY ':';

 Struct复杂类型:

create table myhive.test_struct(
id string, info struct<name:string, age:int>
)
row format delimited
fields terminated by '#'
COLLECTION ITEMS TERMINATED BY ':';

 

数据查询:

掌握SELECT、聚合、GROUP BY、JOIN、ORDER BY等基础SQL查询:

准备数据:订单表

CREATE DATABASE itheima;
USE itheima;
CREATE TABLE itheima.orders (
    orderId bigint COMMENT '订单id',
    orderNo string COMMENT '订单编号',
    shopId bigint COMMENT '门店id',
    userId bigint COMMENT '用户id',
    orderStatus tinyint COMMENT '订单状态 -3:用户拒收 -2:未付款的订单 -1:用户取消 0:待发货 1:配送中 2:用户确认收货',
    goodsMoney double COMMENT '商品金额',
    deliverMoney double COMMENT '运费',
    totalMoney double COMMENT '订单金额(包括运费)',
    realTotalMoney double COMMENT '实际订单金额(折扣后金额)',
    payType tinyint COMMENT '支付方式,0:未知;1:支付宝,2:微信;3、现金;4、其他',
    isPay tinyint COMMENT '是否支付 0:未支付 1:已支付',
    userName string COMMENT '收件人姓名',
    userAddress string COMMENT '收件人地址',
    userPhone string COMMENT '收件人电话',
    createTime timestamp COMMENT '下单时间',
    payTime timestamp COMMENT '支付时间',
    totalPayFee int COMMENT '总支付金额'
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
LOAD DATA LOCAL INPATH '/home/hadoop/itheima_orders.txt' INTO TABLE itheima.orders;

准备数据:用户表

CREATE TABLE itheima.users (
    userId int,
    loginName string,
    loginSecret int,
    loginPwd string,
    userSex tinyint,
    userName string,
    trueName string,
    brithday date,
    userPhoto string,
    userQQ string,
    userPhone string,
    userScore int,
    userTotalScore int,
    userFrom tinyint,
    userMoney double,
    lockMoney double,
    createTime timestamp,
    payPwd string,
    rechargeMoney double
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
LOAD DATA LOCAL INPATH '/home/hadoop/itheima_users.txt' INTO TABLE itheima.users;

rlike关键字进行正则匹配:

 

UNION关键字进行查询结果的联合:

 

表数据进行采样操作:

虚拟列的使用方式:

函数:

使用show functions查看当下可用的所有函数;
通过describe function extended funcname来查看函数的使用方式。

----Mathematical Functions 数学函数-------

------ --取整函数: round  返回double类型的整数值部分 (遵循四舍五入)

select round(3.1415926);

--指定精度取整函数: round(double a, int d) 返回指定精度d的double类型

select round(3.1415926,4);

--取随机数函数: rand 每次执行都不一样 返回一个0到1范围内的随机数

select rand();

--指定种子取随机数函数: rand(int seed) 得到一个稳定的随机数序列

select rand(3);

--求数字的绝对值

select abs(-3);

--得到pi值(小数点后15位精度)

select pi();

 

案例:

--如果数据库已存在就删除

drop database if exists db_msg cascade ;

--创建数据库

create database db_msg ;

--切换数据库

use db_msg ;

--列举数据库

show databases ;

--如果表已存在就删除
drop table if exists db_msg.tb_msg_source ;
--建表
create table db_msg.tb_msg_source(
msg_time string comment "消息发送时间",
sender_name string comment "发送人昵称",
sender_account string comment "发送人账号",
sender_sex string comment "发送人性别",
sender_ip string comment "发送人ip地址",
sender_os string comment "发送人操作系统",
sender_phonetype string comment "发送人手机型号",
sender_network string comment "发送人网络类型",
sender_gps string comment "发送人的GPS定位",
receiver_name string comment "接收人昵称",
receiver_ip string comment "接收人IP",
receiver_account string comment "接收人账号",
receiver_os string comment "接收人操作系统",
receiver_phonetype string comment "接收人手机型号",
receiver_network string comment "接收人网络类型",
receiver_gps string comment "接收人的GPS定位",
receiver_sex string comment "接收人性别",
msg_type string comment "消息类型",
distance string comment "双方距离",
message string comment "消息内容"
);

load data local inpath '/home/hadoop/chat_data-30W.csv' overwrite into table tb_msg_source;

 

select 
    msg_time, sender_name, sender_ip, sender_phonetype, receiver_name, receiver_network 
from tb_msg_source limit 10;

完成数据源的清洗工作:

select   msg_time,   sender_name,  sender_gps from db_msg.tb_msg_source where length(sender_gps) = 0 limit 10;

select   msg_time from db_msg.tb_msg_source limit 10;

select   sender_gpsfrom db_msg.tb_msg_sourcelimit 10;

create table db_msg.tb_msg_etl(
msg_time string comment "消息发送时间",
sender_name string comment "发送人昵称",
sender_account string comment "发送人账号",
sender_sex string comment "发送人性别",
sender_ip string comment "发送人ip地址",
sender_os string comment "发送人操作系统",
sender_phonetype string comment "发送人手机型号",
sender_network string comment "发送人网络类型",
sender_gps string comment "发送人的GPS定位",
receiver_name string comment "接收人昵称",
receiver_ip string comment "接收人IP",
receiver_account string comment "接收人账号",
receiver_os string comment "接收人操作系统",
receiver_phonetype string comment "接收人手机型号",
receiver_network string comment "接收人网络类型",
receiver_gps string comment "接收人的GPS定位",
receiver_sex string comment "接收人性别",
msg_type string comment "消息类型",
distance string comment "双方距离",
message string comment "消息内容",
msg_day string comment "消息日",
msg_hour string comment "消息小时",
sender_lng double comment "经度",
sender_lat double comment "纬度"
);

INSERT OVERWRITE TABLE db_msg.tb_msg_etl
SELECT 
    *, 
    day(msg_time) as msg_day, 
    HOUR(msg_time) as msg_hour, 
    split(sender_gps, ',')[0] AS sender_lng,
    split(sender_gps, ',')[1] AS sender_lat
FROM tb_msg_source WHERE LENGTH(sender_gps) > 0;

select    msg_time, msy_day, msg_hour, sender_gps, sender_lng, sender_latfrom db_msg.tb_msg_etllimit 10;

基于Hive完成需求的各个指标计算:

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

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

相关文章

Vitis HLS 学习笔记--理解串流Stream(3)

目录 1. 简介 2. 综合报告的差别 2.1 包含 do-while 2.2 不包含 do-while 2.3 报告差异分析 3. 总结 1. 简介 针对《Vitis HLS 学习笔记--理解串流Stream(2)-CSDN博客》博文的内容&#xff0c;做进一步说明。 2. 综合报告的差别 2.1 包含 do-while Performance & …

Gltf.Export不可用解决办法

报错信息 在代码里面如果我们希望在runtime的时候导出GLTF&#xff0c;我们可以使用到FastGltf的export功能&#xff0c;但是当我们在代码里面使用的时候&#xff0c;却发现报错&#xff1a; error CS0234: The type or namespace name Export does not exist in the namespac…

Kafka应用Demo:生产者自定义消息分区方法

背景 没有设置消息键时Kafka默认的分区算法是轮循&#xff0c;设置了消息键将按消息键的hashcode计算分区值。这种方法可以保证未设置消息键时各分区负载均衡。也可以保证设置消息键后的消息放到同一个分区发送&#xff0c;以保证消息按顺序消费。 但在某些业务场景下&#xff…

闭散列哈希表

一、什么是 哈希 &#xff1f; 1.1 哈希概念 与 哈希冲突 在正式介绍闭散列哈希之前&#xff0c;我们需要明确 哈希 的概念。 哈希 &#xff1a;构造一种数据存储结构&#xff0c;通过函数 HashFunc() &#xff0c;使 元素的存储位置 与 其对应的键值 建立一一映射关系&…

Qt Excel读写 - QXlsx读取Excel文件显示到QTableWidget

Qt Excel读写 - QXlsx读取Excel文件显示到QTableWidget 引言一、设计思路二、核心源码三、其他参考链接 引言 QXlsx官方显示的例子中&#xff0c;有一个XlsxFactory可以Load xlsx file and display on Qt widgets.但是其包含商业许可…自己写了一个简化版本&#xff1a;可以读取…

深度学习--生成对抗网络GAN

GAN简介 让我们先来简单了解一下GAN GAN的全称是Generative Adversarial Networks&#xff0c;中文称为“生成对抗网络”&#xff0c;是一种在深度学习领域广泛使用的无监督学习方法。 GAN主要由两部分组成&#xff1a;生成器和判别器。生成器的目标是尽可能地生成真实的样本数…

深度学习之前馈神经网络

1.导入常用工具包 #在终端中输入以下命令就可以安装工具包 pip install numpy pip install pandas Pip install matplotlib注&#xff1a; numpy是科学计算基础包 pandas能方便处理结构化数据和函数 matplotlib主要用于绘制图表。 #导包的代码&#xff1a; import numpy as n…

java对象互换工具类

1:将Object类型转成json字符串 /*** 将对象转为字符串* param obj* return*/public static String toString(Object obj) {if(obj null) {return null;}if ("".equals(obj.toString())) {return null;}if (obj instanceof String) {return obj.toString();}try {Ob…

c#教程——索引器

前言&#xff1a; 索引器&#xff08;Indexer&#xff09;可以像操作数组一样来访问对象的元素。它允许你使用索引来访问对象中的元素&#xff0c;就像使用数组索引一样。在C#中&#xff0c;索引器的定义方式类似于属性&#xff0c;但具有类似数组的访问方式。 索引器&#x…

2010-2030年GHS-POP数据集下载

扫描文末二维码&#xff0c;关注微信公众号&#xff1a;ThsPool 后台回复 g008&#xff0c;领取 2010-2030年100m分辨率GHS-POP 数据集 &#x1f4ca; GHS Population Grid (R2023)&#xff1a;全球人口分布的精准视图与深度应用 &#x1f310; 在全球化和快速城市化的今天&am…

2024-05-10 Ubuntu上面使用libyuv,用于转换、缩放、旋转和其他操作YUV图像数据,测试实例使用I420ToRGB24

一、简介&#xff1a;libyuv 最初是由Google开发的&#xff0c;主要是为了支持WebRTC项目中的视频处理需求。用于处理YUV格式图像数据的开源库。它提供了一系列的函数&#xff0c;用于转换、缩放、旋转和其他操作YUV图像数据。 二、执行下面的命令下载和安装libyuv。 git clo…

【全开源】JAVA台球助教台球教练多端系统源码支持微信小程序+微信公众号+H5+APP

功能介绍 球厅端&#xff1a;球厅认证、教练人数、教练的位置记录、助教申请、我的项目、签到记录、我的钱包、数据统计 教练端&#xff1a;我的页面&#xff0c;数据统计、订单详情、保证金、实名认证、服务管理、紧急求助、签到功能 用户端&#xff1a;精准分类、我的助教…

FonePaw Data Recovery for Mac:轻松恢复丢失数据

FonePaw Data Recovery for Mac是一款功能强大的数据恢复软件&#xff0c;专为Mac用户设计&#xff0c;帮助用户轻松恢复因各种原因丢失的数据。该软件支持从硬盘驱动器、存储卡、闪存驱动器等存储介质中恢复丢失或删除的文件&#xff0c;包括照片、视频、文档、电子邮件、音频…

2024最新版付费进群系统源码全开源

源码说明&#xff1a; 下 载 地 址 &#xff1a; runruncode.com/php/19758.html 2024最新修复版独立付费进群系统源码全开源&#xff0c;基于ThinkPHP框架开发。 1、修复SQL表 2、修复支付文件 3、修复支付图标不显示 4、修复定位、分销逻辑、抽成逻辑 5、新增支持源支…

AVL树的旋转

目录 1.平衡因子 2.旋转 a.节点定义 b.插入 插入 平衡因子更新 旋转 左单旋 右单旋 右左双旋 左右双旋 3.AVL树的验证 1.平衡因子 我们知道搜索二叉树有缺陷&#xff0c;就是不平衡&#xff0c;比如下面的树 什么是搜索树的平衡&#xff1f;就是每个节点的左右子树的…

Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点

文章目录 一、通信机制1、轮询1.1、短轮询1.2、长轮询 2、Websocket3、Server-Sent Events 二、区别1、连接方式2、协议3、兼容性4、安全性5、优缺点5.1、WebSocket 的优点&#xff1a;5.2、WebSocket 的缺点&#xff1a;5.3、SSE 的优点&#xff1a;5.4、SSE 的缺点&#xff1…

刷代码随想录有感(62):修建二叉搜索树

题干&#xff1a; 代码&#xff1a; class Solution { public:TreeNode* traversal(TreeNode* root, int low, int high){if(root NULL)return NULL;if(root->val < low)return traversal(root->right, low, high);if(root->val > high)return traversal(ro…

新版文件同步工具(Python编写,其中同时加入了多进程计算MD5、多线程复制大文件、多协程复制小文件、彩色输出消息、日志功能)

两个月前&#xff0c;接到一个粉丝的要求&#xff0c;说希望在我之前编写的一个python编写的文件同步脚本(Python编写的简易文件同步工具(已解决大文件同步时内存溢出问题)https://blog.csdn.net/donglxd/article/details/131225175)上加入多线程复制文件的功能&#xff0c;前段…

Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)

1 漏洞描述 CVE-2020-1938 是 Apache Tomcat 中的一个严重安全漏洞&#xff0c;该漏洞涉及到 Tomcat 的 AJP&#xff08;Apache JServ Protocol&#xff09;连接器。由于 AJP 协议在处理请求时存在缺陷&#xff0c;攻击者可以利用此漏洞读取服务器上的任意文件&#xff0c;甚至…

ALV Color-颜色

目录 前言 实战 列颜色 行颜色 单元格颜色 前言 在ABAP ALV中&#xff0c;Color颜色设置是一种增强列表显示效果的重要手段&#xff0c;可以用来突出显示特定行、列或单元格&#xff0c;以吸引用户注意或传达数据的特定状态。 颜色设置中有优先级顺序&#xff0c;他们是单元格…