SolrCloud存储数据于HDFS的方法

2023-12-21 17:18

本文主要是介绍SolrCloud存储数据于HDFS的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 概述

  solrCloud数据存储在hdfs上的方法有两种,一是配置solr.in.sh脚本文件,比较简单的一种方式;二是配置solrconfig.xml配置文件, 比较繁琐点,需要更新到zookeeper上。

  说明:solrcloud部署是按照https://www.cnblogs.com/swordfall/p/11967385.html “Ranger安装部署 - solr安装”进行安装的,故本博文也是在此基础上进行hdfs相关配置的

2. 配置solr.in.sh文件

2.1. 索引数据存储在非HA的hdfs上

配置solr.in.sh文件,该文件位于/opt/app/ranger-solr-8.3.0-cloud/ranger_audit_server/scripts,修改内容为:

$ vim solr.in.sh
SOLR_OPTS="$SOLR_OPTS \
-Dsolr.directoryFactory=HdfsDirectoryFactory \
-Dsolr.lock.type=hdfs \
-Dsolr.hdfs.home=hdfs://bridge1:9000/solr"

 

解析:

  • solr.directoryFactory=HdfsDirectoryFactory 为固定配置;
  • solr.lock.type=hdfs 为固定配置;
  • solr.hdfs.home=hdfs://bridge1:9000/solr 为指定solr的索引数据在hdfs上的路径。

2.2. 索引数据存储在HA的hdfs上

配置solr.in.sh文件,该文件位于/opt/app/ranger-solr-8.3.0-cloud/ranger_audit_server/scripts,修改内容为:

$ vim solr.in.sh
SOLR_OPTS="$SOLR_OPTS \
-Dsolr.directoryFactory=HdfsDirectoryFactory \
-Dsolr.lock.type=hdfs \
-Dsolr.hdfs.confdir=/opt/app/hadoop-2.7.5-ha-multi/etc/hadoop \
-Dsolr.hdfs.home=hdfs://bridge/solr"

 

解析:

  • solr.hdfs.confdir=/opt/app/hadoop-2.7.5-ha-multi/etc/hadoop 为hdfs的ha配置路径;
  • solr.hdfs.home=hdfs://bridge/solr 为指定solr的索引数据在hdfs上的路径, bridge为hdfs的ha名。

3. 配置solrconfig.xml文件

3.1. solrconfig.xml配置在非HA与HA的hdfs上

3.1.1. 索引数据存储在非HA的hdfs上

配置solrconfig.xml文件,修改配置文件内容如下:

<dataDir>${solr.data.dir:}</dataDir><directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory"><str name="solr.hdfs.home">hdfs://bridge1:8020/solr</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">192</int>
</directoryFactory><lockType>${solr.lock.type:hdfs}</lockType>

 

解析:

  • ${solr.data.dir:} 为solr的索引数据存储的路径,一般为solr.hdfs.home的路径下面,如hdfs://bridge1:8020/solr/data,这种只适合集合的分片数量为1,即SHARDS,当分片为大于1的时候,将会报错,错误如下:
"192.168.1.11:6083_solr":"org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException:
Error from server at http://192.168.1.11:6083/solr: 
Error CREATEing SolrCore 'ranger_audits_shard1_replica_n1': Unable to create core [ranger_audits_shard1_replica_n1] 
Caused by: /solr/data/index/write.lock for client 192.168.1.11 already exists\n\tat 
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:2584)\n\tat 
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2471)\n\tat 
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2355)\n\tat 
org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:624)\n\tat 
org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create(ClientNamenodeProtocolServerSideTranslatorPB.java:398)\n\tat 
org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)\n\tat
org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)\n\tat org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982)\n\tat org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2217)\n\tat org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2213)\n\tat java.security.AccessController.doPrivileged(Native Method)\n\tat javax.security.auth.Subject.doAs(Subject.java:422)\n\tat org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1754)\n\tat org.apache.hadoop.ipc.Server$Handler.run(Server.java:2213)\n"

   为了解决上述错误,建议${solr.data.dir:}默认为空,不填。

  • solr.hdfs.home为solr的存储目录
  • solr.lock.type为solr的类型,指定为hdfs

3.1.2.  索引数据存储在HA的hdfs上

配置solrconfig.xml文件,修改配置文件内容如下:

<dataDir>${solr.data.dir:}</dataDir><directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory">
<str name="solr.hdfs.home">hdfs://bridge1:8020/solr</str>
<str name="solr.hdfs.confdir">/opt/app/hadoop-2.7.5-ha-multi/etc/hadoop</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">192</int>
</directoryFactory><lockType>${solr.lock.type:hdfs}</lockType>

 

