【定时将hbase的索引同步到solr的core,当同步失败时,回滚core】好记性不如烂笔头,我将工作中写的自动化脚本记录在此,供大家参考

2023-11-14

前言
  此脚本不包含core的创建,创建core请移步他处。
  本贴侧重core快照的创建,快照状态查询,core的删除,从快照恢复core。
  hbase到solr的同步不做为本贴的重点。

同步脚本syn_solr.sh内容:

#!/binbash

#定义core名称list
core_list=("core1-name_shard1_replica1" "core2-name_shard1_replica1")


#定义solr服务地址
solr_point="130.10.7.109:8983"
echo "【`date "+%Y-%m-%d %H:%M:%S"`】syn solr start"


#制作core快照
#
#/solr-backups目录是已经创建的hdfs存储目录
#目录创建命令是:
#   sudo -u hdfs hdfs dfs -mkdir /solr-backups
#   sudo -u hdfs hdfs dfs -chown sorl:solr /solr-backups
#   sudo -u hdfs hdfs dfs -chmod 777 /solr-backups
#

for core_name in "${core_list[@]}"
do
  curl http://${solr_point}/solr/${core_name}/replication?command=backup\&repository=hdfs\&location=/solr-backups/${core_name} > /dev/null 2>&1
done


#快照制作状态检查
#查询快照状态执行: curl http://${solr_point}/solr/${core_name}/replication?command=details
#每10秒查询一次,快照创建成功就结束查询,最大查询次数30次(我们的数据较大,创建快照
#要一两分钟,请根据你的实际情况修改查询等待时间和次数),如仍未完成就结束整个脚本。

num=0

