如何构建/运行这个简单的 Mahout 程序而不出现异常?

2024-01-17

我想运行我在 Mahout In Action 中找到的这段代码:

package org.help;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;
import org.apache.mahout.math.DenseVector;
import org.apache.mahout.math.NamedVector;
import org.apache.mahout.math.VectorWritable;

public class SeqPrep {

    public static void main(String args[]) throws IOException{

        List<NamedVector> apples = new ArrayList<NamedVector>();

        NamedVector apple;

        apple = new NamedVector(new DenseVector(new double[]{0.11, 510, 1}), "small round green apple");        

        apples.add(apple);

        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(conf);
        Path path = new Path("appledata/apples");

        SequenceFile.Writer writer = new SequenceFile.Writer(fs,  conf, path, Text.class, VectorWritable.class);

        VectorWritable vec = new VectorWritable();
        for(NamedVector vector : apples){
            vec.set(vector);
            writer.append(new Text(vector.getName()), vec);
        }
        writer.close();

        SequenceFile.Reader reader = new SequenceFile.Reader(fs, new Path("appledata/apples"), conf);

        Text key = new Text();
        VectorWritable value = new VectorWritable();
        while(reader.next(key, value)){
            System.out.println(key.toString() + " , " + value.get().asFormatString());
        }
        reader.close();

    }

}

我用以下方法编译它:

$ javac -classpath :/usr/local/hadoop-1.0.3/hadoop-core-1.0.3.jar:/home/hduser/mahout/trunk/core/target/mahout-core-0.8-SNAPSHOT.jar:/home/hduser/mahout/trunk/core/target/mahout-core-0.8-SNAPSHOT-job.jar:/home/hduser/mahout/trunk/core/target/mahout-core-0.8-SNAPSHOT-sources.jar -d myjavac/ SeqPrep.java

我把它罐装:

$ jar -cvf SeqPrep.jar -C myjavac/ .

现在我想在本地 hadoop 节点上运行它。我试过了:

 hadoop jar SeqPrep.jar org.help.SeqPrep

但我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mahout/math/Vector
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

所以我尝试使用 libjars 参数:

$ hadoop jar SeqPrep.jar org.help.SeqPrep -libjars /home/hduser/mahout/trunk/core/target/mahout-core-0.8-SNAPSHOT.jar -libjars /home/hduser/mahout/trunk/core/target/mahout-core-0.8-SNAPSHOT-job.jar -libjars /home/hduser/mahout/trunk/core/target/mahout-core-0.8-SNAPSHOT-sources.jar -libjars /home/hduser/mahout/trunk/math/target/mahout-math-0.8-SNAPSHOT.jar -libjars /home/hduser/mahout/trunk/math/target/mahout-math-0.8-SNAPSHOT-sources.jar

并遇到了同样的问题。我不知道还能尝试什么。

我的最终目标是能够将 hadoop fs 上的 .csv 文件读入稀疏矩阵,然后将其乘以随机向量。

edit:看起来 Razvan 明白了(注意:请参阅下面的另一种方法来执行此操作,并且不会干扰您的 hadoop 安装)。以供参考:

$ find /usr/local/hadoop-1.0.3/. |grep mah
/usr/local/hadoop-1.0.3/./lib/mahout-core-0.8-SNAPSHOT-tests.jar
/usr/local/hadoop-1.0.3/./lib/mahout-core-0.8-SNAPSHOT.jar
/usr/local/hadoop-1.0.3/./lib/mahout-core-0.8-SNAPSHOT-job.jar
/usr/local/hadoop-1.0.3/./lib/mahout-core-0.8-SNAPSHOT-sources.jar
/usr/local/hadoop-1.0.3/./lib/mahout-math-0.8-SNAPSHOT-sources.jar
/usr/local/hadoop-1.0.3/./lib/mahout-math-0.8-SNAPSHOT-tests.jar
/usr/local/hadoop-1.0.3/./lib/mahout-math-0.8-SNAPSHOT.jar

进而:

$hadoop jar SeqPrep.jar org.help.SeqPrep

small round green apple , small round green apple:{0:0.11,1:510.0,2:1.0}

