_ro 两张表,分别对应同一张 MOR 表的 Snapshot 查询表和 Read Optimized 查询表。Snapshot 查询表的 Input Format 信息取值为 org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat,Read Optimized 查询的 Input Format 信息取值为 org.apache.hudi.hadoop.HoodieParquetInputFormat;
数据文件元信息方面,增加 Optional 的 Delta Logs 文件列表字段,用来存储 Hudi MOR 表 Base 数据文件相对应的 Logs 更新文件信息。
2. 将 Hudi 元信息采集模块集成到全新 Catalog 框架内,只需要创建一次 Hudi Catalog ,后续便可以直接查询该 Catalog 下的所有 Hudi 表,不再需要以前的手工创建外部表的繁琐过程。
(https://docs.starrocks.io/zh-cn/latest/data_source/catalog/hudi_catalog)
全新 Catalog 框架结构:
3. CBO 优化器和执行计划优化:
4.表结构解析完成 Hudi 表字段类型映射:
备注:即将发布的 StarRocks 2.5.0 版本会支持 Struct、Map 数据类型的读取,Hudi COW 表也会同步支持。
5. 平衡 IO 请求优化:
StarRocks 查询传统的 Hive 表的时候,若单个数据文件的大小过大,会对这个文件进行 File Split 均匀拆分,形成多个 Scan Range。但在 Hudi 表的实现里,我们直接对 Base file 和对应 Delta Logs(即 File Slice)形成一个 Scan Range,除了有潜在的 Merge 逻辑数据问题之外,还有 IO 效率取舍,即使做了 File Split 拆分,比如拆成 3 份,其对应的 Delta Logs 就需要跟着拆分后的 File Slice 重复读取3次,这很可能会加剧存储系统的压力。在工程实现上,我们在 Scan Range 里添加了 useJNIReader 的标识字段,用来指示 BE 侧执行选择 Native Reader 还是 JNI reader,这两个 Reader 的具体用途见下文 BE 端改造部分。
6. 元数据请求优化:
通过批量以及异步的方式访问 Hive Metastore 获取 Hudi 表分区统计信息,在 FE 对其进行缓存并计算表级别统计信息用于查询优化,同时缓存 Scan 节点所要扫描的文件元数据信息来减少 Namenode 的压力并提升查询速度。用户可通过查询来触发元数据的异步加载,使得用户无需手动刷新元数据即可访问最新数据文件。
FE 和 BE 传输改造:
由于 FE 和 BE 使用 Thrift 协议传输信息,分别按照表元数据和 Scan Range 的改动,相对应添加了 Thrift 字段,确保 BE 端可以正确拿到执行计算所需要的信息。
BE 端改造:
StarRocks BE 端本身自己实现了高效的 Native Reader,用来读取不同的数据格式,如 ORC/Parquet 等。Native Reader 做了很多 IO 优化的实现,如:
- BE 端 Hudi Reader 设计方案评估过程
在实现 Hudi MOR 的支持过程中,在设计阶段我们考虑了两种可行方案:
1.使用 C++ 在 BE 全新实现一套 Hudi Reader,用来读取 Avro 格式的 Delta logs 文件和 Parquet 格式的 Base 文件,然后参考 Hudi 社区 Java 版本的 merge 逻辑完成合并,最终输出结果数据。这种方案可以带来 native 执行速度快的优势,但缺点也很明显,自行维护成本太高,且不方便及时更新社区的进展。
2. 在 BE 端使用 JNI 调用 Hudi 社区的 Java SDK,直接使用社区 SDK 读取 File Slice 的结果数据,然后传给 BE 端使用。与第一种方案相比,优缺点正好相反,但代码维护工作量会大大减少。同时,我们考虑到 Java 在大数据生态的优势地位,想统一抽象一个通用的 JNI Reader,让所有基于 Java 实现的数据源 SDK,都可以通过 JNI Reader 方便地接入到 StarRocks 里来。
因此,我们最终选择了第二套基于 JNI 方案,并把实现目标从原来的仅支持 Hudi MOR 数据格式扩展到实现通用的 JNI Connector。
- JNI Connector 设计介绍
在实现过程中,我们对 JNI Connector 做了大量的优化,同时借鉴了 Spark Photon 的内存设计和实现思路,让 C++ 和 Java 使用同一块 Native Memory 共享数据,Java 端使用 JVM 的 Native 操作类 Unsafe 直接将 Hudi Java SDK 的结果数据写入 Native Memory 里,C++ 便可以直接使用这块内存进行数据计算,从而减少数据多次内存拷贝的开销。实际上,类似这样的跨语言共享内存的编程模式在阿里云 EMR 技术产品里实践落地非常广泛,如基于开源 Apache Spark 做了深度优化的 EMR Spark,对 OSS 透明加速的 Jindo 等都有类似的设计和思想。接下来,我们将展开讲讲这块的具体设计思路。
数据列存储设计
在 BE 端,所有数据列是存储在 Column 的数据结构里,不同类型的数据列对应不同的 Column 数据结构。例如:
这些对应关系可以参考 t ype_traints.h 源文件 。
(https://github.com/StarRocks/starrocks/blob/main/be/src/column/type_traits.h)
实现 JNI Connector 工程上比较复杂的地方是,需要根据不同类型的数据类型安排对应的内存布局实现,且要尽量做到与 BE 端对应数据类型的内存布局相同,进而尽量减少 BE 端读取内存数据到 Column 时转化的开销。
对于 INT、LONG、DOUBLE 等定长类型的数据列,对应的 Column 数据结构是FixedLengthColumn,其底层存储使用了 vector,即:将数据列存储在一段连续的内存,对于这种类型,我们只需将 Java SDK 读出来的数据列按顺序依次放在 Native Memory 里即可。
对于 VARCHAR 这类变长类型的数据列,对应的 Column 数据结构是 BinaryColumnBase,以 BinaryColumn 为例,以其底层存储使用了 vector 和 vector,vector 即连续的字节流用来存储数据(Bytes),vector 即连续的 int 序列用来存储行索引(Offsets)。对于这种类型,我们需要将 Java SDK 读出来的数据转换成字节流放在 vector 对应的 Native Memory 里,将行号放在 vector 对应的 Native Memory 里。
vector 和 vector 读取变长数据的方法如下图所示:
例如,获取数据列的第x行,通过 Offsets 获取该行的起始索引 start=offsets(x) 和下一行的起始索引 end=offsets(x+1),然后使用这两个索引通过 Bytes 获取具体数据对应的字节流 bytes.slice(start,end),最后按照字段类型做相应的转换即可。
注:为方便表述,上面例子做了一定的简化,对于 Nullable 数据列,实际上还有FixedLengthColumn 的数据结构,对应一段连续的 Bool 数据,用来表示对应行号的列数据取值是否为 Null,用来加速 Nullable 列的计算效率,减少数据列的存储空间。
内存分配和管理设计
由于 BE 端是通过 Memory Tracker 进行内存管理的,我们在实现 JNI Reader 时,由 Memory Tracker 统一进行内存的分配和销毁,避免直接使用 JVM Unsafe 分配 Native Memory,来保证内存统计的准确性,并防止出现错误的内存使用导致的各类问题。
编程框架设计
在编程框架上,我们完整定义了 JNI Connector 的 Java 接口,让开发者不需要进行复杂的 JNI 编程以及相关的内存管理,只需要继承 ConnectorScanner 抽象类,实现 open(), getNext(), close() 这三个抽象方法,然后在 BE 侧给出具体实现类的名称,便可以完整使用我们的 JNI Connector, 读取各类 Java 数据源的数据。
混合使用 Native Reader 和 JNI Reader 设计
在 Hudi Reader 的实现里,我们有一个优化方案。上文提到,我们在 Scan range 里添加了 useJNIReader 的字段。这个字段具体取值在 FE 端通过下面逻辑控制:
判断当前表的数据类型:如果是 MOR 表,查询类型为 Snapshot,且该 File Slice 包含一个或一个以上的 Delta log,useJNIReader 便置为 True,其他情况都为 False。
这样带来的效果是,对于同一个 MOR 表的 Snapshot 读取,BE 端实际上会同时混合使用两种不同的 Reader 去拿数据,使用 Native reader 读取不包含 Delta Logs 的 File Slice,使用 JNI Reader 读取包含 Delta Logs 的 File Slice,不同的 Reader 混合使用可以进一步提升读取效率,且这些加速对于用户都是透明无感知的。
6、使用案例
1. 创建 hudi catalog
CREATE EXTERNAL CATALOG "hudi_catalog"
PROPERTIES (
"type" = "hudi",
"hive.metastore.uris"= "thrift://xxx:9083" -- hive metastore地址
);
2. 执行查询
select * from hudi_catalog..;
+------+------+---------------------+------------------------+--------------------+-----------------------+------------------------------------------------------------------------+
| id | age | _hoodie_commit_time | _hoodie_partition_path | _hoodie_record_key | _hoodie_commit_seqno | _hoodie_file_name |
+------+------+---------------------+------------------------+--------------------+-----------------------+------------------------------------------------------------------------+
| 3 | 33 | 20220422111823231 | age=33 | id:3 | 20220422111823231_0_3 | 29d8d367-93f9-4bd3-aae4-47852e443e36-0_0-128-114_20220422111823231.orc |
+------+------+---------------------+------------------------+--------------------+-----------------------+------------------------------------------------------------------------+
7、性能测试
测试环境:
阿里云 EMR Presto 集群,阿里云 EMR StarRocks 集群
硬件配置:
Master: ecs.g7.4xlarge 16 vCPU 64 GiB
Worker: ecs.g7.4xlarge 16 vCPU 64 GiB * 5
软件配置:
StarRocks 版本:master 分支(Hudi MOR 读取特性会在2.5.0正式发布)
StarRocks 软件配置:默认配置
Presto 版本:0.277
Presto 软件配置:
query.max-memory-per-node=40GB
query.max-memory=200GB
COW 表 Snapshot 查询 TPCH-100 测试结果
对于 COW 表 Snapshot 查询,使用 StarRocks 相对 Presto 大约会带来 5 倍 的性能提升。
MOR 表 Snapshot 查询 TPCH-100 测试结果
对于 MOR 表 Snapshot 查询,如上文描述,混合使用了 Native Reader 和 JNI Reader,因此,我们在 StarRocks 上测试读取不同比例更新数据(带有 Delta Logs 的 File Slice)的执行时间,来得到不同更新比例场景下的查询效率数据。从测试结果可以看出,更新数据比例越小,StarRocks 实际执行时使用 Native Reader 的比例也就越高,执行效率也越好。
根据社区的经验,最常见的库表更新场景里,在 Hudi 表做 Compaction 操作前,带有 Delta Logs 的 File Slice 占整个表的比例大约在 20% 左右,在这种条件下,使用 StarRocks 相对 Presto 大约会带来 2-3 倍 的性能提升。
对于 MOR 表 Read Optimized 查询,StarRocks 内部执行原理和流程与 COW 表相同,性能提升数据也一致。
#03
未来开发方向
—
当前 Hudi Scan Range 没有对 Base File 的大小进行 File Split 拆分,是因为考虑了上文所述可能带来的 IO 损失和 Merge 逻辑问题,但实际上,COW 表和 Read Optimized 查询 MOR 表还是依旧可以采用 File Split 逻辑的,针对这些场景还是可以进一步提高 Scan 并发度,提升执行效率。
当前 JNI Connector 还不支持复杂的数据类型如 Array、Struct、Map,接下来需要针对这些类型设计对应的 Native Memory 布局,完成这些类型的支持。
当前 JNI Connector 在 Decimal、Date、Datetime 这三种数据类型的处理上,Java 端是写入原始 String 到内存,然后在 BE 端读取并转换成 StarRocks 内部的对应类型表示,这些内存转换过程会有一定的时间损耗,后续需要进行针对性的优化,尽可能消除这个转换过程。
当前 Hudi 表的部分基础元信息,如 Table location,是通过 Hive Metastore 等外部服务获取的。但在某些应用场景里,用户可能不会将 Hudi 表的元数据同步到 Hive Metastore 里,后续需要将这类 Hudi 表支持起来,在元信息获取流程上解耦外部服务,通过 Hudi Client SDK 完成相关操作。
进一步与 Apache Hudi 社区交流和合作,推动开发 C++ 版本的 Hudi SDK。
支持对 Hudi 表数据的 Incremental Query 查询类型 。
未来,阿里云 EMR OLAP 团队与 StarRocks 社区会继续紧密合作,推出功能更加完善、简单易用、极速统一 的 OLAP 数据湖分析技术和产品。
参考资料:
https://hudi.apache.org/
https://help.aliyun.com/document_detail/405463.html?spm=a2c4g.11186623.0.0.36917cc3wBuyu6
关于 StarRocks
面世两年多来,StarRocks 一直专注打造世界顶级的新一代极速全场景 MPP 数据库,帮助企业建立“极速统一”的数据分析新范式,助力企业全面数字化经营。
当前已经帮助腾讯、携程、顺丰、Airbnb 、滴滴、京东、众安保险等超过 170 家大型用户构建了全新的数据分析能力,生产环境中稳定运行的 StarRocks 服务器数目达数千台。
2021 年 9 月,StarRocks 源代码开放,在 GitHub 上的星数已超过 3500 个。StarRocks 的全球社区飞速成长,至今已有超百位贡献者,社群用户突破 7000 人,吸引几十家国内外行业头部企业参与共建。
你可能感兴趣的:(apache,hive,大数据)
知识积累----空转转录因子TF活性的计算框架
追风少年ii
空间 数据分析 hotspot 傅里叶变换 机器学习
作者,EvilGenius关于我们外显子的分析课程,我们来一次预报名吧,课表如下第一节:外显子分析基础知识与框架(包括基础文件的格式等)第二节:fastq数据处理到callSNV+基础认知(简单判断谱系突变和体系突变、以及GT:AD:AF:DP等基础信息)第三节(可能需要拆分成2节课):各大数据库如何注释突变信息(clinvar、cosmic、gnomad、HGMD、hotspot、oncoKB、
大数据项目-Django基于大数据技术实现的农产品销售系统
IT实战课堂-玲琳娜
计算机毕业设计 大数据 java spark 爬虫
《[含文档+PPT+源码等]Django基于大数据技术实现的农产品销售系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyog后台管理系统涉及技术:后台使用框架:Django前端使用技术:Vue,HTML5,CSS3、JavaScrip
ORACLE 正确删除归档日志的方法
俗尘某某
程序员记录 oracle 归档日志
ORACLE正确删除归档日志的方法我们都知道在controlfile中记录着每一个archivelog文件的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的controlfile中仍然记录着这些archivelog文件的相关信息,在oracle的OEM管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就
Java web开发常见中间件多版本下载备用
却诚Salong
安装问题和解决方法 java 中间件 开发语言
备注:每次换电脑都要重新构建一下环境,下载找资源很麻烦,官网英文网页找个历史版本看不懂,还要慢慢去搜,所以直接整理一波,需要的自行收藏。1.nodejs自选版本下载:地址:https://nodejs.org/download/release/网速快,自选任何版本下载。2.maven自选版本下载:地址:https://archive.apache.org/dist/maven/maven-3/网速
JVM调优实战 Day 14 :大数据处理中的JVM调优
在未来等你
JVM调优实战 JVM Java 性能优化 调优 虚拟机
【JVM调优实战Day14】大数据处理中的JVM调优文章标签jvm调优,大数据处理,Java性能优化,JVM参数配置,JVMGC调优,Java开发,大数据架构,Jvm实战文章简述在大数据处理场景中,Java应用通常面临内存占用高、GC频率频繁、堆内存不足等挑战。本文作为“JVM调优实战”系列的第14天,深入探讨了大数据处理中的JVM调优策略。文章从概念解析、技术原理、常见问题、诊断方法、调优策略到
鸿蒙开发必备技能:六种数据存储方式全解析+实战代码
harmonyos
摘要在当前多设备互联的时代,移动端应用不再局限于单一设备,而是需要在多个终端上保持状态一致、数据同步与持久管理。鸿蒙系统提供了多种数据存储机制,从轻量级状态存储到复杂的数据持久化方案,满足不同场景下的需求。本文将结合实战案例,深入讲解鸿蒙系统中的六大数据存储方式,并配有可运行的代码,帮助开发者快速掌握数据管理方法。引言随着鸿蒙系统的不断发展,越来越多的开发者开始构建面向多设备、多用户、多场景的智能
GUI框架:谈谈框架
baozi3026
框架 command mfc button class string
转帖请注明出处http://www.cppblog.com/cexer/archive/2009/11/15/100988.html1开篇废话我喜欢用C++写GUI框架,因为那种成就感是实实在在地能看到的。从毕业到现在写了好多个了,都是实验性质的。什么拳脚飞刀毒暗器,激光核能反物质,不论是旁门左道的阴暗伎俩,还是名门正派的高明手段,只要是C++里有的技术都试过了。这当中接触过很多底层或是高级的技术
IT 行业深度洞察:从技术革命到产业重构的全景图谱
XQR.小白
重构
摘要本文系统梳理IT行业的发展脉络,深入剖析云计算、人工智能、大数据、物联网等核心技术的演进逻辑与协同效应,揭示IT产业在数字化转型浪潮中的生态重构与价值创造。通过典型案例分析与数据支撑,探讨行业面临的技术挑战、伦理困境与全球化竞争格局,展望IT技术如何持续驱动社会变革与产业升级。全文结合2025年最新技术动态与市场趋势,为从业者、投资者与研究者提供兼具理论深度与实践指导的行业参考。目录摘要一、I
Python 爬虫实战:12306 订单记录爬取(登录态保持 + 订单数据可视化)
西攻城狮北
python 爬虫 信息可视化
引言在大数据驱动的今天,12306作为国内最重要的铁路出行平台,积累了海量的出行数据。对于广大用户而言,能够方便地查看和分析自己的出行订单记录,不仅有助于行程管理,还能为未来的出行规划提供有力参考。本文将详细讲解如何利用Python爬虫技术实现12306的模拟登录,爬取个人订单记录,并通过数据可视化技术直观展示出行情况。一、环境搭建与准备工作(一)Python环境配置确保本地已安装Python3.
大数据集群架构hadoop集群、Hbase集群、zookeeper、kafka、spark、flink、doris、dataeas(二)
争取不加班!
hadoop hbase zookeeper 大数据 运维
zookeeper单节点部署wget-chttps://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz下载地址tarxfapache-zookeeper-3.8.4-bin.tar.gz-C/data/&&mv/data/apache-zookeeper-3.8.4-bin//data/zoo
从开源小白到 Apache Member,我的成长之路
开源小秘书
云栖社区 Apache 高并发
我们走过的每一步路,都会留下印记,越坚实,越清晰。近日,Apache软件基金会(ASF)官方Blog宣布全球新增40位ApacheMember,张乎兴有幸成为其中一位。目前,全球共有771位ASFMember,中国仅13位。本文将分享作者从0基础的开源小白,一路走来的感触,希望把期间的经历分享出来,让更多的人看到,世界开源舞台的中国力量。只要有持续的付出,总会有所收获。初次参与开源2014年,我加
提名 Apache ShardingSphere Committer,说说方法
优质资源分享学习路线指引(点击解锁)知识定位人群定位Python实战微信订餐小程序进阶级本课程是pythonflask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info就在前几天,收到了ApacheS
Apache Seata < 2.3.0 raft反序列化漏洞
墨菲安全
Apache Seata 反序列化漏洞 CVE-2025-32897
【高危】ApacheSeata<2.3.0raft反序列化漏洞漏洞描述ApacheSeata(incubating)是一款开源的分布式事务解决方案,用于在微服务架构下提供高性能和简单易用的分布式事务服务。受影响版本中,SeataServer的Raft模块的CustomDeserializer直接通过Class.forName()加载用户可控的类名,未做安全校验,攻击者可借此利用服务端已有的恶意链实
从性能优化赛到社区Committer,走进赵宇捷在Apache Fory的成长之路
ApacheFory是一个基于JIT和零拷贝的高性能多语言序列化框架,实现了高效紧凑的序列化协议,提供极致的性能、压缩率和易用性。在多语言序列化框架技术领域取得了重大突破,推动序列化技术步入高性能易用新篇章!这一切,都源自全球开发者对开源的热忱。今天,一起走近这些用代码编织跨语言数据之网的Committer~一、自我介绍您的全名:赵宇捷当前职位/角色:后端开发工程师主要领域/方向:金融加入社区/项
喜讯!Apache SeaTunnel 荣获上海开源创新菁英荟优秀开源项目奖
数据库
近日,在2025上海开源创新菁英荟上,ApacheSeaTunnel凭借信创生态适配与智能化技术突破,荣获「优秀开源项目奖」。这个由中国团队孵化的开源项目,已成为全球数据集成领域的标杆。信创生态:支持20+国产数据库的无缝对接SeaTunnel深度适配华为OpenGauss、阿里OceanBase等20+主流国产数据库,支持CDC(变更数据捕获)与高性能加载。在证券行业信创转型中,SeaTunne
Redis 集群与分布式实现:从原理到实战
一切皆有迹可循
redis redis 分布式 数据库 后端 缓存
前言在大数据与高并发场景下,单节点Redis的容量与可用性已无法满足需求。Redis通过集群与分布式技术,实现了数据的分片存储与高可用部署,成为分布式系统的核心组件。本文将深入解析Redis集群的底层原理、架构模式与实战经验,结合代码示例与最佳实践,帮助开发者构建高性能、高可用的分布式缓存系统。一、集群基础架构与核心原理1.数据分片机制Redis集群采用哈希槽(HashSlot)实现数据分片,共有
大数据未来发展的趋势与挑战
倒霉男孩
大数据
随着信息技术的飞速发展,大数据已经成为推动社会进步和产业变革的重要力量。从商业决策到医疗健康,从智慧城市到人工智能,大数据技术的应用无处不在。未来,随着5G、物联网(IoT)、人工智能(AI)等技术的深度融合,大数据的发展将迎来更广阔的空间,同时也面临诸多挑战。本文将探讨大数据未来的发展趋势、应用前景以及可能面临的问题。一、大数据未来的发展趋势数据量持续爆发式增长随着5G网络的普及和物联网设备的广
从0到1构建智能招聘数据引擎:基于 Python 的 BOSS直聘信息采集实战与反爬破解指南
程序员威哥
python 开发语言
前言在大数据浪潮席卷的时代,招聘平台蕴藏着海量的岗位信息,揭示着行业走向、人才趋势、薪资结构等核心价值。BOSS直聘作为国内极具代表性的直招平台,其数据对职业分析、市场监测甚至智能推荐系统的构建都有着重要意义。本文将手把手带你打造一个高质量、抗封锁的Python爬虫系统,精准采集BOSS直聘网的岗位数据,并全面解析其中涉及的反爬机制识别、加密参数处理、数据提取与存储等高级技巧,助你在Web数据采集
大数据量下高并发同步的解决方案
大师兄啊
sql 大数据量下高并发同步的解决方案
大数据量下高并发同步的讲解(不看,保证你后悔)对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研究一下常见的并发和同步吧。为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步和异步1、同步和异步的区别和联系所谓同步,可以理解为在执行完一个函数或
DolphinScheduler 6 个高频 SQL 操作技巧
数据库
摘要:ApacheDolphinScheduler系列4-后台SQL经验分享关键词:大数据、数据质量、数据调度整体说明在调研了DolphinScheduler之后,在项目上实际使用了一段时间,有了一些后台SQL实际经验,分享如下。进入DolphinScheduler后台数据库,我这里使用的是MySQL数据库。以任务名称包含“ods_xf_act”的任务为例。一、修改任务组操作UPDATEt_ds_
Apache HTTP Server部署全攻略
Sally璐璐
运维 apache http 网络协议 运维
httpd简介httpd(ApacheHTTPServer)是一款历史悠久的开源Web服务器软件,由Apache软件基金会开发和维护。自1995年首次发布以来,Apache一直是Web服务器领域的领导者,以其稳定性、安全性和灵活性著称。根据W3Techs的最新统计,httpd支持着全球超过40%的网站运行,特别是在企业级应用中占据重要地位。httpd的主要特点包括:模块化架构:通过动态加载模块扩展
微信小程序|流浪动物救助小程序的设计与实现
qq_469603589
微信小程序 小程序 微信小程序
作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助收藏点赞不迷路关注作者有好处文末获取源码项目编号:L-BS-XZBS-30一,环境介绍语言环境:Java:jdk1
Hadoop、Spark、Flink 三大大数据处理框架的能力与应用场景
一、技术能力与应用场景对比产品能力特点应用场景Hadoop-基于MapReduce的批处理框架-HDFS分布式存储-容错性强、适合离线分析-作业调度使用YARN-日志离线分析-数据仓库存储-T+1报表分析-海量数据处理Spark-基于内存计算,速度快-支持批处理、流处理(StructuredStreaming)-支持SQL、ML、图计算等-支持多语言(Scala、Java、Python)-近实时处
基于uniapp微信小程+SpringBoot+Vue的流浪动物救助领养系统设计和实现(源码+论文+部署讲解等)
博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等
IDEA相关配置记录
栖霖涧
intellij-idea java ide
IDEA相关配置记录参考链接:参考链接:1、安装jdkD:\ProgramFiles\Java\jdk-21https://blog.csdn.net/2302_81410974/article/details/1420314162、安装mavenD:\Java\workspace-maven\apache-maven-3.9.10.├──LICENSE├──NOTICE├──README.txt
Vue3 中 Excel 导出的性能优化与实战指南
文章目录Vue3中Excel导出的性能优化与实战指南引言:为什么你的导出功能会卡死浏览器?一、前端导出方案深度剖析1.1xlsx(SheetJS)-轻量级冠军1.2exceljs-功能强大的重量级选手二、后端导出方案:大数据处理的救星2.1为什么大数据需要后端处理?2.2Node.js流式导出实战三、生产环境性能优化全攻略3.1内存优化技巧对比3.2用户体验优化方案四、决策流程图:帮你选择最佳方案
Java 访问HTTP,信任所有证书,解决SSL报错问题
qq_492448446
java http ssl
packagecom.welab.automation.framework.utils.api;importcom.welab.automation.framework.GlobalVar;importcom.welab.automation.framework.utils.entity.api.SignatureUtil;importorg.apache.http.HttpEntity;impo
Tomcat 源码解析:深入理解 Tomcat 运行机制
深山懒羊羊
tomcat java
Tomcat是Apache软件基金会的一个开源的Servlet容器和Web服务器,是JavaWeb开发中最常用的应用服务器之一。它实现了Servlet和JSP规范,广泛用于开发和部署JavaEEWeb应用程序。了解Tomcat的源码,能够帮助我们深入理解Web服务器的工作原理,以及如何优化和定制我们的JavaWeb环境。本文将对Tomcat的核心架构进行解析,重点关注Tomcat的启动过程、请求处
深入理解Tomcat 基本架构
无心水
编程路上 tomcat 架构 java 深入理解Tomcat Servlet容器 I/O模型 NIO2
TheApacheTomcat®softwareisanopensourceimplementationoftheJavaServlet,JavaServerPages,JavaExpressionLanguageandJavaWebSockettechnologies.TheJavaServlet,JavaServerPages,JavaExpressionLanguageandJavaWebS
2024年Python最新统信UOS_麒麟KYLINOS上安装特定版本python_统信uos安装python
2401_84558914
程序员 python linux 服务器
准备解压…/16-libidn2-dev_2.0.5.1-1+dde_amd64.deb…正在解压libidn2-dev:amd64(2.0.5.1-1+dde)…/var/cache/apt/archives/libidn2-dev_2.0.5.1-1+dde_amd64.deb正在选中未选择的软件包libp11-kit-dev:amd64。准备解压…/17-libp11-kit-dev_0.2
iOS http封装
374016526
ios 服务器交互 http 网络请求
程序开发避免不了与服务器的交互,这里打包了一个自己写的http交互库。希望可以帮到大家。
内置一个basehttp,当我们创建自己的service可以继承实现。
KuroAppBaseHttp *baseHttp = [[KuroAppBaseHttp alloc] init];
[baseHttp setDelegate:self];
[baseHttp
lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具
brotherlamp
linux linux教程 linux视频 linux自学 linux资料
那些相信 Linux 命令行是单调无聊且没有任何乐趣的人们,你们错了,这里有一些有关 Linux 的文章,它们展示着 Linux 是如何的有趣和“淘气” 。
在本文中,我将讨论一个名为“lolcat”的小工具 – 它可以在终端中生成彩虹般的颜色。
何为 lolcat ?
Lolcat 是一个针对 Linux,BSD 和 OSX 平台的工具,它类似于 cat 命令,并为 cat
MongoDB索引管理(1)——[九]
eksliang
mongodb MongoDB管理索引
转载请出自出处:http://eksliang.iteye.com/blog/2178427 一、概述
数据库的索引与书籍的索引类似,有了索引就不需要翻转整本书。数据库的索引跟这个原理一样,首先在索引中找,在索引中找到条目以后,就可以直接跳转到目标文档的位置,从而使查询速度提高几个数据量级。
不使用索引的查询称
Informatica参数及变量
18289753290
Informatica 参数 变量
下面是本人通俗的理解,如有不对之处,希望指正 info参数的设置:在info中用到的参数都在server的专门的配置文件中(最好以parma)结尾 下面的GLOBAl就是全局的,$开头的是系统级变量,$$开头的变量是自定义变量。如果是在session中或者mapping中用到的变量就是局部变量,那就把global换成对应的session或者mapping名字。
[GLOBAL] $Par
python 解析unicode字符串为utf8编码字符串
酷的飞上天空
unicode
php返回的json字符串如果包含中文,则会被转换成\uxx格式的unicode编码字符串返回。
在浏览器中能正常识别这种编码,但是后台程序却不能识别,直接输出显示的是\uxx的字符,并未进行转码。
转换方式如下
>>> import json
>>> q = '{"text":"\u4
Hibernate的总结
永夜-极光
Hibernate
1.hibernate的作用,简化对数据库的编码,使开发人员不必再与复杂的sql语句打交道
做项目大部分都需要用JAVA来链接数据库,比如你要做一个会员注册的 页面,那么 获取到用户填写的 基本信后,你要把这些基本信息存入数据库对应的表中,不用hibernate还有mybatis之类的框架,都不用的话就得用JDBC,也就是JAVA自己的,用这个东西你要写很多的代码,比如保存注册信
SyntaxError: Non-UTF-8 code starting with '\xc4'
随便小屋
python
刚开始看一下Python语言,传说听强大的,但我感觉还是没Java强吧!
写Hello World的时候就遇到一个问题,在Eclipse中写的,代码如下
'''
Created on 2014年10月27日
@author: Logic
'''
print("Hello World!");
运行结果
SyntaxError: Non-UTF-8
学会敬酒礼仪 不做酒席菜鸟
aijuans
菜鸟
俗话说,酒是越喝越厚,但在酒桌上也有很多学问讲究,以下总结了一些酒桌上的你不得不注意的小细节。
细节一:领导相互喝完才轮到自己敬酒。敬酒一定要站起来,双手举杯。
细节二:可以多人敬一人,决不可一人敬多人,除非你是领导。
细节三:自己敬别人,如果不碰杯,自己喝多少可视乎情况而定,比如对方酒量,对方喝酒态度,切不可比对方喝得少,要知道是自己敬人。
细节四:自己敬别人,如果碰杯,一
《创新者的基因》读书笔记
aoyouzi
读书笔记 《创新者的基因》
创新者的基因
创新者的“基因”,即最具创意的企业家具备的五种“发现技能”:联想,观察,实验,发问,建立人脉。
第一部分破坏性创新,从你开始
第一章破坏性创新者的基因
如何获得启示:
发现以下的因素起到了催化剂的作用:(1) -个挑战现状的问题;(2)对某项技术、某个公司或顾客的观察;(3) -次尝试新鲜事物的经验或实验;(4)与某人进行了一次交谈,为他点醒
表单验证技术
百合不是茶
JavaScript DOM对象 String对象 事件
js最主要的功能就是验证表单,下面是我对表单验证的一些理解,贴出来与大家交流交流 ,数显我们要知道表单验证需要的技术点, String对象,事件,函数
一:String对象;通常是对字符串的操作;
1,String的属性;
字符串.length;表示该字符串的长度;
var str= "java"
web.xml配置详解之context-param
bijian1013
java servlet web.xml context-param
一.格式定义:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>contextConfigLocationValue></param-value>
</context-param>
作用:该元
Web系统常见编码漏洞(开发工程师知晓)
Bill_chen
sql PHP Web fckeditor 脚本
1.头号大敌:SQL Injection
原因:程序中对用户输入检查不严格,用户可以提交一段数据库查询代码,根据程序返回的结果,
获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
本质:
对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。
示例:
String query = "SELECT id FROM users
【MongoDB学习笔记六】MongoDB修改器
bit1129
mongodb
本文首先介绍下MongoDB的基本的增删改查操作,然后,详细介绍MongoDB提供的修改器,以完成各种各样的文档更新操作 MongoDB的主要操作
show dbs 显示当前用户能看到哪些数据库
use foobar 将数据库切换到foobar
show collections 显示当前数据库有哪些集合
db.people.update,update不带参数,可
提高职业素养,做好人生规划
白糖_
人生
培训讲师是成都著名的企业培训讲师,他在讲课中提出的一些观点很新颖,在此我收录了一些分享一下。注:讲师的观点不代表本人的观点,这些东西大家自己揣摩。
1、什么是职业规划:职业规划并不完全代表你到什么阶段要当什么官要拿多少钱,这些都只是梦想。职业规划是清楚的认识自己现在缺什么,这个阶段该学习什么,下个阶段缺什么,又应该怎么去规划学习,这样才算是规划。
国外的网站你都到哪边看?
bozch
技术 网站 国外
学习软件开发技术,如果没有什么英文基础,最好还是看国内的一些技术网站,例如:开源OSchina,csdn,iteye,51cto等等。
个人感觉如果英语基础能力不错的话,可以浏览国外的网站来进行软件技术基础的学习,例如java开发中常用的到的网站有apache.org 里面有apache的很多Projects,springframework.org是spring相关的项目网站,还有几个感觉不错的
编程之美-光影切割问题
bylijinnan
编程之美
package a;
public class DisorderCount {
/**《编程之美》“光影切割问题”
* 主要是两个问题:
* 1.数学公式(设定没有三条以上的直线交于同一点):
* 两条直线最多一个交点,将平面分成了4个区域;
* 三条直线最多三个交点,将平面分成了7个区域;
* 可以推出:N条直线 M个交点,区域数为N+M+1。
关于Web跨站执行脚本概念
chenbowen00
Web 安全 跨站执行脚本
跨站脚本攻击(XSS)是web应用程序中最危险和最常见的安全漏洞之一。安全研究人员发现这个漏洞在最受欢迎的网站,包括谷歌、Facebook、亚马逊、PayPal,和许多其他网站。如果你看看bug赏金计划,大多数报告的问题属于 XSS。为了防止跨站脚本攻击,浏览器也有自己的过滤器,但安全研究人员总是想方设法绕过这些过滤器。这个漏洞是通常用于执行cookie窃取、恶意软件传播,会话劫持,恶意重定向。在
[开源项目与投资]投资开源项目之前需要统计该项目已有的用户数
comsci
开源项目
现在国内和国外,特别是美国那边,突然出现很多开源项目,但是这些项目的用户有多少,有多少忠诚的粉丝,对于投资者来讲,完全是一个未知数,那么要投资开源项目,我们投资者必须准确无误的知道该项目的全部情况,包括项目发起人的情况,项目的维持时间..项目的技术水平,项目的参与者的势力,项目投入产出的效益.....
oracle alert log file(告警日志文件)
daizj
oracle 告警日志文件 alert log file
The alert log is a chronological log of messages and errors, and includes the following items:
All internal errors (ORA-00600), block corruption errors (ORA-01578), and deadlock errors (ORA-00060)
关于 CAS SSO 文章声明
denger
SSO
由于几年前写了几篇 CAS 系列的文章,之后陆续有人参照文章去实现,可都遇到了各种问题,同时经常或多或少的收到不少人的求助。现在这时特此说明几点:
1. 那些文章发表于好几年前了,CAS 已经更新几个很多版本了,由于近年已经没有做该领域方面的事情,所有文章也没有持续更新。
2. 文章只是提供思路,尽管 CAS 版本已经发生变化,但原理和流程仍然一致。最重要的是明白原理,然后
初二上学期难记单词
dcj3sjt126com
english word
lesson 课
traffic 交通
matter 要紧;事物
happy 快乐的,幸福的
second 第二的
idea 主意;想法;意见
mean 意味着
important 重要的,重大的
never 从来,决不
afraid 害怕 的
fifth 第五的
hometown 故乡,家乡
discuss 讨论;议论
east 东方的
agree 同意;赞成
bo
uicollectionview 纯代码布局, 添加头部视图
dcj3sjt126com
Collection
#import <UIKit/UIKit.h>
@interface myHeadView : UICollectionReusableView
{
UILabel *TitleLable;
}
-(void)setTextTitle;
@end
#import "myHeadView.h"
@implementation m
N 位随机数字串的 JAVA 生成实现
FX夜归人
java Math 随机数 Random
/**
* 功能描述 随机数工具类<br />
* @author FengXueYeGuiRen
* 创建时间 2014-7-25<br />
*/
public class RandomUtil {
// 随机数生成器
private static java.util.Random random = new java.util.R
Ehcache(09)——缓存Web页面
234390216
ehcache 页面缓存
页面缓存
目录
1 SimplePageCachingFilter
1.1 calculateKey
1.2 可配置的初始化参数
1.2.1 cach
spring中少用的注解@primary解析
jackyrong
primary
这次看下spring中少见的注解@primary注解,例子
@Component
public class MetalSinger implements Singer{
@Override
public String sing(String lyrics) {
return "I am singing with DIO voice
Java几款性能分析工具的对比
lbwahoo
java
Java几款性能分析工具的对比
摘自:http://my.oschina.net/liux/blog/51800
在给客户的应用程序维护的过程中,我注意到在高负载下的一些性能问题。理论上,增加对应用程序的负载会使性能等比率的下降。然而,我认为性能下降的比率远远高于负载的增加。我也发现,性能可以通过改变应用程序的逻辑来提升,甚至达到极限。为了更详细的了解这一点,我们需要做一些性能
JVM参数配置大全
nickys
jvm 应用服务器
JVM参数配置大全
/usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K -XX:PermSize=300M -XX:MaxPermSize=300M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=5 -
搭建 CentOS 6 服务器(14) - squid、Varnish
rensanning
varnish
(一)squid
安装
# yum install httpd-tools -y
# htpasswd -c -b /etc/squid/passwords squiduser 123456
# yum install squid -y
设置
# cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
# vi /etc/
Spring缓存注解@Cache使用
tom_seed
spring
参考资料
http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/
http://swiftlet.net/archives/774
缓存注解有以下三个:
@Cacheable @CacheEvict @CachePut
dom4j解析XML时出现"java.lang.noclassdeffounderror: org/jaxen/jaxenexception"错误
xp9802
java.lang.NoClassDefFoundError: org/jaxen/JaxenExc
关键字: java.lang.noclassdeffounderror: org/jaxen/jaxenexception
使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是个不错的方法,dom4j的快速手册里也建议使用这种方式
执行时却抛出以下异常:
Exceptio