MapReduceIndexerTool输出dir错误“无法写入文件的父级”

时间:2018-04-05 12:21:46

标签: hadoop hdfs cloudera

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

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菜单中的所有示例都是以这种方式构建的,但这会导致架构错误无效< / LI>

谢谢。

2 个答案:

答案 0 :(得分:2)

它声明无法写出文件&#39;的。您案例中的父母是/。看一下来源:

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);
  }
}    

在打印的邮件中,filehdfs:/hostname/dir,因此file.getParent()将为/

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

hadoop fs -touchz /test-file

答案 1 :(得分:1)

经过几天的努力,我解决了这个问题。

问题在于该行--output-dir hdfs:///hostname/dir/

  1. 首先,开始时我没有3个斜杠,因为我不断尝试完成这项工作,只有2个(如任何有效的HDFS URI)。实际上我添加了3个斜杠,因为否则,该工具会抛出无效的模式异常!您可以在this代码中轻松看到模式检查已完成之前 < em> verifyCanWriteParent 检查。

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

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

  4. 有关此工具和调试的其他信息

    • 如果要查看其后面运行的实际代码,请检查您正在运行的cloudera版本,并在the official repository上选择相同的分支。主人不是最新的。
    • 如果您只想运行此工具来使用morphline(使用--dry-run选项)而不连接到Solr并使用它,则不能。您必须指定Zookeeper端点和Solr集合或solr配置目录,这涉及额外的研究工作。这可以改进这个工具。
    • 您无需使用 -u hdfs 运行该工具,它可以与普通用户一起使用。