_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,大数据)
MySQL实战教程:从小白到大神的进阶之路!
奔跑吧邓邓子
项目实战 mysql 数据库
目录一、MySQL概述1、MySQL简介1.1MySQL的历史背景1.2MySQL的特点1.3MySQL的应用场景1.4MySQL的版本2、MySQL发展历程2.1MySQL的起源2.2MySQL的早期发展2.3MySQL的成熟与普及2.4MySQL的商业化与收购2.5MySQL的持续创新3、MySQL应用场景3.1Web应用程序3.2企业级应用3.3大数据分析3.4移动应用3.5云计算3.6物联
【详细讲解】hive优化
songqq27
大数据 hive
1、开启本地模式大多数的HadoopJob是需要Hadoop提供的完整的可扩展性来处理大数据集的。不过,有时Hive的输入数据量是非常小的。在这种情况下,为查询触发执行任务消耗的时间可能会比实际job的执行时间要多的多。对于大多数这种情况,Hive可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间可以明显被缩短。用户可以通过设置hive.exec.mode.local.auto的值
大规模分布式存储(1)-- 概念、挑战和分类
叹了口丶气
HDFS全方位实战 分布式 分类 数据库
随着数据的激增,我们已经进入到了一个数据时代,无论是云计算,大数据还是互联网公司的各种应用,其后台存储平台的目标都是要构建低成本、高性能、可扩展、易用的分布式存储系统。相比传统的分布式存储系统,互联网公司的分布式存储系统具有两个特点:规模大和成本低。本文主要介绍一下什么是大规模分布式存储系统,以及分布式存储系统有哪些类别。一、分布式存储的概念1.1大规模分布式存储系统的定义大规模分布式存储系统的定
怎么创建一个能在线测试php的html5网页?
很酷的站长
编程记录 html5专题 php专题 php html5 开发语言
代码示例:一、搭建服务器环境首先,你需要在服务器上搭建PHP运行环境。如果你使用的是Linux服务器,可以使用Apache或Nginx作为Web服务器,并安装PHP解释器。对于Windows服务器,可以使用WAMP(Windows,Apache,MySQL,PHP)或XAMPP等集成环境。二、创建HTML表单页面创建一个HTML页面,包含一个表单,用户可以在表单中输入PHP代码,将该代码提交到服务
网页中间件安全加固
jasonwgz
中间件 安全 tomcat
一、APACHEWEB服务器软件,apache的程序名是httpd,服务的控制:systemctlstart/stop/statushttpdApache是一个静态网站程序,不能直接支持动态页面;若要支持动态页面,则需要整合其它程序,如要支持PHP动态页面:yuminstallphp-fpmphp-commonphp-develphp-mysqlndphp-mbstringphp-mcrypt安装
大数据分析案例-基于逻辑回归算法构建抑郁非抑郁推文识别模型
艾派森
大数据分析案例合集 机器学习 人工智能 python 数据挖掘 回归
♂️个人主页:@艾派森的个人主页✍作者简介:Python学习者希望大家多多支持,我们一起进步!如果文章对你有帮助的话,欢迎评论点赞收藏加关注+喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章大数据分析案例合集
Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException
王多鱼的梦想~
Kafka修炼手册 kafka apache 分布式 运维
文章目录Kafka常见问题之org.apache.kafka.common.errors.RecordTooLargeException:Themessageis1,048,576byteswhenserializedwhichislargerthanthemaximumrequestsize.1.错误解析2.错误原因3.错误复现案例3.1生产者发送超大消息4.解决方案4.1方法1:调整Kafka
Kafka常见问题之Kafka 报错:org.apache.kafka.common.errors.NotLeaderOrFollowerException
王多鱼的梦想~
Kafka修炼手册 kafka 分布式
Kafka常见问题之Kafka报错:org.apache.kafka.common.errors.NotLeaderOrFollowerException文章目录Kafka常见问题之Kafka报错:org.apache.kafka.common.errors.NotLeaderOrFollowerException0.NotLeaderOrFollowerException描述1.NotLeade
move移动语义详解
Say-hai
C++ c++ 面试
move移动语义移动语义是C++11引入的一种机制,用于提高程序的性能和资源管理效率,特别是在涉及大数据对象的场景下。移动语义通过转移资源所有权,而不是复制资源,减少了不必要的拷贝操作。一、为什么需要移动语义?当对象需要被复制时(如函数返回值或传参),通常会调用复制构造函数(copyconstructor)。复制操作往往意味着需要分配新资源并将原资源的数据拷贝到新资源中;而如果不需要保留原对象的内
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
漫无目的行走的月亮
java.lang.NoSuchMethodException:org.apache.catalina.deploy.WebXmladdServlet-------------------------------------------------------------------------------------------------------------------?解决此异常的方法是
大数据毕业设计hadoop+spark+hive豆瓣图书数据分析可视化大屏 豆瓣图书爬虫 图书推荐系统
qq_79856539
javaweb java 大数据 hadoop 课程设计
系统总体目标基于Spark的个性化书籍推荐系统是一种基于大数据技术的智能推荐系统,它可以根据用户的历史行为和偏好,为用户提供个性化的书籍推荐。该系统采用Spark技术,可以实现大数据的实时处理,从而提高推荐系统的准确性和可靠性。此外,该系统还可以根据用户的习惯和偏好,提供更加个性化的书籍推荐,从而满足用户的需求。系统的使用者包含普通用户和管理员两类,普通用户是系统的主要服务对象,主流人群是经常查看
ubuntu22.04 + isaac gym环境配置流程
Yakusha
linux bash c++
1.CUDA安装1.看系统架构:uname-m2.去官网下载适配你显卡驱动的最新cuda,可以通过nvidia-smi查看https://developer.nvidia.com/cuda-toolkit-archive3.然后执行,全选continue和yessudo./cuda_12.4.1_550.54.15_linux.run在bashrc中添加:exportPATH=/usr/local
Apache Tomcat JBOSS Jetty Nginx WebLogic WebSphere之间的区别区别_jetty和tomcat和weblogic
2401_89694162
apache tomcat jetty
文章目录总结:Apache/Tomcat/JBOSS/Nginx区别.一、Apache+Tomcat二、Jetty三、Nginx四、JBossWebLogic、WebSphere、JBOSS、Tomcat之间的区别1:产品介绍:2:价位不同:3:开源性不同:4:对技术的支持:5:扩展性的不同:6:应用范围的区别:7:商业服务和技术支持的区别:8:安全性问题9:与数据库的紧密结合性:服务:三、部署四
Apache Flink流处理框架
weixin_44594317
apache flink 大数据
ApacheFlink是一个分布式流处理框架和数据处理引擎,专注于以低延迟和高吞吐量处理无界和有界的数据流。它可以同时处理流式数据和批处理数据,并且提供强大的容错机制和状态管理功能。Flink常用于实时分析、复杂事件处理(CEP)、机器学习和批量数据处理等场景。1.Flink的核心概念在理解Flink的工作原理之前,先要了解它的一些核心概念:流处理(StreamProcessing):处理数据流中
企业数字化规划蓝图、企业数字化运营分析管理大数据平台建设方案
公众号:优享智库
数字化转型 数据治理 主数据 数据仓库 大数据
**企业数字化规划蓝图及运营分析管理大数据平台建设方案****一、企业数字化规划蓝图**1.**数字化目标设定**企业在规划数字化进程时,首先需要明确数字化目标。这些目标应当与企业的整体战略和发展规划相一致,包括但不限于提高运营效率、优化客户体验、创新业务模式等。同时,目标应具体、可衡量,以便于后续的实施和评估。2.**技术平台规划**技术平台是支撑企业数字化的基础。在规划阶段,需要确定所需的技术
使用Flink进行流式图处理
AI天才研究院
大数据AI人工智能 AI大模型企业级应用开发实战 计算 计算科学 神经计算 深度学习 神经网络 大数据 人工智能 大型语言模型 AI AGI LLM Java Python 架构设计 Agent RPA
使用Flink进行流式图处理1.背景介绍1.1大数据时代的到来随着互联网、物联网和移动互联网的快速发展,数据呈现出爆炸式增长。根据IDC的预测,到2025年,全球数据量将达到175ZB。传统的批处理系统已经无法满足对实时数据处理的需求。因此,流式计算应运而生,成为大数据处理的重要组成部分。1.2流式计算的概念流式计算是一种新兴的数据处理范式,它能够持续不断地处理来自各种数据源的数据流。与传统的批处
python与excel整合全教程
刘同学Python学习日记
python excel 开发语言
Python与Excel的整合非常强大,尤其适合处理大数据、自动化表格操作以及进行高级数据分析。以下是一个全教程,涵盖常用的Python库及其应用:1.准备工作安装必要的库:使用以下命令安装常用库:pipinstallopenpyxlpandasxlrdxlsxwriterpywin32openpyxl:用于操作Excel的.xlsx文件(推荐)。pandas:强大的数据分析工具,支持读取和写入E
Apache TVM:开源深度学习编译器栈的领跑者
计攀建Eliza
ApacheTVM:开源深度学习编译器栈的领跑者tvmOpendeeplearningcompilerstackforcpu,gpuandspecializedaccelerators项目地址:https://gitcode.com/gh_mirrors/tv/tvm项目介绍ApacheTVM是一个专为深度学习系统设计的编译器栈。它旨在弥合生产力导向的深度学习框架与性能和效率导向的硬件后端之间的差
Apache Airflow 全面解析
由数入道
人工智能 apache Airflow
1.Airflow的定义与核心定位ApacheAirflow是一个开源的工作流自动化与调度平台,由Airbnb于2014年创建,2016年进入Apache孵化器,2019年成为顶级项目。其核心设计理念是“WorkflowsasCode”,通过编程方式定义、调度和监控复杂的数据流水线(Pipeline),适用于ETL、机器学习模型训练、数据湖管理、报表生成等场景。2.核心概念与架构解析2.1核心组件
Apple M1 ARM MacBook 安装 Apache TVM
FF-Studio
arm开发 apache
一、前置准备AppleSiliconMacBook本文以AppleM1/M2为例,M3及后续版本同理。已安装HomebrewmacOS上的包管理器,可前往Homebrew官网查看安装指引。已安装Anaconda或Miniforge确保Conda是ARM版本(通过condainfo|grepplatform验证应为osx-arm64)。二、创建并激活Conda环境在终端创建环境(Python3.8为
【使用Apache Flink 实现滑动窗口流式计算】
我明天再来学Web渗透
后端技术总结 apache flink linq 开发语言
什么是Flink?ApacheFlink是一个用于分布式流式处理和批处理的开源实时计算引擎。它具备低延迟、高吞吐量和exactly-once语义的特点,适用于各种实时数据处理场景。Flink的核心概念作业(Job):Flink程序的执行单元。数据流(DataStream):表示连续的数据流,可以进行转换和计算。窗口(Window):用于对无限数据流进行有界的数据切片处理。状态(State):用于保
如何写一份合格的大数据简历(附简历模板)教程
itLeeyw573
老板必点的高分简历 sqlite oracle mysql sql zookeeper kafka big data
一、简历的重要性简历是求职者给招聘者的第一印象,一份合格的简历能够快速让招聘者了解你的基本信息、工作经历、技能特长等,从而决定是否给予你面试机会。它是开启理想工作大门的钥匙,所以一定要重视起来。【编辑/下载】:大数据开发简历范文二、简历结构基本信息:包含姓名、性别、联系方式(电话、邮箱)、求职意向。姓名要突出显示,联系方式务必准确无误,求职意向明确且具体,比如“Java开发工程师”,让招聘者一眼就
lucene 查询是如何把倒排索引、BKD树 、fdt 的数据合并起来的
学会了没
lucene 全文检索 搜索引擎
在ApacheLucene中,查询过程涉及多个步骤和数据结构,包括倒排索引、BKD树(用于数值范围查询和地理空间查询)以及.fdt文件(存储文档的字段值)。下面是一个详细的解释,描述了Lucene如何在查询过程中将这些数据结构的结果合并起来。1.倒排索引倒排索引是Lucene的核心数据结构,用于快速查找包含特定词项(term)的文档。它的结构类似于一个词典,每个词项映射到一个包含该词项的文档列表。
MongoDB 大俗大雅,上来问分片真三俗 -- 4 分什么分
Austindatabases
mongodb 数据库
开头还是介绍一下群,如果感兴趣PolarDB,MongoDB,MySQL,PostgreSQL,Redis,OceanBase,SqlServer等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系liuaustin3,(共2710人左右1+2+3+4+5+6+7+8+9)(123456群均已爆满,7群400+,开8群9群)这是MongoDB宣传周的第五篇,这周真漫长,
大数据技术在数据安全治理中的应用
罗思付之技术屋
综合技术探讨及方案专栏 大数据
摘要面对新形势下的数据安全治理挑战,顺应数据安全领域的技术发展趋势,针对大型国企在数据安全治理实际应用中突出的关键权限人员识别问题,提出了一种基于图算法的关键权限人员识别技术。该技术可以发现系统中潜在的权限影响因素,并可从多个角度衡量不同含义的权重影响力,识别结果可解释性强。针对数据安全治理中的用户与实体行为异常检测问题,提出一种基于生成对抗网络的用户与实体行为异常检测方法,实验结果表明,所提方法
基于Maven的Spring/SpringMVC/Mybatis/Mybatis-plus/Apache-Shiro基础环境配置
weixin_30685029
java json 测试
记录一下,以便不时之需。pom.xml122.534.2.5.RELEASE41.8.9563.4.071.3.089101.1.7110.1.4121.7.211314151.0.18165.1.381718191.2.22021224.122324252627javax.servlet28servlet-api29${servlet-api.version}30provided31323334
阿里巴巴大数据系统体系架构
大连赵哥
大数据 架构
数据应用层:这是最顶层,面向不同的用户群体提供服务,包括对内(公司内部使用)、对平台(平台用户)、对商家(商家使用)、对公众(普通消费者)。数据服务与基础工具层:这一层提供了一些基础服务和工具,例如:OneService:可能是一种服务或工具,用于统一数据服务。TDDL+MySQL:TDDL是淘宝分布式数据层的缩写,与MySQL结合使用,提供数据库服务。HBase:一个分布式列存储系统,适合于存储
【云原生网关】Higress 从部署到使用详解
小码农叔叔
网关与限流术 linux与容器实战 docker搭建Higress Higress搭建 docker部署Higress Higress使用详解 Higress使用 docker搭建higress
目录二、网关概述2.1什么是云原生网关2.2常见的云原生网关2.2.1Nginx2.2.2ApiSix2.2.3Kong2.2.4ApacheShenyu2.2.5Higress2.2.6Envoy三、higress介绍3.1什么是higress3.2Higress定位3.3Higress内核选择四、Higress搭建过程4.1higress常用部署模式4.2环境准备4.3docker部署higr
使用ScriptRunner对象做sql文件导入时遇到的问题
DamonREN
数据处理 数据库同步 Mysql 开发遇到的问题 ScriptRunner
业务场景:服务端是挂在公网上用来提供数据同步功能,考虑到有可能客户端由于某种情况是不允许连接外网的,所以服务端提供一个接口用来下载全量sql脚本(当然这些数据是某官网公布出来的数据,不考虑数据安全问题),然后客户端通过拷贝或内网传输在客户端进行手动上传,客户端代码进行执行sql脚本,将全量数据同步到客户端对应的数据库以完成数据同步。问题复现:ScriptRunner对象是org.apache.ib
python 分布式集群_Python搭建Spark分布式集群环境
小国阁下
python 分布式集群
前言ApacheSpark是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象。Spark最大的特点就是快,可比HadoopMapReduce的处理速度快100倍。本文没有使用一台电脑上构建多个虚拟机的方法来模拟集群,而是使用三台电脑来搭建一个小型分布式集群环境安装。本教程采用Spark2.0以上版本(比如Spark2.0.2、Spark2.1.0等)搭建集群,同样适用于搭建Spark1.6.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