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