【问题标题】:Sending solr configs to zookeeper from hdfs using zkcli.sh bash through oozie shell action使用 zkcli.sh bash 通过 oozie shell 操作从 hdfs 向 zookeeper 发送 solr 配置
【发布时间】:2015-12-22 18:26:04
【问题描述】:

每次我尝试将 solr 配置发送到 zookeeper 时,我都会在下面遇到异常。

作为 confdir,我输入这个地址:“hdfs://some_address/user/Peter/dir_with_date”。

在 bash 脚本后面的 jar 中实现时,我看到有一个 Paths.get 方法,该方法将我的带有配置的字符串转换为没有双斜杠的字符串(“hdfs:/some_ad...)。

Exception in thread "main" java.io.IOException: Path hdfs:/some_address/user/Peter/dir_with_date does not exist
  at org.apache.solr.common.cloud.ZkConfigManager.uploadToZK(ZkConfigManager.java:56)
  at org.apache.solr.common.cloud.ZkConfigManager.uploadConfigDir(ZkConfigManager.java:120)
  at org.apache.solr.cloud.ZkCLI.main(ZkCLI.java:220)

是我做错了什么还是这些 zkcli 不适合从 hdfs 读取数据?处理这种情况的最佳方法是什么(构建自定义 jar)?

【问题讨论】:

    标签: hadoop solr hdfs apache-zookeeper oozie


    【解决方案1】:

    如果你查看“ZkConfigManager::uploadToZK()”的代码,这里是:https://github.com/apache/incubator-ranger/blob/master/ranger_solrj/src/main/java/org/apache/solr/common/cloud/ZkConfigManager.java,你可以观察到,异常发生在:

    if (!Files.exists(rootPath))
        throw new IOException("Path " + rootPath + " does not exist");
    

    预计Pathjava.nio.file.Path 而不是org.apache.hadoop.fs.Pathhdfs 路径)。

    由于您传递的是hdfs 路径,因此将引发异常。

    您应该将路径传递给本地文件系统(即“/some_address/user/Peter/dir_with_date”应该是本地文件路径)。

    另外,查看这个 wiki,它给出了使用 zkcli 上传配置的示例:https://cwiki.apache.org/confluence/display/solr/Using+ZooKeeper+to+Manage+Configuration+Files

    【讨论】:

    • 太棒了。我喜欢 ZkConfigManager.java 链接的根本原因:)
    【解决方案2】:

    谢谢@Manjunath,这很有帮助。这是确切的解决方案:

    要通过 oozie shell 操作将 solr 配置发送到 zookeeper,您必须将 solr 配置目录复制到执行此 bash 脚本的工作人员,方法是将其添加到工作流中

     <file>yourpathto/solr_config_dir#$yourpathto/solr_config_dir</file>
    

    在 bashscript 中,您可以像这样引用这个文件夹:

    CONFIGDIR="`readlink -f solr_config_dir`"
    

    将 CONFIGDIR 作为 confdir 参数添加到 zkcli.sh 并完成!

    现在您可以使用 oozie shell 操作将您的 solr 配置发送到 zookeeper!

    【讨论】:

    • 嗨!在与 SolrJ 摔跤足够长的时间来上传配置之后,我正试图走这条路……我坚持的一个部分是,你是如何在脚本中引用 zkcli.sh 的?我尝试使用完整的绝对路径,但在执行中找不到它。您是否在作业配置中添加了 zkcli.sh?那个脚本的 Jar 依赖呢?
    • 嗨!我正在使用来自 cloudera 的 oozie,并且暴露了 $CDH_SOLR_HOME 变量,因此您可以从那里获取带有所有 jar 的 zkcli.sh ($CDH_SOLR_HOME/bin/zkcli.sh)
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多