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

whitzsjs  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(412)

我正在尝试使用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)

我该如何解决这个问题?我已经尝试和裁判几个网址太。但这帮不了什么忙。

u4dcyp6a

u4dcyp6a1#

看起来你的工作类路径缺少节俭类。我假设你是在用标准来运行你的工作 hadoop job 命令。
在这种情况下,您有两种选择:
手动将必要的jar添加到类路径中。这将是 thrift.jar , accumulo-start.jar , accumulo-core.jar ,还有可能 accumulo-trace.jar 取决于你的版本。您需要使用 -libjars 选项,更全面的阅读,可作为博客文章。
使用内置的apache accumulo工具启动作业。大多数accumulo版本都带有一个名为 tool.sh 这将自动为您添加适当的jar。通常在 $ACCUMULO_HOME/bin/tool.sh . 有些发行版可能会称之为其他版本,例如 accumulo-tool ,以消除它与其他工具之间的歧义。示例见用户手册(第三个代码块)。

相关问题