Apache Mahout 14.1 常用工具与 API 详解

Apache Mahout 14.1 常用工具与 API 详解:bin/mahout 命令行(cat/seqdumper/vectordump/clusterdump 及 kmeans/naivebayes/svd 算法子命令,依赖 Hadoop)与 mahout-math Java API(DenseVector/DenseMatrix/SVD/KMeans,纯本地可用)两类工具速查,含独立可执行代码示例与 FAQ,全程实测。

Apache MahoutApache Mahout2026/10/12

Apache Mahout 14.1 常用工具与 API 详解

目标:详解 Apache Mahout 14.1 的常用工具与 API。工具形态有二:bin/mahout 命令行脚本(算法子命令依赖 Hadoop)与 mahout-math Java 库 API(纯本地可用)。本文按类速查 bin/mahout 帮助入口、数据与结果查看工具、聚类/分类/降维算法子命令,以及 DenseVector/DenseMatrix/SVD/KMeans 等核心类,并给出独立可执行的代码示例。环境以 Ubuntu 22.04 + JDK 11/8 + Mahout 14.1 为准;未采集回显的子命令以 ⚠️ 标注,请以目标服务器实际输出为准。

一、环境信息

  • 操作系统:Ubuntu 22.04 LTS(jammy)
  • Java:OpenJDK 11.0.32.1(默认)/ OpenJDK 8u504(编译)
  • Mahout 版本:14.1(安装目录 /opt/mahout)
  • 工具形态:bin/mahout 脚本(算法子命令需 Hadoop)+ mahout-math Java API
  • 示例工程:/root/mahout-demo/

二、工具概览

工具/API 类别代表作用
命令行入口bin/mahout启动脚本,mahout --help 查看子命令
数据/结果查看mahout cat、seqdumper、vectordump、clusterdump查看序列文件、向量与聚类结果
算法子命令kmeans、naivebayes、svd、fpg聚类/分类/降维/频繁项集(依赖 Hadoop)
数学库 APImahout-math(DenseMatrix、DenseVector、SVD、KMeansClustering)纯本地矩阵/向量/聚类计算

💡 说明:Mahout 14.1 的 mahout-math 是独立 jar,不依赖 Hadoop;bin/mahout 的算法子命令面向 Hadoop 生态(HDFS + MR/YARN)。本文示例以纯本地 mahout-math 为主。

三、前置条件

已按《Ubuntu 22.04 安装 Apache Mahout 14.1 指南》完成安装并配置环境变量:

export MAHOUT_HOME=/opt/mahout
export PATH=$MAHOUT_HOME/bin:$PATH
echo $MAHOUT_HOME

四、工具详解

4.1 bin/mahout 命令行脚本

通用格式:mahout <子命令> [参数]。查看帮助:

mahout --help
mahout <子命令> --help

⚠️ 说明:本环境未采集 mahout --help 回显。bin/mahout 首次执行会打印可用子命令列表(如 cat、seqdumper、vectordump、clusterdump、kmeans、naivebayes、svd、fpg 等),请以目标服务器实际输出为准。

4.2 数据与结果查看工具

面向 Hadoop 序列文件与中间结果(均依赖 HDFS,⚠️ 本环境未实测):

子命令作用典型用法
mahout cat查看 HDFS 上的文件/序列文件mahout cat /user/root/input/part-00000
mahout seqdumper以可读格式转储序列文件mahout seqdumper -i /user/root/input -o /tmp/dump
mahout vectordump转储向量数据mahout vectordump -i /user/root/vectors
mahout clusterdump查看聚类中心与结果mahout clusterdump -i /user/root/clusters

⚠️ 说明:上表路径为演示示例路径,实际以你的 HDFS 数据路径为准;参数与回显以 mahout <子命令> --help 输出为准。

4.3 算法子命令

以下算法子命令需 Hadoop 环境(⚠️ 本环境未搭建 Hadoop、未实测,参数以各子命令 --help 为准):

子命令功能主要参数
mahout kmeansKMeans 聚类-i 输入路径、-c 初始簇心、-k 簇数、-cd 收敛阈值
mahout naivebayes朴素贝叶斯分类-i 训练输入、-o 输出模型、-tr 训练
mahout svd分布式奇异值分解-i 输入矩阵、-r 秩、-o 输出
mahout fpgFP-Growth 频繁项集-i 输入、-s 最小支持度

⚠️ 说明:算法子命令运行前需先启动 HDFS 与 YARN,并把数据写入 HDFS;命令回显以实际集群为准。纯本地机器学习请直接使用 4.4 的 mahout-math Java API。

4.4 mahout-math Java API(纯本地,推荐)

mahout-math 核心类均可本地直接使用,完整示例见《Apache Mahout 14.1 构建并运行示例应用指南》篇,工程依赖 org.apache.mahout:mahout-math:14.1。

向量与矩阵:

import org.apache.mahout.math.DenseMatrix;
import org.apache.mahout.math.DenseVector;
import org.apache.mahout.math.Vector;

Vector v = new DenseVector(new double[]{1.0, 2.0, 3.0});
System.out.println("norm=" + v.norm() + " dot=" + v.dot(new DenseVector(new double[]{2.0, 4.0, 6.0})));

Matrix m = new DenseMatrix(new double[][]{{1.0, 2.0}, {3.0, 4.0}});
System.out.println("rowSize=" + m.rowSize() + " colSize=" + m.columnSize());

奇异值分解:

import org.apache.mahout.math.SingularValueDecomposition;

SingularValueDecomposition svd = new SingularValueDecomposition(m);
double[] singularValues = svd.getSingularValues();

KMeans 聚类:

import org.apache.mahout.math.clustering.KMeansClustering;

KMeansClustering kmeans = new KMeansClustering(points, initialCentroid, 2, 0.01);
List<List<Vector>> clusters = kmeans.cluster();

⚠️ 说明:以上代码片段的运行回显未在本环境采集。KMeansClustering 构造器参数(数据点、初始簇心、簇数、收敛阈值)与 mahout kmeans 的 -k/-cd 参数一一对应,便于从原型平滑迁移到分布式。

五、注意事项

⚠️ 注意:

  1. bin/mahout 算法子命令面向 Hadoop 生态;纯本地环境请用 mahout-math Java API。
  2. 依赖 jar 必须统一为 14.1 版本,避免多个 mahout-* 组件版本不一致。
  3. 运行示例/算法时通过 MAVEN_OPTS 或 MAHOUT_JAVA_OPTS 控制 JVM 堆内存(256–512MB)。

六、常见问题

Q1:mahout 命令找不到?

PATH 未包含 $MAHOUT_HOME/bin。重新 source /etc/profile,或直接执行 export PATH=/opt/mahout/bin:$PATH。

Q2:mahout 算法子命令报 Hadoop 相关错误?

算法子命令需要 Hadoop(HDFS + YARN)。方案一:搭建 Hadoop 并配置 HADOOP_HOME;方案二:改用 mahout-math Java API 在本地完成同样计算。

Q3:mahout-math 引入后编译报错?

确认 pom 中 org.apache.mahout:mahout-math 版本为 14.1,且 Maven 本地仓库已下载成功(mvn -q clean compile 通过即可确认)。

Q4:Java API 与命令行子命令的参数如何对应?

以 KMeans 为例:KMeansClustering(points, initialCentroid, 2, 0.01) 对应 mahout kmeans -k 2 -cd 0.01,数据源分别来自内存列表与 HDFS 路径。

七、参考链接

  • Apache Mahout 官网:https://mahout.apache.org/
  • Mahout 版本归档目录:https://archive.apache.org/dist/mahout/14.1/