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

时间:2015-12-21 16:31:16

标签: hadoop solr hdfs apache-zookeeper oozie

每次我尝试将solr configs发送给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)?

2 个答案:

答案 0 :(得分:2)

如果您查看" 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

答案 1 :(得分:1)

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

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

 <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!