Hadoop 在HDFS上创建Solr集合失败

Hadoop 在HDFS上创建Solr集合失败,hadoop,solr,Hadoop,Solr,我正在尝试在Hadoop上运行Solr 7.4.0(我已经成功地在Windows 10上安装了Hadoop 2.7.6)。 按照Solr用户指南,我打开了默认配置的文件“solrconfig.xml”,并替换了该行 <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/> 一些论点如下 -Djava.io.tmpdir=d:

我正在尝试在Hadoop上运行Solr 7.4.0(我已经成功地在Windows 10上安装了Hadoop 2.7.6)。 按照Solr用户指南,我打开了默认配置的文件“solrconfig.xml”,并替换了该行

<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
一些论点如下

-Djava.io.tmpdir=d:\Project\Java\hadoop-2.7.6\solr-7.4.0\server\tmp
-Djetty.home=d:\Project\Java\hadoop-2.7.6\solr-7.4.0\server
-Djetty.host=0.0.0.0
-Djetty.port=8983
-Dlog4j.configurationFile=file:d:\Project\Java\hadoop-2.7.6\solr-7.4.0\server\resources\log4j2.xml
-Dsolr.default.confdir=d:\Project\Java\hadoop-2.7.6\solr-7.4.0\server\solr\configsets\_default\conf
-Dsolr.directoryFactory=HdfsDirectoryFactory
-Dsolr.hdfs.home=hdfs://localhost:9000/solr
-Dsolr.install.dir=d:\Project\Java\hadoop-2.7.6\solr-7.4.0
-Dsolr.lock.type=hdfs
-Dsolr.log.dir=d:\Project\Java\hadoop-2.7.6\solr-7.4.0\server\logs
-Dsolr.solr.home=d:\Project\Java\hadoop-2.7.6\solr-7.4.0\server\solr
在下一步中,我尝试通过执行此请求创建一个集合“Test”

http://localhost:8983/solr/admin/collections?action=CREATE&name=Test&numShards=1&replicationFactor=1
和Solr返回一个错误

............
Caused by: java.nio.file.InvalidPathException: Illegal char <:> at index 4: hdfs://localhost:9000/solr/Test/core_node2/data\
    at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
    at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
    at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
    at sun.nio.fs.AbstractPath.resolve(AbstractPath.java:53)
    at org.apache.solr.core.SolrCore.initUpdateLogDir(SolrCore.java:1341)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:923)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:867)
    at org.apache.solr.core.CoreContainer.createFromDescriptor(CoreContainer.java:1135)
    ... 45 more
。。。。。。。。。。。。
原因:java.nio.file.InvalidPathException:索引4处的非法字符:hdfs://localhost:9000/solr/Test/core_node2/data\
位于sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)
位于sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153)
位于sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
位于sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
位于sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
位于sun.nio.fs.AbstractPath.resolve(AbstractPath.java:53)
位于org.apache.solr.core.SolrCore.initUpdateLogDir(SolrCore.java:1341)
位于org.apache.solr.core.SolrCore(SolrCore.java:923)
位于org.apache.solr.core.SolrCore(SolrCore.java:867)
位于org.apache.solr.core.CoreContainer.createFromDescriptor(CoreContainer.java:1135)
... 还有45个

有人有过同样的问题吗?如何在Hadoop上创建SolrCloud集合和存储?

您需要使用solrconfig.xml中的以下目录工厂

<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory">
<str name="solr.hdfs.home">hdfs://namenodeserver:8020/apps/solr</str>
<str name="solr.hdfs.confdir">/etc/hadoop/conf</str>
<str name="solr.hdfs.security.kerberos.enabled">true</str>
<str name="solr.hdfs.security.kerberos.keytabfile">/etc/security/keytabs/solr.service.keytab</str>
<str name="solr.hdfs.security.kerberos.principal">@principal</str>
<bool name="solr.hdfs.blockcache.enabled">true</bool>
<bool name="solr.hdfs.blockcache.global">true</bool>
<int name="solr.hdfs.blockcache.slab.count">2</int>
<bool name="solr.hdfs.blockcache.direct.memory.allocation">true</bool>
<int name="solr.hdfs.blockcache.blocksperbank">16384</int>
<bool name="solr.hdfs.blockcache.read.enabled">true</bool>
<bool name="solr.hdfs.blockcache.write.enabled">false</bool>
<bool name="solr.hdfs.nrtcachingdirectory.enable">true</bool>
<int name="solr.hdfs.nrtcachingdirectory.maxmergesizemb">16</int>
<int name="solr.hdfs.nrtcachingdirectory.maxcachedmb">192</int>
</directoryFactory>
创建hdfs集合,如下所示

sh /opt/lucidworks-hdpsearch/solr/server/scripts/cloud-scripts/zkcli.sh --zkhost hostname1.com,hostname2.com,hostname3.com:2181/solr -cmd upconfig --collection Event --confname webconf --solrhome /home/solr/Event/ --confdir /home/solr/Event/conf
http://solrhostname:8983/solr/admin/collections?action=CREATE&name=Event&numShards=13&replicationFactor=3&maxShardsPerNode=10&instanceDir=hdfs://namenode/apps/solr/Event&config=hdfs://namenode/apps/solr/Event/solrconfig.xml&schema=hdfs://namenode/apps/solr/Event/managed-schema&dataDir=hdfs://namenode/apps/solr/Event/data&collection.configName=webconf

似乎问题在于斜杠,您是否可以尝试执行转义或其他操作,以改变solr.hdfs.home的值=hdfs://localhost:9000/solr 环境变量也请共享您面临问题的版本,以便我们可以复制安装在windows 10上的bugI-used Solr 7.4.0、Hadoop 2.7.6、,JDK 1.8.0µ你能在hadoop solr home的斜线附近试试P&C吗?我有时间也会试试。P&C代表什么?我试过了,但失败了。我的solrconfig.xml与您的solrconfig.xml只有两个不同之处:kerberos配置(我不使用它)和端口9000,而不是8020,但我认为它们不是导致错误的原因。我仍然收到错误:“索引4处的非法字符:hdfs://localhost:9000/solr/Event/core_node2/data尝试删除hdfs核心目录并重新创建集合。没有创建hdfs目录,因为SolrCore执行initUpdateLogDir和sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182)时出错抛出异常“java.nio.file.InvalidPathException:索引4处的非法字符:hdfs://localhost:9000/.....(你可以在我的问题中看到更多的堆栈跟踪)@dennis当我尝试时也遇到了同样的问题,但没有找到任何解决办法。我尝试了Ubuntu,它成功了。所以我认为问题在于操作系统。
sh /opt/lucidworks-hdpsearch/solr/server/scripts/cloud-scripts/zkcli.sh --zkhost hostname1.com,hostname2.com,hostname3.com:2181/solr -cmd upconfig --collection Event --confname webconf --solrhome /home/solr/Event/ --confdir /home/solr/Event/conf
http://solrhostname:8983/solr/admin/collections?action=CREATE&name=Event&numShards=13&replicationFactor=3&maxShardsPerNode=10&instanceDir=hdfs://namenode/apps/solr/Event&config=hdfs://namenode/apps/solr/Event/solrconfig.xml&schema=hdfs://namenode/apps/solr/Event/managed-schema&dataDir=hdfs://namenode/apps/solr/Event/data&collection.configName=webconf