在 《Apache Solr 安装部署及索引创建》 文章中,我们搭建好一个单机版的 Solr 服务,并创建好一个名为 iteblog 的 core,iteblog 的索引数据是存放在 instanceDir
参数的 data 目录下。这会有以下几个问题:
- 如果索引数据很大,可能本地的文件夹无法存储
- 索引数据存放在本地,可能会导致索引数据丢失等
幸运的是,Solr 支持将索引和事务日志等文件写入到 HDFS 上,而且只需要通过简单地配置几个参数即可实现,Solr 为我们提供了三种方式来实现这种需求,下面跟我一起来学习。
在启动 Solr 的时候设定
这种方式通过运行 bin/solr
的时候加上相关参数,具体如下:
bin/solr start -Dsolr.directoryFactory=HdfsDirectoryFactory \ -Dsolr.lock.type=hdfs \ -Dsolr.data.dir=hdfs://iteblog-cluster/solr \ -Dsolr.hdfs.confdir=/home/iteblog/hadoop-conf
很显然,这种方式比较麻烦,不便于管理。
在 solr.in.sh 文件里面设定
solr.in.sh 文件里面可以设定 Solr 的很多环境变量,所以我们也可以在这里面设定索引存放路径的相关配置,具体如下:
SOLR_OPTS="$SOLR_OPTS -Dsolr.directoryFactory=HdfsDirectoryFactory -Dsolr.lock.type=hdfs -Dsolr.hdfs.home=hdfs://iteblog-cluster/solr -Dsolr.hdfs.confdir=/home/iteblog/hadoop-conf"
这种方式只需要设定一次,后面就可以不用修改,相对第一种方式维护起来很简便。
通过 solrconfig.xml 文件设定
我们知道,Solr 里面每个 Core/Collection 都有自己的 solrconfig.xml
配置文件,所以我们也可以在这里设置当前 Core/Collection 索引文件存放路径,具体如下:
我们在 solrconfig.xml
配置文件里面找到下面设置:
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
将上面的内容使用下的替换:
<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory"> <str name="solr.hdfs.home">hdfs://iteblog-cluster/solr</str> <str name="solr.hdfs.confdir">/home/iteblog/hadoop-conf</str> <str name="solr.lock.type">hdfs</str> </directoryFactory>
这种方式和前面的区别是:前面的设定是全局有效的,也就是所有的 Core/Collection 索引文件都将会存放到 HDFS 之上;而这种方式是针对单个 Core/Collection 的,所以只有当前 Core/Collection 的索引文件才会存放到 HDFS 之上。
如果你的集群启用了 Kerberos 权限认证,你需要额外添加下面的选项,以便支持 Kerberos 权限认证:
<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory"> ... <bool name="solr.hdfs.security.kerberos.enabled">true</bool> <str name="solr.hdfs.security.kerberos.keytabfile">/etc/krb5.keytab</str> <str name="solr.hdfs.security.kerberos.principal">solr/admin@KERBEROS.COM</str> </directoryFactory>
上面三种情况最后存放在 HDFS 上的目录如下:
[root@iteblog.com ~]# hadoop fs -du -h /solr 5.3 G /solr/collection1 5.6 G /solr/collection2 1.2M /solr/iteblog
也就是 $solr.hdfs.home/$Core name
。
SolrCloud 模式的设置和这里的类似,就不在介绍了。关于 Solr 将索引数据存放到 HDFS 上的更多参数请参见 Running Solr on HDFS。
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Apache Solr 将索引数据写入到 HDFS】(https://www.iteblog.com/archives/2396.html)