edit:我试图在不将 mahout jar 复制到 hadoop lib/ 的情况下执行此操作

$ rm /usr/local/hadoop-1.0.3/lib/mahout-*

然后当然:

hadoop jar SeqPrep.jar org.help.SeqPrep

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mahout/math/Vector
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
Caused by: java.lang.ClassNotFoundException: org.apache.mahout.math.Vector
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

当我尝试使用 mahout 作业文件时:

$hadoop jar ~/mahout/trunk/core/target/mahout-core-0.8-SNAPSHOT-job.jar org.help.SeqPrep

Exception in thread "main" java.lang.ClassNotFoundException: org.help.SeqPrep
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

如果我尝试包含我制作的 .jar 文件:

$ hadoop jar ~/mahout/trunk/core/target/mahout-core-0.8-SNAPSHOT-job.jar SeqPrep.jar org.help.SeqPrep

Exception in thread "main" java.lang.ClassNotFoundException: SeqPrep.jar

edit:显然我一次只能发送一个jar到hadoop。这意味着我需要将我制作的类添加到 mahout 核心作业文件中:

~/mahout/trunk/core/target$ cp mahout-core-0.8-SNAPSHOT-job.jar mahout-core-0.8-SNAPSHOT-job.jar_backup

~/mahout/trunk/core/target$ cp ~/workspace/seqprep/bin/org/help/SeqPrep.class .

~/mahout/trunk/core/target$ jar uf mahout-core-0.8-SNAPSHOT-job.jar SeqPrep.class

进而:

~/mahout/trunk/core/target$ hadoop jar mahout-core-0.8-SNAPSHOT-job.jar org.help.SeqPrep

Exception in thread "main" java.lang.ClassNotFoundException: org.help.SeqPrep

edit:好的,现在我可以做到这一点,而不会弄乱我的 hadoop 安装。我在之前的编辑中错误地更新了 .jar。它应该是:

~/mahout/trunk/core/target$ jar uf mahout-core-0.8-SNAPSHOT-job.jar org/help/SeqPrep.class

then:

~/mahout/trunk/core/target$ hadoop jar mahout-core-0.8-SNAPSHOT-job.jar org.help.SeqPrep

small round green apple , small round green apple:{0:0.11,1:510.0,2:1.0}