解析:与非HA模式的配置的差别在于solr.hdfs.confdir

  • solr.hdfs.confdir为指定hdfs的配置路径

3.2. solrconfig.xml文件更新到zookeeper上

solrconfig.xml在本地机器修改,对solr不生效,只有更新到zookeeper上面才生效。这里有个更新脚本add_ranger_audits_conf_to_zk.sh,脚本路径位于/opt/app/ranger-solr-8.3.0-cloud/ranger_audit_server/scripts,如下:

function usage {echo "Error: The following properties need to be set in the script SOLR_ZK, SOLR_INSTALL_DIR and SOLR_RANGER_HOME"exit 1
}JAVA_HOME=/usr/lib/java/jdk1.8.0_151
SOLR_USER=solr
SOLR_ZK=bridge1:2181,bridge2:2181,bridge3:2181/ranger_audits
SOLR_INSTALL_DIR=/opt/app/ranger-solr-8.3.0-cloud
SOLR_RANGER_HOME=/opt/app/ranger-solr-8.3.0-cloud/ranger_audit_serverif [ "`whoami`" != "$SOLR_USER" ]; thenif [ -w /etc/passwd ]; thenecho "Running this script as $SOLR_USER..."su $SOLR_USER $0elseecho "ERROR: You need to run this script $0 as user $SOLR_USER. You are currently running it as `whoami`"fiexit 1
fiif [ "$SOLR_ZK" = "" ]; thenusage
fiif [ "$SOLR_INSTALL_DIR" = "" ]; thenusage
fiif [ "$SOLR_RANGER_HOME" = "" ]; thenusage
fiSOLR_RANGER_CONFIG_NAME=ranger_audits
SOLR_RANGER_CONFIG_LOCAL_PATH=${SOLR_RANGER_HOME}/conf
ZK_CLI=$SOLR_INSTALL_DIR/server/scripts/cloud-scripts/zkcli.shif [ ! -x $ZK_CLI ]; thenecho "Error: $ZK_CLI is not found or you don't have permission to execute it."exit 1
fi
set -x
$ZK_CLI -cmd upconfig -zkhost $SOLR_ZK -confname $SOLR_RANGER_CONFIG_NAME -confdir $SOLR_RANGER_CONFIG_LOCAL_PATH

 

解析:

  • JAVA_HOME设置JAVA_HOME路径
  • SOLR_USER solr用户
  • SOLR_ZK solr关联的zookeeper
  • SOLR_INSTALL_DIR solr安装目录
  • SOLR_RANGER_HOME solr关于ranger的安装目录
  • SOLR_RANGER_CONFIG_NAME solr的ranger集合名
  • SOLR_RANGER_CONFIG_LOCAL_PATH solrconfig.xml配置文件的路径
  • ZK_CLI zk_cli的路径

 

执行脚本:

$ pwd
/opt/app/ranger-solr-8.3.0-cloud/ranger_audit_server/scripts
$ ./add_ranger_audits_conf_to_zk.sh

4. solr集合创建脚本

create_ranger_audits_collection.sh,文件位于/opt/app/ranger-solr-8.3.0-cloud/ranger_audit_server/scripts,如下:

SOLR_HOST_URL=http://`hostname -f`:6083
SOLR_ZK=bridge1:2181,bridge2:2181,bridge3:2181/ranger_audits
SOLR_INSTALL_DIR=/opt/app/ranger-solr-8.3.0-cloud
SHARDS=2
REPLICATION=1CONF_NAME=ranger_audits
COLLECTION_NAME=ranger_auditswhich curl 2>&1 > /dev/null
if [ $? -ne 0 ]; thenecho "curl is not found. Please install it for creating the collection"exit 1
fiset -x
curl --negotiate -u : "${SOLR_HOST_URL}/solr/admin/collections?action=CREATE&name=${COLLECTION_NAME}&numShards=${SHARDS}&replicationFactor=${REPLICATION}&collection.configName=$CONF_NAME&maxShardsPerNode=100"

 

这里建议:由于数据存储在hdfs上,hdfs已有副本机制。故solr的副本REPLICATION设置为1,避免冗余。

解析:

  • SHARDS 分片根据部署的机器数量配置

5. solrconfig.xml文件是否更新成功检测

登录solr admin的网址,查看solr状态,如下,则成功将存储数据转移到hdfs上。

总结

【参考资料】

https://www.jianshu.com/p/026b5641786c Solr7.3 Cloud On HDFS搭建

https://lucene.apache.org/solr/guide/7_3/running-solr-on-hdfs.html

这篇关于SolrCloud存储数据于HDFS的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520843

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi