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 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) |
| 数学库 API | mahout-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 kmeans | KMeans 聚类 | -i 输入路径、-c 初始簇心、-k 簇数、-cd 收敛阈值 |
mahout naivebayes | 朴素贝叶斯分类 | -i 训练输入、-o 输出模型、-tr 训练 |
mahout svd | 分布式奇异值分解 | -i 输入矩阵、-r 秩、-o 输出 |
mahout fpg | FP-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 参数一一对应,便于从原型平滑迁移到分布式。
五、注意事项
⚠️ 注意:
- bin/mahout 算法子命令面向 Hadoop 生态;纯本地环境请用 mahout-math Java API。
- 依赖 jar 必须统一为 14.1 版本,避免多个 mahout-* 组件版本不一致。
- 运行示例/算法时通过
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/