solrcloud将索引数据写到hdfs

2019-03-27 01:05|来源: 网路

Running Solrcloud+Hdfs

 

SolrCloud客户端

 Solr启动脚本

SolrCloud+Hdfs模式的solr启动脚本与之前稍有差异,如下:

exec java $JVM_ARGS -Djetty.port=$1 -XX:MaxDirectMemorySize=5g -Dsolr.directoryFactory=HdfsDirectoryFactory -Dsolr.lock.type=hdfs -Dsolr.hdfs.home=/solrcloud/feed -Dsolr.hdfs.confdir=/home/deploy/solr-hdfs-client/hadoop-2.0.6-solr/etc/hadoop  -Dbootstrap_conf=true  -DnumShards=$SHARDS -DzkHost=$ZK_SERVERS -DzkClientTimeout=$ZK_TIMEOUT -Dsolr.solr.home=$BASE_DIR -jar $BASE_DIR/start.jar

红色字体为与普通的solrcloud集群的启动脚本差异的地方。

-XX:MaxDirectMemorySize=5g 为了提高写性能,设置的堆外内存。

  • -Dsolr.hdfs.home

指的是:solr索引在HDFS上存储的根目录

  • Dsolr.hdfs.confdir

指的是:solr操作HDFS集群的hadoop客户端配置文件的目录。下一节将主要介绍Hadoop客户端的配置。

solrconfig.xml

         directoryFactory需要调整成HdfsDirectoryFactory,并可以设置缓存等信息。

<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory">

        <str name="solr.hdfs.home">${solr.hdfs.home:}</str>

        <str name="solr.hdfs.confdir">${solr.hdfs.confdir:}</str>

        <bool name="solr.hdfs.blockcache.enabled">true</bool>

        <int name="solr.hdfs.blockcache.slab.count">1</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">true</bool>

        <bool name="solr.hdfs.nrtcachingdirectory.enable">true</bool>

        <int name="solr.hdfs.nrtcachingdirectory.maxmergesizemb">16</int>

        <int name="solr.hdfs.nrtcachingdirectory.maxcachedmb">64</int>

</directoryFactory>

 

Solr服务的Hadoop客户端

我们是将Hadoop服务器集群随便拷贝了一个节点放到/home/deploy/目录下,并新建了一个solr-hdfs-client目录,与其他应用(如:solr服务)的部署目录同级别。

      /home/deploy/

-| solr-hdfs-client

  • 客户端挂载

Solr的Hadoop客户端需要定义一个挂载文件:mountTable.xml

  在etc/hadoop目录下的目的是方便在core-site.xml中引用。

<configuration>

 

    <property>

        <name>fs.viewfs.mounttable.default.link./user</name>

        <value>hdfs://ns1/test</value>

    </property>

 

</configuration>

第一个启动的solr服务,挂载必须是/user,因为solr就找这个挂载名,否则会报错,如下:               

            

至于这个挂载链接具体的hdfs系统中是那个目录是随意的,比如我做的测试是test目录,实际项目中还是要起有实际意义的名字,我们的生产环境就是/user,因为solr在往hdfs里面写数据的时候会将solr进程的拥有者作为/user的下级目录,之后才是在“-Dsolr.hdfs.home”指定的目录,如:     

 

另外,我在集群的core-site.xml配置了/user挂载,这样集群在启动的时候就初始化了这个挂载,所以在第一个solr客户端挂载表中不指定/user也没关系,因为solr节点启动的时候就找集群中有没有/user这个挂载,后续solr节点启动过程就找到了,可以任意配置挂载。

我的测试两个分片的数据存储目录:

 

  • 客户端core-site.xml

其余都和其他的节点一样,只需在最上面,将上面说的挂载文件引入进来即可:

<xi:include href="mountTable.xml"/>

 

 

 


转自:http://www.cnblogs.com/requelqi/p/3740969

相关问答

