Docker化HBase排错实录:从Master hflush启动失败到Snappy算法未支持解决
前言
在容器化时代,使用 Docker 部署像 HBase 这样复杂的分布式系统也比较方便。社区也提供了许多方便的 HBase Docker 镜像,没有找到官方的 apache
的,但有包含许多大数据工具的 harisekhon/hbase
或用于学习目的的 bigdatauniversity/hbase
等,下载量多的一般都比较老了,也可以找最新的。选择一个合适的镜像可以快速启动 HBase 实例。小子是在老镜像上基础上创建的。
问题及结论
然而,即使使用了预构建的镜像,仍然可能遇到挑战。先总结一下小子在 Docker 环境中使用 HBase 2.5.11 时,遇到的问题及解决方案,后面是详细介绍:
- HMaster 启动失败: 由于本地文件系统缺少
hflush
能力,通过设置hbase.unsafe.stream.capability.enforce=false
绕过强制检查得以解决。 - Zookeeper 启动失败: 因
/tmp
目录数据不一致,通过清理 Zookeeper 数据目录并强调持久化存储的重要性得以解决。 - Snappy 压缩失败: 由于默认 Codec 依赖 Native 库在 Docker 环境中出现问题,通过在
hbase-site.xml
中配置使用纯 Java 的 Snappy Codec (hbase.io.compress.snappy.codec
) 解决。
环境
- HBase 版本: 2.5.11
- 部署环境: Docker (未使用 HDFS,
hbase.rootdir
(/hbase-data) 指向本地文件系统路径) - 1-master+1-regionserver+1-zookeeper
问题一:HMaster 启动失败 - “StreamLacksCapabilityException: hflush”
在尝试启动 HBase 集群时,遇到的第一个拦路虎是 HMaster 进程无法成功启动。检查 Master 日志 (logs/hbase--master-....log
),定位到以下关键错误信息:
2025-04-26T09:04:32,270 WARN [main] wal.AbstractProtobufLogWriter: Init output failed, path=file:/hbase-data/MasterData/WALs/...
org.apache.hadoop.hbase.util.CommonFSUtils$StreamLacksCapabilityException: hflush# ... (堆栈跟踪)2025-04-26T09:04:32,277 ERROR [main] wal.AsyncFSWALProvider: The RegionServer async write ahead log provider relies on the ability to call hflush for proper operation... but the current FileSystem does not support doing so. Please check the config value of 'hbase.wal.dir' and ensure it points to a FileSystem mount that has suitable capabilities...2025-04-26T09:04:32,281 ERROR [main] master.HMaster: Failed to become active master
java.io.IOException: cannot get log writer# ... (Caused by: StreamLacksCapabilityException: hflush)2025-04-26T09:04:32,282 ERROR [main] master.HMaster: ***** ABORTING master ...: Unhandled exception. Starting shutdown. *****
原因分析:
日志非常清晰地指出了问题所在:
- HBase 的
hbase.rootdir
被配置为file:/hbase-data
,使用的是本地文件系统。 - HBase 默认(或当前配置)的 Write-Ahead Log (WAL) 提供者是
AsyncFSWALProvider
。 AsyncFSWALProvider
设计上依赖底层文件系统提供hflush
功能,这是 HDFS 文件系统的一个重要能力,用于确保数据被强制刷写到存储介质,保证数据持久性。- 然而,标准的本地文件系统 (
file:/
) 实现通常不保证或不报告支持hflush
这个 HDFS 特有的能力。 - 因此,在初始化 WAL 时,由于底层文件系统缺少所需的能力,导致
AsyncFSWALProvider
初始化失败,进而 HMaster 启动中止。
解决方案探索与最终方案:
小子查资料(包括从gemini和chatgpt上问)首先尝试修改 hbase-site.xml
(在$HBASE_HOME/conf下),将 WAL 提供者更改为旧版的、理论上更适合本地文件系统的 filesystem
:
<property><name>hbase.wal.provider</name><value>filesystem</value>
</property>
遗憾的是,仅仅这样修改并重启后,问题依旧存在。推测可能是 HBase 或 Hadoop 的底层库在实际使用 WAL 提供者之前,仍然会进行一个文件系统能力的预检查,这个检查仍然失败了。
最终找到并确认有效的解决方案是在 hbase-site.xml
中添加以下配置,显式地禁用强制的文件流能力检查(是联网的chatgpt给出的答案):
<property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value>
</property>
解释: 将此参数设置为 false
,相当于告诉 HBase:“我知道我使用的文件系统可能没有报告支持 hflush
这些高级能力,但请不要因为这个检查就失败,继续尝试运行。” 这样就绕过了启动时的强制检查。
关于 “unsafe”: 这个名字提醒我们,禁用检查意味着 HBase 失去了对底层存储 hflush
能力的强保证。对于本地文件系统,操作系统通常有缓存机制,虽然 filesystem
WAL 提供者会尽力(如使用 fsync
)保证数据落盘,但在极端情况(如 OS 崩溃且 fsync
未完成)下,理论上存在丢失极少量已确认写入的数据的风险。不过,在 Docker 中使用可靠的本地卷进行开发或测试,这种风险通常是可接受的。生产环境中使用非 HDFS 存储时,务必谨慎评估此配置的安全性影响。
应用此配置并重启后,HMaster 终于成功启动了!
问题二:Zookeeper 启动失败 - “No snapshot found, but there are log entries”
在多次重启(尤其在容器内直接重启hbase时)的 Zookeeper 进程也可能启动失败。查看 Zookeeper 的日志 ($HBASE_HOME/logs/zookeeper.log
),发现了这个错误:
2025-04-26T08:46:06,621 INFO [main] persistence.SnapStream: zookeeper.snapshot.compression.method = CHECKED
java.io.IOException: No snapshot found, but there are log entries. Something is broken!at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:290)at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:285)# ... (堆栈跟踪省略)
日志同时显示 Zookeeper 的数据和快照目录位于 /tmp/hbase-root/zookeeper/version-2
。
原因分析:
这个错误表明 Zookeeper 的数据目录处于一个不一致的状态:存在事务日志文件,却没有对应的快照文件作为恢复的起点。在 Docker 环境下,尤其当数据目录指向 /tmp
时,常见原因有:
/tmp
的易失性: 容器重启可能导致/tmp
目录下的内容被部分或全部清除。- 不正常关闭: 上次容器非正常退出,可能导致 Zookeeper 数据文件写入中断或损坏。
- 缺少持久化: Zookeeper 的数据目录没有配置 Docker Volume 或绑定挂载到宿主机的持久化存储上。
小子的容器原因,是因为没有重启pod,老版本hbase启用成功过,zk有数据持久化到目录,升级到高版本不兼容,就启动不起来了。
解决方案:
最直接有效的办法是清理掉这个损坏的 Zookeeper 数据目录。
- 停止 HBase 相关容器。
- 进入 Master 容器(如果 ZK 在此容器内)或操作对应的 Docker Volume。
- 删除 Zookeeper 数据目录:
# 示例:在容器内执行 rm -rf /tmp/hbase-root/zookeeper
或直接重新启动容器。
执行清理操作后,Zookeeper 成功启动。
配置优化:调整 JVM 堆内存
为了让 HBase 更稳定、性能更好,可以根据容器或服务器的资源情况,为 HBase 的核心组件(Master, RegionServer, Zookeeper)分配合适的 JVM 堆内存。们通过修改 hbase-env.sh
文件来设置(也可以通过 Docker 环境变量如 HBASE_MASTER_OPTS
等方式传入)。
在 conf/hbase-env.sh
文件中添加或修改以下行:
# ==============================================================================
# JVM Heap Settings for HBase Components
# ==============================================================================# 设置 HBase Master 最大堆内存为 3GB
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xmx3g"# 设置 HBase RegionServer 最大堆内存为 6GB
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xmx6g"# 设置 HBase 管理的 Zookeeper 最大堆内存为 1GB (仅对内嵌 ZK 有效)
export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS -Xmx1g"# ==============================================================================
# 可选: 设置初始堆大小 (-Xms) 与最大堆大小一致以提高性能
# ==============================================================================
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xms3g"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xms6g"
# export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS -Xms1g"
应用方式:
- 将修改后的
hbase-env.sh
文件通过 Docker Volume 挂载到容器的/path/to/hbase/conf/hbase-env.sh
位置。 - 或者,基于 HBase 镜像构建一个新镜像,在 Dockerfile 中将修改后的文件
COPY
进去。
重要: 修改配置后,需要重启对应的 HBase 容器才能生效。同时,确保为 Docker 容器本身分配了足够的内存(例如,使用 docker run --memory
或 docker-compose.yml
中的 deploy.resources.limits.memory
)来容纳设置的 JVM 堆以及其他开销。
问题三:Snappy 压缩表创建失败 - “previously failed test”
HBase服务启动成功后。尝试创建一个使用 Snappy 压缩的表:
create 'test_snappy_1', {NAME => 'cf1', COMPRESSION => 'SNAPPY'}
没想到,RegionServer 日志中又出现了错误:
2025-04-26T05:19:20.671847592Z 2025-04-26 05:19:20,490 ERROR [RS_OPEN_REGION-...] handler.OpenRegionHandler: Failed open of region=test_snappy_1...
2025-04-26T05:19:20.671852492Z org.apache.hadoop.hbase.DoNotRetryIOException: Compression algorithm 'snappy' previously failed test.
2025-04-26T05:19:20.671857792Z at org.apache.hadoop.hbase.util.CompressionTest.testCompression(CompressionTest.java:93)# ... (堆栈跟踪)
错误信息 Compression algorithm 'snappy' previously failed test
指示 HBase 在尝试使用 Snappy 压缩时,其内部的压缩算法测试失败了。
原因分析与纯 Java Codec:
根据 HBase 官方文档,HBase 支持多种压缩算法,包括 Snappy。默认情况下,SNAPPY
算法通常映射到 org.apache.hadoop.io.compress.SnappyCodec
这个实现。这个实现依赖于 Hadoop Native Library。在 Docker 环境中,如果:
- 基础镜像没有包含 Hadoop Native Library;
- 包含的 Native Library 版本与操作系统或 JVM 不兼容;
- Native Library 因为某些原因加载失败;
那么,依赖 Native Library 的 Snappy Codec 就会在 HBase 的 CompressionTest
中失败。
幸运的是,新版的HBase支持纯 Java 实现的压缩 Codec,它们不依赖于操作系统级别的 Native 库,从而可以避免这类环境兼容性问题:
- 官方介绍的Java 实现
- 2.5.x才支持的jira说明
由于小子使用的是 HBase 2.5.11,这些纯 Java 实现都是可用的。不想再引入HDFS,所以使用纯 Java 实现是理想的选择。
解决方案:配置使用 Aircompressor Snappy Codec
在 hbase-site.xml
中添加以下配置,明确指定 SNAPPY
压缩算法使用 Aircompressor 提供的纯Java 实现:
<property><name>hbase.io.compress.snappy.codec</name><value>org.apache.hadoop.hbase.io.compress.aircompressor.SnappyCodec</value>
</property>
然后务必重启 HBase Master 和所有 RegionServer 进程。
重启完成后,再次尝试创建 Snappy 压缩表:
create 'test_snappy_1', {NAME => 'cf1', COMPRESSION => 'SNAPPY'}
这一次,命令成功执行,表成功创建!
也可以使用以下命令验证:
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.util.CompressionTest file:///tmp/test.txt snappy
结语
在 Docker 中部署和运行 HBase 2.5.11 的过程充满了挑战,但也收获颇丰。小子也顺手记录,以飨各位看官,欢迎留言交流!
相关文章:
Docker化HBase排错实录:从Master hflush启动失败到Snappy算法未支持解决
前言 在容器化时代,使用 Docker 部署像 HBase 这样复杂的分布式系统也比较方便。社区也提供了许多方便的 HBase Docker 镜像,没有找到官方的 apache的,但有包含许多大数据工具的 harisekhon/hbase 或用于学习目的的 bigdatauniversity/hbase…...
端到端自动驾驶的数据规模化定律
25年4月来自Nvidia、多伦多大学、NYU和斯坦福大学的论文“Data Scaling Laws for End-to-End Autonomous Driving”。 自动驾驶汽车 (AV) 栈传统上依赖于分解方法,使用单独的模块处理感知、预测和规划。然而,这种设计在模块间通信期间会引入信息丢失&am…...
桌面端开发技术栈选型:开启高效开发之旅
在数字化浪潮中,桌面端应用依然占据重要地位,而选择合适的技术栈是打造优质桌面端应用的关键一步。以下是多种主流桌面端开发技术栈的介绍与对比,希望能为大家提供有价值的参考。 基于 Web 技术的跨平台框架 • Electron: • 特…...
C++模拟Java C#的 finally
在 Java 和 C# 中,finally 是一个与异常处理(try-catch)配合使用的关键字,用于确保一段代码无论是否发生异常都会被执行。它通常用于释放资源(如文件句柄、数据库连接、锁等),避免内存泄漏或状态…...
Spring Boot安装指南
🔖 Spring Boot安装指南 🌱 Spring Boot支持两种使用方式: 1️⃣ 可作为常规Java开发工具使用 2️⃣ 可作为命令行工具安装 ⚠️ 安装前提: 📌 系统需安装 Java SDK 17 或更高版本 🔍 建议先运行检查命令…...
zephyr架构下Bluetooth advertising接口
目录 概述 1 函数接口 2 主要函数介绍 2.1 bt_le_adv_start函数 2.1.1 函数功能介绍 2.1.2 典型使用示例 2.1.3 广播间隔 2.1.4 注意事项 2.2 bt_le_adv_stop 函数 2.2.1 函数功能 2.2.2 使用方法介绍 2.2.3 实际应用示例 2.2.4 关键注意事项 2.2.5 常见问题解决 …...
Oracle官宣 MySQL+APEX+AI三认证限时免费
1 MySQL8 OCP 考试代码 1Z0-908 免费时间:2025年4月20日至7月31日 https://education.oracle.com/mysql-promo 2 APEX云开发专家 考试代码 1Z0-771 免费时间:2025年5月15日截止! https://mylearn.oracle.com/ou/learning-path/become…...
深入理解N皇后问题:从DFS到对角线优化
N皇后问题是一个经典的算法问题,要求在NN的棋盘上放置N个皇后,使得它们互不攻击。本文将全面解析该问题的解法,特别聚焦于DFS算法和对角线优化的数学原理。 问题描述 在NN的国际象棋棋盘上放置N个皇后,要求: 任意两个…...
1软考系统架构设计师:第一章系统架构概述 - 超简记忆要点、知识体系全解、考点深度解析、真题训练附答案及解析
超简记忆要点 一、考试大纲 目标:架构设计能力(需求→架构)能力:技术/方法/行业科目:综合(选择)、案例(问答)、论文(论述) 二、架构核心 定义…...
MuJoCo 关节角速度记录与可视化,监控机械臂运动状态
视频讲解: MuJoCo 关节角速度记录与可视化,监控机械臂运动状态 代码仓库:GitHub - LitchiCheng/mujoco-learning 关节空间的轨迹优化,实际上是对于角速度起到加减速规划的控制,故一般来说具有该效果的速度变化会显得丝…...
如何打包python程序为可执行文件
将 Python 程序打包为可执行文件是一个常见需求,尤其是在希望将应用程序分享给不具备 Python 环境的用户时。以下是使用 PyInstaller 工具将 Python 程序打包为可执行文件的步骤。 步骤 1:安装 PyInstaller 如果您还没有安装 PyInstaller,请…...
产销协同是什么?产销协同流程有哪些?
目录 一、产销协同是什么 1.从市场需求的角度来看 2.企业内部运营的角度来看 3.从供应链的角度来看 二、实现产销协同的八大步骤 1. 市场需求预测 2. 销售计划制定 3. 生产能力评估 4. 生产计划制定 5. 库存管理 6. 信息共享与沟通 7. 订单执行与跟踪 8. 绩效评估…...
SQL 查询进阶:WHERE 子句与连接查询详解
SQL(Structured Query Language)是管理关系型数据库的核心语言,熟练掌握其查询功能对于数据处理至关重要。本文将深入探讨 SQL 中的两个关键概念:WHERE 子句和连接查询。我们将详细讲解 WHERE 子句中的模糊查询、IS NULL、IS NOT …...
【计算机视觉】CV实战项目- DFace: 基于深度学习的高性能人脸识别
图:MTCNN的三阶段网络结构(P-Net、R-Net、O-Net) DFace深度解析:基于深度学习的高性能人脸识别 深度解析DFace:基于PyTorch的实时人脸检测与识别系统技术背景与项目概述核心功能与特点实战部署指南环境准备硬件要求软…...
基于Docker、Kubernetes和Jenkins的百节点部署架构图及信息流描述
以下是基于Docker、Kubernetes和Jenkins的百节点部署架构图及信息流描述,使用文本和Mermaid语法表示: 架构图(Mermaid语法) #mermaid-svg-WWCAqL1oWjvRywVJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WWCAq…...
百度搜索AI开放计划:让应用连接精准流量的秘诀
引言 在人工智能技术深刻改变各行各业的今天,每天都有许多AI应用诞生。然而无论是开发者还是用户依然会感到自己的应用鲜有人使用或是需求没有被充分满足。这种情况正说明了为什么我们需要SEO流量,而一个能够与AI应用直接相关的SEO平台更是呼之欲出。百度…...
Redis数据结构SDS,IntSet,Dict
1.字符串:SDS SDS的底层是C语言编写的构建的一种简单动态字符串 简称SDS,是redis比较常见的数据结构。 由于以下几种缺点,Redis并没有直接采用C语言的字符串。 1.获取长度需要计算 2.非二进制安全 :中间不能有 \0,…...
leetcode201.数字范围按位与
找到公共前缀部分,然后后面的部分全0 class Solution {public int rangeBitwiseAnd(int left, int right) {int offset 0;while (left ! right) {offset;left left >> 1;right right >> 1;}return right << offset;} }...
云服务器 —— 公有 IP 与 私有 IP
云服务器的 公有 IP 和 私有 IP 在网络架构中扮演不同的角色,具体用途和区别如下: 目录 1. 公有 IP(Public IP) 作用: 特点: 示例场景: 2. 私有 IP(Private IP) 作用…...
北斗导航 | Transformer增强BiLSTM网络的GNSS伪距观测量误差探测
在GNSS(全球导航卫星系统)定位中,伪距观测量的误差直接影响定位精度。结合Transformer和LSTM的优势,可以设计一种混合模型以提升误差探测能力。以下是具体的技术实现方案: 1. 模型架构设计 1.1 输入特征设计 原始GNSS观测数据: 伪距观测值(C/A码、P码)、载波相位、多普…...
0803分页_加载更多-网络ajax请求2-react-仿低代码平台项目
文章目录 1 分页1.1 url与分页参数1.2 分页组件与url1.3 列表页引用分页组件 2 加载更多2.1 状态2.2 触发时机2.3 加载数据2.4优化 结语 1 分页 1.1 url与分页参数 查询问卷列表接口,添加分页参数: page:当前页码(第几页&#…...
React 与 Vue 的区别:你会选择哪个框架呢
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
Jmeter如何取JDBC request响应参数作为下一个接口的值?
1、 功能参数说明 Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字保持一致 Query:填写的sql语句未尾不要加“;” Parameter valus:参数值,对查询条件进行参数化 Paramete…...
【C++】14.容器适配器 | stack | queue | 仿函数 | priority_queue
1. 容器适配器 什么是适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设 计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 在C中,容器适配器(Container Adapters&…...
论文阅读:2025 arxiv Aligning to What? Limits to RLHF Based Alignment
Aligning to What? Limits to RLHF Based Alignment https://arxiv.org/pdf/2503.09025 https://www.doubao.com/chat/3871529075012866 速览 这篇论文主要探讨了强化学习从人类反馈(RLHF)在对齐大型语言模型(LLMs)时的局限性…...
利用Arcgis自己绘制shp文件
1.选择自己想要创建的shp文件的位置 我是直接创建在连接文件夹中 2.右键-新建-shp 3.设置名称、要素类型、空间参考 4、点击创建要素 5、右侧选择图层、创建面 6、开始绘制,双击任意位置结束绘制 之后可以改一下shp文件的名字...
路由器重分发(OSPF+静态路由)
路由器重分发(OSPF静态路由) 静态路由充当不了翻译官 OSPF路由 OSPF路由需要宣告自己的ip, Router(config)#router ospf 1 Router(config-router)#network 10.10.10.0 0.0.0.255 area 0还要帮静态路由的也宣告一下 Router(config)#ip route…...
KTT入门
Kinetic tournament tree 简称 KTT 下文中全部简写。 KTT 用于解决类以下问题: 已知 N N N 条一次函数,求解一段区间内函数最大值。支持修改操作可以修改 x i x_i xi 或者 b i b_i bi 的值。具体做法: 我们考虑线段树来维护一个类似 Δ \Delta Δ 的东西,我们令当…...
WPF 上位机开发模板
WPF 上位机开发模板 WPF上位机开发模板,集成了基础操作菜单、海康视觉实时图像界面、串口通讯、网口通讯、主流PLC通讯、数据存储、图片存储、参数配置、权限管理、第三方webapi接口接入、数据追溯与查询等功能。 一、项目结构 WpfSupervisor/ ├── Models/ …...
理想星环OS选择NuttX作为MCU侧OS的核心原因分析
文章目录 引言一、POSIX兼容性:降低汽车软件迁移成本二、轻量级与模块化:适配MCU资源约束三、硬实时性能:保障车辆控制确定性四、多芯片适配:加速车企供应链灵活性五、安全与可靠性:构建纵深防御体系六、社区与生态&am…...
IP数据报发送和转发的过程
1. 发送端准备数据 应用程序(比如浏览器)要发送数据,比如访问一个网站。 应用层(HTTP) → 传输层(TCP/UDP) → 网络层(IP)。 IP层负责把数据包打包,加上必要…...
Pinia 详细解析:Vue3 的状态管理利器
一、Pinia 概述 Pinia 是 Vue 3 的官方推荐状态管理库,由 Vue 核心团队维护。它是对 Vuex 的改进和简化,提供了更简洁的 API 和更好的 TypeScript 支持。 Pinia 的核心优势 更简单的 API:相比 Vuex 减少了概念和模板代码完美的 TypeScript…...
pytorch python常用指令
一、常用的conda指令 创建新的python环境 conda create -n env_name python3.x 查看已有的python环境 conda env list 进入已有的python环境 conda activate env_name 退出当前的python环境 conda deactivate 二、常用的pip指令 pip install -r requirements.txt 根据…...
ubantu18.04(Hadoop3.1.3)之Spark安装和编程实践
说明:本文图片较多,耐心等待加载。(建议用电脑) 注意所有打开的文件都要记得保存。 第一步:准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。 以下所有操…...
Ubuntu下安装vsode+qt搭建开发框架(二)
Ubuntu下安装vsode+qt搭建开发框架(二) 上一节介绍了vsode下搭建qt环境,采用的项目构建方式是使用qt官方的qmake工具。然而从qt6之后,官方已经开始推荐使用cmake来构建项目;并且许多项目都是cmake直接构建的,用cmake来构建项目具有可以更方便的融合其他开源项目。 一、vs…...
获取房源信息并完成可视化——网络爬虫实战1
房源信息爬虫与可视化分析程序 个人程序全网一手,盗卖必究 项目介绍 本项目是一个基于Python的房源信息爬虫与可视化分析工具,可以爬取链家网的二手房源信息,并对数据进行清洗、分析和可视化展示。通过本工具,用户可以快速了解特…...
css word
介绍 CSS word-spacing 属性,用于指定段字之间的空间,例如: p {word-spacing:30px; }word-spacing属性增加或减少字与字之间的空白。 注意: 负值是允许的。 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 属…...
[mysql]约束(上)
约束 道德约束,法律约束,这个约束在表里面是狭义的. 约束广义的,比如数值型你就不能录入’abc’.字符,定义了varchar(15)范围不能超过数量15. 我们这个章节要说的约束是狭义的,是具体的我们设定的约束, 为什么我们需要约束呢 我们是为了数据的精确性和可靠性,我们了为了防…...
Eclipse 插件开发 2
Eclipse 插件开发 2 1 插件配置 1 插件配置 <?xml version"1.0" encoding"UTF-8"?> <?eclipse version"3.4"?> <plugin><extension point"org.eclipse.ui.commands"><category id"com.xu.learn.…...
用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1
希望借助手写这个go的中间件项目,能够理解go语言的特性以及用go写中间件的优势之处,同时也是为了更好的使用和优化公司用到的trpc,并且作者之前也使用过grpc并有一定的兴趣,所以打算从0构建一个rpc系统,对于生产环境已…...
树莓派(Raspberry Pi)入门建议
树莓派(Raspberry Pi)是一个低成本、信用卡大小的微型电脑,它的核心价值在于高度灵活的可编程性和丰富的硬件扩展能力。根据你的兴趣和需求,它可以用来做各种有趣且实用的项目,以下是常见的应用场景和实例:…...
SpringBoot物资管理系统 | JavaWeb项目设计与实现
概述 基于JavaWeb技术实现了一套完整的物资管理解决方案。该系统适用于企业、学校、医院等机构,提供高效的物资入库、申报、公告管理等功能,帮助用户实现物资管理的数字化与智能化。 主要内容 1. 管理员功能实现 5.1.1 物资管…...
《P1950 长方形》
题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形。 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为 n,m。小明将这张纸看成是由nm个格子组成,在剪的时候,只能沿着格子的…...
SpringCloud微服务架构
Spring Cloud是一个广泛使用的微服务框架,它基于Spring Boot构建,旨在帮助开发者构建复杂的分布式系统。Spring Cloud提供了多种工具和库,使得开发人员可以轻松地构建和部署微服务架构。以下是一些关键组件和概念,帮助你理解Sprin…...
网络管理知识点
1.传统网络管理:Web网管方式,CLI方式,基于SNMP集中管理 2.SNMP简单网络管理协议 SNMPV1实现方便,安全性弱 SNMPV2支持更多错误 SNMPV3认证加密,访问控制 3.SNMP,UDP传输效率较高,报文容易丢失…...
【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建
在企业级 Java Web 应用的部署场景中,Tomcat 作为主流的 Servlet 容器和 Web 服务器,其核心配置的优化以及集群搭建对于保障应用的高性能、高可用性至关重要。 一、Tomcat 核心配置优化 1.1 server.xml 配置文件解析 Tomcat 的核心配置文件server…...
模板引擎语法-算术运算
模板引擎语法-算术运算 文章目录 模板引擎语法-算术运算[toc]1.加法运算2.减法运算3.乘法与除法运算4.四则运算5.整除运算 在Django框架模板中,没有专门定义关于算术运算的语法。不过,通过一些标签和过滤器的配合使用,可以模拟实现类似“加减…...
MySQL 联合查询教程
MySQL 联合查询教程 在 MySQL 中,联合查询用于从多个表中检索数据,常用于关联表中的信息。联合查询(JOIN)通过将两个或更多表根据一定条件连接起来,从而形成一个虚拟的结果集。MySQL 支持多种类型的联合查询ÿ…...
罗技Flow跨电脑控制
Windows 下载适用于 Windows 10 或更高版本的应用程序 macOS 下载适用于 macOS 12 或更高版本的应用程序 Flow 让您可以在两台电脑之间甚至 Windows 和 macOS 之间畅快办公。 只需将支持 Flow 的鼠标的光标移动到屏幕边缘即可在电脑和操作系统之间切换。支持 Flow 的键盘会…...
Unity网络编程入门:掌握Netcode for GameObjects实现多人游戏基础(Day 39)
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...