MapReduceIndexerTool output dir error "Cannot write parent of file"



我想使用Cloudera的MapReduceIndexerTool来了解形态线的工作原理。我创建了一个基本的形态线,它只从输入文件中读取行,并尝试使用以下命令运行该工具:

hadoop jar /opt/cloudera/parcels/CDH/lib/solr/contrib/mr/search-mr-*-job.jar org.apache.solr.hadoop.MapReduceIndexerTool 
--morphline-file morphline.conf                                                                                  
--output-dir hdfs:///hostname/dir/                                          
--dry-run true

Hadoop 安装在我运行此命令的同一台机器上。

我得到的错误如下:

net.sourceforge.argparse4j.inf.ArgumentParserException: Cannot write parent of file: hdfs:/hostname/dir
at org.apache.solr.hadoop.PathArgumentType.verifyCanWriteParent(PathArgumentType.java:200)

/dir 目录有 777 个权限,因此绝对允许写入它。我不知道我应该怎么做才能让它写入该输出目录。

我是HDFS的新手,我不知道应该如何处理这个问题。日志没有为我提供任何相关信息。

我到目前为止尝试过(没有结果):

  • 创建了一个包含 2 个目录 (/dir/dir2) 的层次结构,并在这两个目录上放置了 777 个权限
  • 将输出目录架构从 hdfs:///...hdfs://...因为 --help 菜单中的所有示例都是以这种方式构建的,但这会导致无效的架构错误

谢谢。

它指出"无法写入文件的父级"。而您情况下的父母是/.看看来源:

private void verifyCanWriteParent(ArgumentParser parser, Path file) throws ArgumentParserException, IOException {
Path parent = file.getParent();
if (parent == null || !fs.exists(parent) || !fs.getFileStatus(parent).getPermission().getUserAction().implies(FsAction.WRITE)) {
throw new ArgumentParserException("Cannot write parent of file: " + file, parser);
}
}    

在打印的消息中是file,在您的情况下hdfs:/hostname/dir,所以file.getParent()将被/

此外,您可以使用hadoop fs命令尝试权限,例如,您可以尝试在路径中创建零长度文件:

hadoop fs -touchz /test-file

经过几天的工作,我解决了这个问题。

问题出在--output-dir hdfs:///hostname/dir/那行上。

  1. 首先,当我连续尝试完成这项工作时,开头没有 3 个斜杠,只有 2 个(就像在任何有效的 HDFS URI 中一样)。实际上我放了 3 个斜杠,因为否则,该工具会抛出无效的架构异常!您可以在此代码中轻松看到架构检查是在验证CanWriteParent检查之前完成的。

  2. 我试图通过在运行该工具的 Cent OS 机器上运行主机名命令来获取主机名。这是主要问题。我分析了/etc/hosts 文件,我看到同一个本地 IP 有 2 个主机名。我拿了第二个,它奏效了。(我还将端口附加到主机名,因此最终格式如下:--output-dir hdfs://correct_hostname:8020/path/to/file/from/hdfs

  3. 此错误非常令人困惑,因为无论您在哪里查找 namenode 主机名,您都会看到与主机名命令返回的内容相同的内容。此外,错误的结构不是您可以诊断问题并采取逻辑路径来解决它的方式。

有关此工具及其调试的其他信息

  • 如果您想查看在其后面运行的实际代码,请检查您正在运行的 cloudera 版本,并在官方仓库中选择相同的分支。母版不是最新的。
  • 如果您只想运行此工具来玩形态线(通过使用 --dry-run 选项),而不连接到 Solr 并使用它,则不能。您必须指定一个 Zookeeper 端点和一个 Solr 集合或一个 solr 配置目录,这涉及额外的研究工作。这是可以改进此工具的内容。
  • 您不需要使用-u hdfs运行该工具,它适用于普通用户。

最新更新