每次我尝试将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)?
答案 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");
预计Path
为java.nio.file.Path
而不是org.apache.hadoop.fs.Path
(hdfs
路径。)
因为,您正在传递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!