Accumulo写入:尝试从mapreduce创建和插入数据



我正在尝试使用MapReduce将数据写入Accumulo的表中。以下是我为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命令运行作业。

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

  1. 手动将必要的jar添加到类路径中。这将是thrift.jaraccumulo-start.jaraccumulo-core.jar,可能还有accumulo-trace.jar,具体取决于您的版本。您需要使用-libjars选项指定这些内容,可以通过博客文章获得更完整的阅读。

  2. 使用内置的Apache Accumulo工具启动您的作业。Accumulo的大多数版本都带有一个名为tool.sh的启动程序脚本,该脚本将自动为您添加适当的jar。它通常出现在$ACCUMULO_HOME/bin/tool.sh下。一些发行版可能会将其称为其他东西,例如accumulo-tool,以消除它与其他工具之间的歧义。示例见用户手册(第三个代码块)。

相关内容

  • 没有找到相关文章

最新更新