CentOS 8 安装 Apache DataSketches 指南
面向 CentOS 8 服务器的 Apache DataSketches 集成指南,讲解 JDK 与 Maven 安装、Maven 坐标引入与版本验证,并以 HLL 与 Theta Sketch 示例演示基数估计与集合运算。
Apache DataSketchesApache DataSketches2026/10/11
CentOS 8 安装 Apache DataSketches 指南
Apache DataSketches 是一套高性能的流式近似算法库(sketch),能在极小的内存与带宽开销下完成基数估计、分位数、频繁项统计与集合运算。它以 Java 库(jar)形式提供,没有独立的守护进程,也不监听任何端口,因此「安装」的实质是「把依赖引入项目并验证可运行」。
一、前置条件
1.1 环境要求
- CentOS 8(x86_64),已配置可用的 dnf 软件源
- 可访问 Maven 中央仓库
https://repo1.maven.org - root 或具备 sudo 权限的账号
- 至少 2GB 可用内存(本文示例 JVM 堆限定为 256MB)
- 无需开放任何网络端口,无系统服务需要启动
1.2 组件版本
- datasketches-java 6.1.1(要求 Java 8 及以上)
- 传递依赖:datasketches-memory 3.0.2
- 实测平台:CentOS 8 + OpenJDK 1.8.0_312 / OpenJDK 11.0.13
二、安装 JDK 与 Maven
2.1 安装命令
dnf install -y java-11-openjdk-devel maven
说明:CentOS 8 的 maven 软件包同时依赖 java-1.8.0-openjdk,因此系统内可能并存 JDK 8 与 JDK 11,java 命令默认可能指向 JDK 8。DataSketches 6.1.1 兼容 Java 8,默认环境即可直接使用。
2.2 验证安装
# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
# mvn -version
Apache Maven 3.5.4 (Red Hat 3.5.4-5)
Maven home: /usr/share/maven
Java version: 1.8.0_312, vendor: Red Hat, Inc.
2.3 切换默认 JDK 到 11(可选)
# alternatives --set java /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java
# alternatives --set javac /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/javac
# java -version
openjdk version "11.0.13" 2021-10-19 LTS
# javac -version
javac 11.0.13
三、引入 DataSketches 依赖
3.1 Maven 坐标
<dependency>
<groupId>org.apache.datasketches</groupId>
<artifactId>datasketches-java</artifactId>
<version>6.1.1</version>
</dependency>
3.2 Gradle 坐标
implementation 'org.apache.datasketches:datasketches-java:6.1.1'
3.3 创建最小工程
mkdir -p /opt/ds-mini/src/main/java/com/example
创建 /opt/ds-mini/pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>datasketches-demo</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.datasketches</groupId>
<artifactId>datasketches-java</artifactId>
<version>6.1.1</version>
</dependency>
</dependencies>
</project>
3.4 拉取依赖并编译
cd /opt/ds-mini && mvn -B compile
四、版本验证
4.1 查看依赖树
# mvn -B dependency:tree
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ datasketches-demo ---
[INFO] com.example:datasketches-demo:jar:1.0.0
[INFO] \- org.apache.datasketches:datasketches-java:jar:6.1.1:compile
[INFO] \- org.apache.datasketches:datasketches-memory:jar:3.0.2:compile
[INFO] BUILD SUCCESS
4.2 确认 jar 已落地
# find ~/.m2 -name 'datasketches-java-6.1.1.jar'
/root/.m2/repository/org/apache/datasketches/datasketches-java/6.1.1/datasketches-java-6.1.1.jar
五、最小示例(HLL 与 Theta)编译运行
5.1 示例代码
创建 /opt/ds-mini/src/main/java/com/example/Demo.java:
package com.example;
import org.apache.datasketches.hll.HllSketch;
import org.apache.datasketches.hll.TgtHllType;
import org.apache.datasketches.theta.CompactSketch;
import org.apache.datasketches.theta.SetOperation;
import org.apache.datasketches.theta.Union;
import org.apache.datasketches.theta.UpdateSketch;
public class Demo {
public static void main(String[] args) {
// HLL:100 万个不同元素的基数估计
HllSketch hll = new HllSketch(12, TgtHllType.HLL_8);
for (long i = 0; i < 1_000_000; i++) {
hll.update(i);
}
System.out.printf("HLL 估计基数 = %.1f (真实 1000000)%n", hll.getEstimate());
// Theta:两个集合求并集
UpdateSketch a = UpdateSketch.builder().setLogNominalEntries(12).build();
UpdateSketch b = UpdateSketch.builder().setLogNominalEntries(12).build();
for (long i = 0; i < 100_000; i++) {
a.update(i);
}
for (long i = 50_000; i < 150_000; i++) {
b.update(i);
}
CompactSketch ca = a.compact();
CompactSketch cb = b.compact();
Union u = SetOperation.builder().buildUnion();
u.union(ca);
u.union(cb);
System.out.printf("Theta 并集估计 = %.1f (真实 150000)%n", u.getResult().getEstimate());
}
}
5.2 编译与运行命令
cd /opt/ds-mini
mvn -q -B compile
mvn -q -B dependency:build-classpath -Dmdep.outputFile=cp.txt
java -Xmx256m -Dfile.encoding=UTF-8 -cp target/classes:$(cat cp.txt) com.example.Demo
5.3 运行结果
HLL 估计基数 = 990116.6 (真实 1000000)
Theta 并集估计 = 149586.7 (真实 150000)
HLL 估计值 990116.6 与真实基数 1000000 的相对误差约 -0.99%,Theta 并集估计 149586.7 与真实 150000 的相对误差约 -0.28%,均在预期误差范围内。
六、卸载
6.1 移除项目依赖
删除工程目录即可(不涉及任何系统服务):
rm -rf /opt/ds-mini
6.2 清理本地仓库缓存(可选)
rm -rf ~/.m2/repository/org/apache/datasketches
6.3 卸载 JDK 与 Maven(可选)
dnf remove -y maven java-11-openjdk java-11-openjdk-devel java-1.8.0-openjdk java-1.8.0-openjdk-devel
章节目录