solrcloud将索引数据写到hdfs

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"/>

 

 

 

posted on 2014-05-21 12:12  里克尔奇  阅读(1338)  评论(0编辑  收藏  举报