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

zour9fqk  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(260)

每次我试图将solr配置发送给zookeeper时,下面都会出现异常。
我把这个地址hdfs://some_address/user/peter/dir_with_date".
在bash脚本后面的jars实现中,我看到有一个paths.get方法,它正在将带有configs的字符串转换为不带双斜杠的字符串(“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)?

mgdq6dx1

mgdq6dx11#

如果您查看“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\ u address/user/peter/dir\ u with\ u date”应该是本地文件路径)。
另外,请查看这个wiki,它提供了一个使用zkcli上载配置的示例:https://cwiki.apache.org/confluence/display/solr/using+zookeeper+to+manage+configuration+files

23c0lvtd

23c0lvtd2#

谢谢你@manjunath,这很有帮助。下面是精确的解决方案:
要通过oozie shell操作将solr配置发送给zookeeper,您必须将solr config dir复制到执行此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!

相关问题