更多
  • 调研了一下,发现索引文件的数据结构相当复杂,这个好像是每提交一次建索引,就会将以前已生成的索引重新组织,而且还会生成新文件,所以如果采用在HDFS中追加写索引文件,那工作量将相当大,必须清楚了解索引文件数据结构及索引文件关联,下面...
  • 正好在研究Solr 可以直接在Solr中Schema Brower中查看已经建立索引的字段,其实也就是配置的solr的字段映射文件 每次在往Solr中添加、修改数据时,solr都会根据映射配置文件建立索引;所以是先配置schema.xml文件,你修改完后,索引已经建了肯定不会修改,所以需要手动重建索引哦
  • 调研了一下,发现索引文件的数据结构相当复杂,这个好像是每提交一次建索引,就会将以前已生成的索引重新组织,而且还会生成新文件,所以如果采用在HDFS中追加写索引文件,那工作量将相当大,必须清楚了解索引文件数据结构及索引文件关联,下面有三篇对lucene索引结构的分析,我是没怎么看懂,有兴趣的可以看一下
  • 非常感觉您的回答。solr原理只是说了可以通过MR构建索引,但是如何通过MR批量构建索引(有简单的可以运行的例子吗?)我还是不太清楚,新手刚接触这方面,多多包涵!是只要在solr上配置hdfs路径就可以自己构建索引还是要自己写代码提交MR任务?直接通过MR从hdfs上读取数据构建索引和在hbase构建索引哪种方式好些?
  • Solr(主要)用于存储和搜索,Hadoop(主要)用于分布式处理。 他们解决不同的问题。 最常见的是使用Solr和HDFS来存储/加载其索引文件 ,以便使用HDFS集群中的现有功能,或者允许通过Solr搜索已处理的Hadoop结果 。 如果您在Google上进行一些搜索,您会发现很多用例,演示文稿和库,例如LucidWorks的Hadoop集成 , Solr + Hadoop或Hortonworks的索引以及在Apache Solr中搜索数据 。 Solr is (mainly) for storage ...
  • 如果有任何机会重新编制索引,只要这样做,这将是最好的(你必须处理两个单独的问题:a)从4.X迁移到6.0,以及b)从独立到SolrCloud ......这将是混乱)。 如果你不能重新索引: 是你所有的字段存储或有docValues =真? 如果是这样,您可以获取文档的原始内容。 阅读并使用solrj或一些脚本将它们编入索引。 如果没有,并且您有版本字段:请尝试手动将索引放入Solrcloud中。 不直接,但可能。 如果您没有版本字段,我认为将索引放在Solrcloud中是不可能的(尽管网络上的某些帖子会让 ...
  • 好吧,我终于能够为测试建立一个合适的云环境,简而言之,即使使用RAMDirectory,索引速度也是注定的。 我不知道索引速度是否与云中的关注者数量或集合数量相关,但是具有1个领导者2个跟随者结构和8个集合使索引速度慢4到5倍。 我能够在17分钟内为大约3.5M文档编制索引,而对于云中的每个实例具有相同的配置,我只能在17分钟内索引650K文档...我不确定如何加快SolrCloud索引速度和某种方式惊讶地看到我对云的期望被逐一摧毁,因为我在处理它时不断遇到新的错误和问题。 如果这也发生在任何其他设置上,我 ...
  • 我将尝试回答您的部分问题:SolrCloud确实在所有节点上编制索引,因此它会对副本产生性能影响。 这是由于“热复制”模型而不是您习惯的“冷复制”而完成的。 它解决了数据完整性问题以及群集上的实时搜索。 作为性能影响的代价,您可以获得一致的数据和更快的数据可用性。 实际上,您始终可以将数据拆分为分片(以额外硬件的价格),并具有相当的性能。 在任何一种情况下,由您决定SolrCloud是否适合您的需求。 您可以在没有云模型的情况下使用Solr 4,并像以前一样自行管理。 I'll try to answer ...