Hadoop 通过oozie shell操作使用zkcli.sh bash从hdfs向zookeeper发送solr配置

Hadoop 通过oozie shell操作使用zkcli.sh bash从hdfs向zookeeper发送solr配置,hadoop,solr,hdfs,apache-zookeeper,oozie,Hadoop,Solr,Hdfs,Apache Zookeeper,Oozie,每次我尝试将solr配置发送给zookeeper时,我都会遇到下面的异常 作为confdir,我把这个地址放在:hdfs://some_address/user/Peter/dir_with_date“ 在bash脚本后面的jars实现中,我看到有一个Paths.get方法,它正在将带有configs的字符串转换为不带双斜杠的字符串(“hdfs:/some_ad…) 我是否做错了什么,或者这些zkcli不适合从hdfs读取数据?处理这种情况(构建自定义jar)的最佳方法是什么?如果您查看“ZkC

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

作为confdir,我把这个地址放在:hdfs://some_address/user/Peter/dir_with_date“

在bash脚本后面的jars实现中,我看到有一个Paths.get方法,它正在将带有configs的字符串转换为不带双斜杠的字符串(“hdfs:/some_ad…)


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

如果您查看“ZkConfigManager::uploadToZK()”的代码,如下所示:,您可以观察到,异常发生在:

if (!Files.exists(rootPath))
    throw new IOException("Path " + rootPath + " does not exist");
它希望
Path
java.nio.file.Path
而不是
org.apache.hadoop.fs.Path
hdfs
Path)

由于您正在传递一个
hdfs
路径,因此将引发异常

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


此外,请查看此wiki,它提供了使用zkcli上载配置的示例:

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

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

 <file>yourpathto/solr_config_dir#$yourpathto/solr_config_dir</file>
将CONFIGDIR作为confdir参数添加到zkcli.sh并完成


现在你有了一个正在运行的oozie shell操作,它将把你的solr配置发送给zookeeper!

太棒了。我喜欢ZKCLIGManager.java链接的根本原因:)嗨!在与SolrJ进行了足够长的斗争以上传配置之后,我正试图采取这一路线……我一直坚持的一个部分是,你在脚本中是如何引用zkcli.sh的?我尝试了使用g完整的绝对路径,但在执行中找不到它。您是否在作业配置中添加了zkcli.sh?脚本的Jar依赖关系如何?嗨!我使用的是cloudera的oozie,并且暴露了$CDH_SOLR_HOME变量,因此您可以从中获取zkcli.sh和所有Jar($CDH_SOLR_HOME/bin/zkcli.sh)
 <file>yourpathto/solr_config_dir#$yourpathto/solr_config_dir</file>
CONFIGDIR="`readlink -f solr_config_dir`"