Ubuntu 22.04 安装 Apache DataSketches 指南

面向 Ubuntu 22.04 服务器的 Apache DataSketches 集成指南,覆盖 apt 安装 JDK 与 Maven、Maven 坐标引入与版本验证,并通过 HLL 与 Theta Sketch 示例给出可复现回显。

Apache DataSketchesApache DataSketches2026/10/11

Ubuntu 22.04 安装 Apache DataSketches 指南

Apache DataSketches 是一套高性能的流式近似算法库(sketch),可在极小的内存与带宽开销下完成基数估计、分位数、频繁项统计与集合运算。它以 Java 库(jar)形式发布,没有守护进程、不监听端口,因此「安装」即「引入依赖并验证可运行」。

一、前置条件

1.1 环境要求

  • Ubuntu 22.04 LTS(x86_64),apt 源可用
  • 可访问 Maven 中央仓库 https://repo1.maven.org
  • root 或具备 sudo 权限的账号
  • 至少 2GB 可用内存(本文示例 JVM 堆限定为 256MB)
  • 无需开放任何网络端口,无系统服务需要启动

1.2 组件版本

  • datasketches-java 6.1.1(要求 Java 8 及以上)
  • 传递依赖:datasketches-memory 3.0.2
  • 实测平台:Ubuntu 22.04.5 LTS + OpenJDK 11.0.32.1 + Maven 3.6.3

二、安装 JDK 与 Maven

2.1 更新源并安装

apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y openjdk-11-jdk maven

2.2 验证安装

# java -version
openjdk version "11.0.32.1" 2026-08-18
OpenJDK Runtime Environment (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 11.0.32.1+1-post-1ubuntu1-22.04-Ubuntu, mixed mode, sharing)

# mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.32.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64

三、引入 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%,均符合预期误差范围。两机(Ubuntu 22.04 与 CentOS 8)回显完全一致。

六、卸载

6.1 移除项目依赖

删除工程目录即可(不涉及任何系统服务):

rm -rf /opt/ds-mini

6.2 清理本地仓库缓存(可选)

rm -rf ~/.m2/repository/org/apache/datasketches

6.3 卸载 JDK 与 Maven(可选)

apt-get remove -y maven openjdk-11-jdk
apt-get autoremove -y