欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:961
  2. 浏览总数:11,461,181
  3. 评论:3870
  4. 分类目录:103 个
  5. 注册用户数:5832
  6. 最后更新:2018年10月17日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

Apache Solr 将索引数据写入到 HDFS

《Apache Solr 安装部署及索引创建》 文章中,我们搭建好一个单机版的 Solr 服务,并创建好一个名为 iteblog 的 core,iteblog 的索引数据是存放在 instanceDir 参数的 data 目录下。这会有以下几个问题:

  • 如果索引数据很大,可能本地的文件夹无法存储
  • 索引数据存放在本地,可能会导致索引数据丢失等

幸运的是,Solr 支持将索引和事务日志等文件写入到 HDFS 上,而且只需要通过简单地配置几个参数即可实现,Solr 为我们提供了三种方式来实现这种需求,下面跟我一起来学习。

使用 Apache Solr 检索数据
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop

在启动 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

本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【Apache Solr 将索引数据写入到 HDFS】(https://www.iteblog.com/archives/2396.html)
喜欢 (4)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!