for core in "${core_list[@]}"
do

  while [ true  ]
  do 
    sleep 10s 
    http_result_xml=$(curl http://${solr_point}/solr/${core}/replication?command=details)
    #echo "${http_result_xml}"
  
    detail_rightString=${http_result_xml#*\<str\ name=\"status\"\>}
    detail_delStatus=${detail_rightString%%<*}

    echo ${detail_delStatus}
    if [ "success" = "${detail_delStatus}" ]
    then
      echo "【`date "+%Y-%m-%d %H:%M:%S"`】快照 ${core} 制作完成。"
      break
    fi
   
    ((num+=1))
    if [ ${num} -eq 30 ]
      then
      echo "【`date "+%Y-%m-%d %H:%M:%S"`】快照 ${core} 制作失败"
      exit
    fi

  done
done

#删除core索引数据
#
echo "【`date "+%Y-%m-%d %H:%M:%S"`】开始删除cores"
#遍历coren,并删除core的数据
for core_name in "${core_list[@]}"
do
  #当删除请求的协议状态和删除结果状态都为0时,跳出删除循环。最多循环3次。
  num=0
  while [ ${num} -lt 3 ]
  do
    #发送删除请求,并将response赋值给resultString
    resultString=`curl -X post  http://${solr_point}/solr/${core_name}/update?wt=json \
                       -H Content-Type:text/xml --data '<add><delete><query>*:*</query></delete><commit/></add>'`
    #获取curl命令返回值
    curlStatus=$?
    #echo ${curlStatus}
    #截取response中json字符串的status值
    rightString=${resultString#*\"status\":}
    delStatus=${rightString%,\"QTime\":*}
    echo ${delStatus}
    #打印完整response的json
    echo ${resultString}
    if [[ ${curlStatus} == 0 && ${delStatus} == 0 ]]
    then
      echo "【`date "+%Y-%m-%d %H:%M:%S"`${core_name}删除成功"
      break
    fi
    let num+=1
    
    if [ ${num} -eq 3  ]
    then
      echo "【`date "+%Y-%m-%d %H:%M:%S"`】删除cores失败。"
      exit
    fi

  done
done


#执行同步命令
#将hbase的数据同步到solr的core(hbase的数据每天都增量更新,所以solr的core每天也要更新)
#
indexs=("core1-name" "core2-name")
morphlines_path="/root/hbase-indexer" 
for index in "${indexs[@]}"
do
  echo "【`date "+%Y-%m-%d %H:%M:%S"`】开始同步【${index}】"
  `nohup hadoop --config /etc/hadoop/conf jar /opt/cloudera/parcels/CDH/lib/hbase-solr/tools/hbase-indexer-mr-1.5-cdh5.16.1-job.jar \
          --conf /etc/hbase/conf/hbase-site.xml --hbase-indexer-file ${morphlines_path}/hbase-indexer/${index}/conf/morphline-hbase-mapper.xml \
          --morphline-file ${morphlines_path}/morphlines.conf --zk-host master:2181,slave1:2181,slave2:2181/solr \
          --collection ${index} --go-live --reducers 0 > /dev/null 2>&1 &`

done

#如果从hbase同步失败,从solr快照恢复core数据
#
 
num=0

while [ true ]
do
  #每分钟查询一次同步状态,如果同步完成就结束while循环。
  sleep 60s
  syn_result=`yarn application -list -appStates All | grep "HBaseMapReduceIndexerTool\/HBaseIndexerMapper" | sort -n -k 1.27r | head -2 | grep SUCCEEDED | wc -l`
  echo "已同步 [${syn_result}]"

  if [ ${syn_result} == 2 ]
  then
    echo "同步成功。"
    break
  fi

  ((num+=1))
  #如果15分钟后仍没有同步成功,就从快照恢复solr的core
  #
  if [ ${num} -eq 15 ]
    then
    echo "同步失败,开始回滚..."

    for i in "${indexs[@]}"
    do
      curl http://${solr_point}/solr/${i}_shard1_replica1/replication?command=restore\&location=/solr-backups/${i}_shard1_replica1\&repository=hdfs
    done
    echo "回滚结束。"
    break
  fi

done

echo "【`date "+%Y-%m-%d %H:%M:%S"`】syn solr end"

定时任务:
每天8点50开始同步,并在/var/log/syn_solr.log中记录同步日志。

[root@slave2 ~]# crontab -l
50 8 * * * bash /root/syn_solr.sh >> /var/log/syn_solr.log 2>&1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【定时将hbase的索引同步到solr的core,当同步失败时,回滚core】好记性不如烂笔头,我将工作中写的自动化脚本记录在此,供大家参考 的相关文章

  • 将多个前缀行过滤器设置为扫描仪 hbase java

    我想创建一台扫描仪 它可以为我提供带有 2 个前缀过滤器的结果例如 我想要其键以字符串 x 开头或以字符串 y 开头的所有行 目前我知道只能使用一个前缀 方法如下 scan setRowPrefixFilter prefixFiltet 在
  • Solr 4.0 中的 BaseTokenFilterFactory 去哪儿了?

    用于创建您自己的标记和字符过滤器的 Solr 文档说明如下 http wiki apache org solr AnalyzersTokenizersTokenFilters Specifying an Analyzer in the sc
  • 复杂的 SOLR 查询,包括 NOT 和 OR

    我对 SOLR 搜索有一些相当复杂的要求 我需要针对标记内容的数据库执行这些搜索 我需要首先过滤数据库以获取与我的过滤器标签匹配的结果 任何具有黑名单中的标签的结果都应被删除 除非它们也包含白名单中的标签 假设我想检索所有标记为 森林 或
  • 如何使用 Solr 索引 pdf 内容?

    我正在尝试使用 SolrJ 索引一些 pdf 文档 如下所述http wiki apache org solr ContentStreamUpdateRequestExample http wiki apache org solr Cont
  • SLF4J 日志记录到文件 vs. DB vs. Solr

    我需要一些关于 SLF4J 日志记录的建议 目前 我们正在为 Java Web 应用程序使用 SLF4J 日志记录 log4j 绑定 该应用程序使用简单的 ConsoleAppender 我们的下一步是研究可以保存日志的地方 我们的应用程序
  • openNLP 与 Solr 集成时出现异常

    我正在尝试将 openNLP 与 Solr 6 1 0 集成 我配置了架构和 solrconfig 文件 详细信息请参见 wiki 链接 https wiki apache org solr OpenNLP https wiki apach
  • Solr 您的意思是(拼写检查组件)

    我在我的应用程序中使用 solr 并集成了拼写检查组件 但我遇到了一些问题 第一的 当我输入一个用空格分隔的术语时 他们会给我每个术语的更正 Eg 水 gt 什么术语 但事实是watters 第二 当我输入一些带有错误术语的短语时 尽管其他
  • Solr PatternReplaceCharFilterFactory 未替换为指定模式

    所以我对 Solr 很陌生 但我尝试使用 PatternReplaceCharFilterFactory 对将存储的电话号码字符串进行一些预处理 这是该字段的配置
  • solr + haystack + django 我在哪里放置 schema.xml?

    我刚刚安装Solr and Haystack for a Django我正在做的项目 下列的this http docs haystacksearch org dev tutorial html Haystack教程 我创建了一个 sche
  • 如何使用 lucene 查询找到空的 Solr 文档字段

    我有一些这样的文件
  • Solr 不搜索整数?

    我目前正在使用 Solr 为电子商务网站开发搜索引擎 所以我在 schema xml 中得到这两个字段
  • simplexml_load_file 在 Solr 的 url 中带有 &(与号)

    我正在使用 Solr 并有以下查询 该查询在我的浏览器中运行良好 http www someipaddress com 8983 solr select q fq shopid 40 start 0 rows 18 fq manufactu
  • 如何使用 HBASE Shell 创建具有预分割和压缩或其他选项的表

    在 HBase shell 中 帮助文件向我们展示了几种允许的创建表的语法 create tableName NAME gt colFamily VERSIONS gt 5 create tableName NAME gt cf1 NAME
  • 在 Solr 更新中指定多值术语频率?

    我有一个包含多值字段的 Solr 模式 我正在 Solr 外部解析文档并使用更新索引http wiki apache org solr UpdateJSON http wiki apache org solr UpdateJSON 也可以看
  • 有没有推荐的与 Lucene 或 Solr 一起使用的爬虫工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何减少solr内存使用?

    我在我的应用程序中使用 solr 只有数百个文档 内存占用80M左右 如何减少 80M 并不多 事实上它几乎是最低限度 你不会比这个低很多 影响内存使用的一些因素 输入文档尺寸 多线程文档更新 缓存大小 分面查询 Sorting 参考 ht
  • 如何知道 Solr Optimize 何时完成?

    我正在使用 Solr php client 通过 php 与 Solr 进行通信 这段代码触发solr优化命令 solr gt optimize 请问有没有什么方法可以确定优化完成了 这都是因为我的网站上有一个管理页面 我每天必须手动优化
  • 使用 dismax 处理程序进行通配符搜索?

    我已成功索引文件 并且希望能够使用通配符进行搜索 我目前正在使用 dismaxRequestHandler QueryType dismax 进行搜索 以便我可以搜索查询的所有字段 像 computer 这样的常规搜索会返回结果 但 com
  • Solr 阿拉伯语

    我正在使用 Solr 来索引 3 种语言 阿拉伯语 法语和英语 的文档 我使用了这个 fieldType
  • Hadoop - 直接从 Mapper 写入 HBase

    我有一个 hadoop 作业 其输出应写入 HBase 我并不真正需要减速器 我想要插入的行类型是在映射器中确定的 如何使用 TableOutputFormat 来实现此目的 从所有示例中 我看到的假设是 reducer 是创建 Put 的

随机推荐

  • Unity PlayerSetting Android打包设置介绍

    Unity 版本 2018 3 0f2以下部分内容来自Unity文档和网上资料 如有错误 请在评论区指正 我看到后会进行改正和更新 Icon 后续更新 略 Resolution And Presentation 后续更新 略 Splash
  • python实现链表的旋转

    python实现链表的旋转 链表是一种常用的数据结构 实现起来也不难 但当我们需要将链表中的元素旋转时 就会有一些困难 本文介绍基于python语言的链表旋转实现方法 实现思路 链表旋转可以通过移动节点的位置来实现 我们可以找到需要旋转的位
  • 第二节 分支和循环语句

    第二节 分支和循环语句 目录 一 什么是语句 二 分支语句 选择结构 三 循环语句 本章重点 分支语句 if switch 循环语句 while for do while goto语句 一 什么是语句 C语句可分为以下五类 表达式语句 函数
  • STM32关于编译不通过,错误提示 Error: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o

    今天正式开始学习stm32的开发板 在学习的时候 发现连例程都不能够通过编译 然后测试了好久 发现都是这种错误 然后上网查找到了答案 找到了解决的方法 这里来记录一下 转载来自 http blog sina com cn s blog 54
  • echarts在data里定义的formatter函数失效问题

    在echarts官方运行的时候是生效的 拿到项目里循环之后就失效了 后来井排查发现 是因为循环的时候 使用了JSON stringify this eqpOption 函数 导致 echarts的option里默认itemStyle的方法都
  • 构建可扩展的应用:六边形架构详解与实践

    面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转clo
  • 第十届蓝桥杯省赛C++B组 完全二叉树的权值

    试题 G 完全二叉树的权值 时间限制 1 0s 内存限制 256 0MB 本题总分 20 分 问题描述 给定一棵包含 N 个节点的完全二叉树 树上每个节点都有一个权值 按从上到下 从左到右的顺序依次是 A1 A2 AN 如下图所示 现在小明
  • 机器学习好伙伴之scikit-learn的使用——学习曲线

    机器学习好伙伴之scikit learn的使用 学习曲线 什么是学习曲线 sklearn中学习曲线的实现 应用示例 什么是学习曲线呢 其内容主要包含当训练量增加时 loss的变化情况 什么是学习曲线 学习曲线主要反应的是学习的一个过程 常用
  • 求过审~~~

    我要过审 纯水
  • 微信小程序openid取不到,总是undefined

    今天在做微信小程序开发的时候 遇到了这样的问题 微信小程序官网的坑是少了data 所以获取不到 是undefined 但我加了data还是undefined 解决方法是 遍历res data这个对象数组 看回送的错误码及错误是什么 我的错误
  • C++成员函数模板特化问题

    C 成员函数模板特化问题 1 类似代码写法 include
  • Java中的常量池

    一 在Java中有那些常量池 谈到常量池 在Java体系中 共用四种常量池 分别是字符串常量池 Class常量池和运行时常量池 JAVA 基本类型的封装类及对应常量池 二 字符串常量池 在JVM中 为了减少相同的字符串的重复创建 为了达到节
  • 手写python实现梯度下降算法(base问题:多元线性回归)

    手写python实现梯度下降算法 因为课程设计的原因 接触了很多和机器学习相关的事情 在学习的时候发现 机器学习如果只是听不写代码基本什么都学习不到 于是自己利用python手写了大部分的常见的基础的算法 很有趣呢 慢慢更新咯 文章目录 手
  • c语言中y=0x20什么意思,ASCII码0x20之前的码分别是什么意义?

    ASCII码0x20之前的码分别是什么意义 ascii码0x20之前的码分别是什么意义 c 语言 ascii码表中的前32个都是些控制字符 nul 0 0000 0x00 sp 32 0040 0x20 64 0100 0x40 96 01
  • 05 Django工程创建、注册子应用及ORM模型

    一 创建django工程 1 创建 cd Desktop test django admin startproject name 例如 django admin startproject testmanager cd testmanager
  • java并发包:生产者消费者模式

    本文转载至 http blog csdn net a910626 article details 51900974 生产者消费者模式是一个经典的多线程设计模式 它为多线程间的协作提供了良好的解决方案 在生产者消费者模式中 通常有两类线程 即
  • Learn_C++单词

    nomenclature Deprecated cubbyholes render inadvertently polygons truncation decrement ballistic refutation exotic oversi
  • linux网络编程一:epoll

    简介 一提到linux高性能服务器编程 epoll就是绕不开的话题 当前网络库在linux上实现也主要是以epoll为主 epoll的主要优点有 当检查大量的文件描述符时 epoll的性能比select和poll要高很多 epoll 既支持
  • mongoTemplate操作MongoDB排序

    解决项目中遇到的排序问题 Mark一下 Override public List
  • 【定时将hbase的索引同步到solr的core,当同步失败时,回滚core】好记性不如烂笔头,我将工作中写的自动化脚本记录在此,供大家参考

    前言 此脚本不包含core的创建 创建core请移步他处 本贴侧重core快照的创建 快照状态查询 core的删除 从快照恢复core hbase到solr的同步不做为本贴的重点 同步脚本syn solr sh内容 binbash 定义co