您需要使用 Mahout 提供的“job”JAR 文件。它打包了所有依赖项。您还需要将您的课程添加到其中。这就是所有 Mahout 示例的工作方式。您不应该将 Mahout jar 放入 Hadoop 库中,因为这样会将程序“安装”在 Hadoop 中太深。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何构建/运行这个简单的 Mahout 程序而不出现异常? 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何在hadoop mapreduce/yarn中设置VCORES?

    以下是我的配置 mapred site xml map mb 4096 opts Xmx3072m reduce mb 8192 opts Xmx6144m yarn site xml resource memory mb 40GB min
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • Zapier频繁10.01秒超时

    我从 Zap 获取数据 从中构造一个 http 请求的 xml 正文 并将该 http 请求发送到基于 SOAP CRM 的外部服务器 该脚本通常会成功运行 但偶尔会出现错误 Traceback most recent call last
  • 为什么 getElementsByTagName() 总是返回一个数组?

    为什么如果我只有一个h1文档中的元素 我还必须使用索引来访问吗 就像下面这样不行 document getElementsByTagName h1 innerHTML SHUSHAN 但如果我这样做 document getElements
  • 使用 Workbench 创建新的 MySQL 数据库

    我只是想用一些简单的表创建一个新的 MySQL 数据库 我在 Workbench 中创建了一个新的 EER 模型 因此我对我想要的数据库进行了建模 其中包含我需要的所有表 字段 我没有看到任何方法可以采用模型并从中创建实际的数据库 现在它刚
  • R - trunc() 函数对于具有大量小数的浮点数不一致?

    我有 R 版本 4 1 2 2021 11 01 它似乎trunc 当输入数字有大量小数值时 函数不一致 trunc 3 99999999999999977799999999999999999999900 1 4 trunc 3 99999
  • 在非 UI 线程上实例化视图

    我知道 UI 元素 视图层次结构 只能从 UI 线程进行操作 对于后台操作 可以使用 AsyncTask 它提供事件处理程序来到达 UI 线程 简而言之 是否允许实例化视图 绑定到getApplicationContext 在非 UI 线程
  • 离线时本地存储数据的最佳方法

    我正在编写一个小程序 更多的是与 2010 相比进行实验 尽管是一个实验 但它对我们当地的体育俱乐部有一些实际用途 我的想法是访问数据库 当前在线 以下载当前会员并本地存储在笔记本电脑上 这是一个 MS sql 表 用于为俱乐部网站提供支持
  • 如何在R中的列表中组合不同长度的向量?

    我在组合列表中包含的以下向量时遇到问题 x lt list as numeric c 1 4 as numeric c 3 19 11 names x 1 lt c species A species C names x 2 lt c sp
  • 在 MVC2 中使用不同的端口与 RequireHttps 过滤器

    是否可以使用 RequireHttps 使用 443 以外的其他端口进行过滤 我找不到太多关于它的文档 史蒂夫 桑德森的方法 http blog stevensanderson com 2008 08 05 adding httpsssl
  • 简单的 Scala 序列化?

    我想在 Scala 中进行序列化 我见过类似的sjson https github com debasishg sjson和 serialized 注释 然而 我一直无法看到如何让它们处理 1 个主要障碍 库中的类型擦除和泛型 以Scala
  • Android L 设备不向 Android Wear 智能手表发送通知卡

    我正在尝试在单击按钮时向 Android Wear 智能手表发送通知 它适用于我测试过的所有设备 除了 Android L 的设备 有谁知道可能是什么问题吗 我什至将这些设备与 Android Wear SmartWatch 模拟器配对 但
  • 潜在的空指针访问

    我遇到了一个目前我不太清楚的奇怪情况 当有潜在的空指针访问在 Eclipse 中启用警告 我收到如下警告 警告位于相应注释之前的行 protected Item findItemByName String itemName Items it
  • Gruntjs:如何使复制任务仅复制手表上已更改的文件

    因此 在 grunt contrib watch 插件信息页面上 有一个关于如何使 jshint 仅针对更改的文件运行的示例 grunt initConfig watch scripts files lib js tasks jshint
  • 尝试 ES6 样式导入会出现“无法在模块外部使用导入语句”

    我正在尝试在 intellij 中编写一个 javascript 测试 我需要导入一些依赖项 并且我想使用 ES6 样式导入语句 但出现错误 usr local bin node workspace rr sample node modul
  • Visual Studio 2022 启动项目无法启动

    将 Visual Studio 2022 更新到 17 2 0 版本后出现此错误 The error message pops up when I want to close the Visual Studio by X button or
  • scanf() 将换行符保留在缓冲区中

    我有以下程序 int main int argc char argv int a b char c1 c2 printf Enter something scanf d a line 1 printf Enter other somethi
  • NuGet Package Restore 不会在构建时恢复包

    我正在将我们的源代码从 Vault 移动到 TFS 不关心迁移或其他任何事情 只是在 Vault 中获取最新版本并将其添加到 TFS 该解决方案有多个项目 每个项目至少有一个 NuGet 包 我正在尝试让 Package Restore 再
  • Python,字典的校验和

    我正在考虑创建一个字典的校验和来知道它是否被修改 目前我有 gt gt gt import hashlib gt gt gt import pickle gt gt gt d k v k2 v2 gt gt gt z pickle dump
  • 不能使用类,因为它不是一个特征

    我已按照教程进行操作here http culttt com 2014 01 13 advanced validation service laravel 4 为 Laravel 构建验证服务 我现在在尝试从我的控制器之一调用验证器时遇到问
  • Android 可绘制水平线

    是否可以用xml将line做成这样 或者有什么方法可以做到这一点 我已经做了一些可绘制的形状 但它并不像我想要的那样
  • 如何构建/运行这个简单的 Mahout 程序而不出现异常?

    我想运行我在 Mahout In Action 中找到的这段代码 package org help import java io IOException import java util ArrayList import java util