我正在尝试使用MapReduce将数据写入Accumulo表中。
以下是我的mapreduce累积代码。

Job job = Job.getInstance(conf);
AccumuloOutputFormat.setZooKeeperInstance(job, accumuloInstance, zooKeepers);
AccumuloOutputFormat.setDefaultTableName(job, accumuloTableName);
AccumuloOutputFormat.setConnectorInfo(job, accumuloUser, new PasswordToken(accumuloPassword));

执行时,出现以下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/thrift/TException
    at org.apache.accumulo.core.client.mapreduce.lib.util.ConfiguratorBase.setConnectorInfo(ConfiguratorBase.java:107)
    at org.apache.accumulo.core.client.mapreduce.AccumuloOutputFormat.setConnectorInfo(AccumuloOutputFormat.java:94)
    at core.accumulo.mapreduce.AccumuloMapReduceWrite.main(AccumuloMapReduceWrite.java:96)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

我该如何解决?我也尝试并引用了几个URL。但这无济于事。

最佳答案

您的工作类别路径似乎缺少Thrift类。我假设您正在使用标准hadoop job命令运行您的工作。

在这种情况下,您有两个选择:

  • 手动将必要的jar添加到您的类路径中。根据您的版本,这将是thrift.jaraccumulo-start.jaraccumulo-core.jar,并且可能是accumulo-trace.jar。您将需要使用-libjars选项指定这些内容,更完整的阅读资料可以作为blog post使用。
  • 使用Apache Accumulo工具中的内置工具启动您的工作。 Accumulo的大多数版本都带有一个名为tool.sh的启动器脚本,它将自动为您添加适当的jar。通常可以在$ACCUMULO_HOME/bin/tool.sh下找到。某些发行版可能会使用其他名称(例如accumulo-tool)将其与其他工具区分开。可以在user manual(第三代码块)中看到示例。
  • 关于hadoop - Accumulo Write:尝试从mapreduce创建和插入数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28495008/

    10-12 17:32