百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

lily+Solr 原理与配置 solr怎么配置

suiw9 2024-10-31 16:07 17 浏览 0 评论

概述

  • 为什么要引入lily和solr

在Hbase中,表的RowKey 按照字典排序, 单一的通过RowKey检索数据的方式,不再满足更多的需求,查询成为Hbase的瓶颈,希望像Sql一样快速检索数据,Hbase之前定位的是大表的存储,要进行这样的查询,往往是要通过类似Hive、Pig等系统进行全表的MapReduce计算,这种方式既浪费了机器的计算资源,又因高延迟使得应用黯然失色,于是HBase Secondary Indexing的方案出现了。

  • SolrSolr是一个独立的企业级搜索应用服务器,是Apache Lucene项目的开源企业搜索平台,其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr 4还增加了NoSQL支持,以及基于Zookeeper的分布式扩展功能SolrCloud。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎,Solr可以高亮显示搜索结果,通过索引复制来提高可用,性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面。
  • Key-Value Store Indexer

这个组件非常关键,是Hbase到Solr生成索引的中间工具,在CDH5.3.2中的Key-Value Indexer使用的是Lily HBase Indexer 服务,Lily HBase Indexer是一款灵活的、可扩展的、高容错的、事务性的,并且近实时的处理HBase列索引数据的分布式服务软件。它是NGDATA公司开发的Lily系统的一部分,已开放源代码,Lily HBase Indexer使用SolrCloud来存储HBase的索引数据,当HBase执行写入、更新或删除操作时,Indexer通过HBase的replication功能来把这些操作抽象成一系列的Event事件,并用来保证写入Solr中的HBase索引数据的一致性,并且Indexer支持用户自定义的抽取,转换规则来索引HBase列数据。Solr搜索结果会包含用户自定义的columnfamily:qualifier字段结果,这样应用程序就可以直接访问HBase的列数据。

  • hbase+lily+solr架构

服务配置

hbase配置文件搜索index,启用编制索引。

启用复制

solr

  • collection创建脚本
# 用来创建solr collection
cat > createcollection.sh << EOF
# zk节点
ZK="worker-1"
# 要创建的collection名称
COLLECTION="hainiu"
BASE=`pwd`
# 分片数
SHARD=1
# 副本数
REPLICA=1
echo "create solr collection"
rm -rf tmp/*
# 生成配置文件
solrctl --zk $ZK:2181/solr instancedir --generate tmp/${COLLECTION}_configs
# 上传配置文件到zk
solrctl --zk $ZK:2181/solr instancedir --create $COLLECTION tmp/${COLLECTION}_configs
echo "如果collection名称重复会报configuration重复错误,更换collection名称"
# solr创建collection
solrctl --zk $ZK:2181/solr collection --create $COLLECTION -s $SHARD -r $REPLICA
echo "如果collection名称重复会报configuration重复错误,更换collection名称"
# 查看collection
solrctl --zk $ZK:2181/solr collection --list
EOF
  • 执行创建脚本
sh createcollection.sh
  • solr web验证
  • solr创建field字段

使用postman或者curl命令操作solr api创建字段

方式一postman:

方式二curl:

# 非安全模式
curl -X POST -H 'Content-Type:application/json' -d '{
    "add-field":{
        "name":"content",
        "type":"text_en",
        "stored":true,
        "indexed":true
    }
}' http://worker-3:8983/solr/hainiu/schema
# 安全模式 用户名和密码可以随意输入
curl --negotiate -u xiniu:xiniu -X POST -H 'Content-Type:application/json' -d '{
    "add-field":{
        "name":"content",
        "type":"text_en",
        "stored":true,
        "indexed":true
    }
}' http://worker-3:8983/solr/hainiu0602/schema

lily hbase indexer

mkdir -p /root/solr-hbase/conf
cd /root/solr-hbase
  • 准备morphline配置文件(解读)
# 准备morphline配置文件
morphlines : [
  {
    # morphline配置id,与indexer配置文件中的morphlineID一致
    id : morphline1 
    importCommands : ["org.kitesdk.morphline.**", "com.ngdata.**"]
    commands : [
    {
        extractHBaseCells {
          # hbase字段映射
          mappings : [
            {
              # textinfo为hbase对应的列族,content为hbase对应的列名
              inputColumn : "textinfo:content"
              # 输出列,对应solr中的field字段
              outputField : "content"
              # solr中字段类型
              type : "string"
              source : value
            }]
        }
    }
    ]
  }
]

正式配置文件

cat > conf/morphlines.conf << EOF
morphlines : [
  {
    id : morphline1 
    importCommands : ["org.kitesdk.morphline.**", "com.ngdata.**"]
    commands : [
    {
        extractHBaseCells {
          mappings : [
            {
              inputColumn : "textinfo:content"
              outputField : "content"
              type : "string"
              source : value
            }]
        }
    }
    ]
  }
]
EOF
  • 准备indexer配置文件
cat > conf/indexer-config.xml << EOF
<?xml version="1.0"?>
<indexer table="TextHbase" mapper="com.ngdata.hbaseindexer.morphline.MorphlineResultToSolrMapper" mapping-type="row" >
    <!-- The relative or absolute path on the local file system to the morphline configuration file. -->
    <!-- Use relative path "morphlines.conf" for morphlines managed by Cloudera Manager -->
    <param name="morphlineFile" value="/root/solr-hbase/conf/morphlines.conf"/>
    <!-- The optional morphlineId identifies a morphline if there are multiple morphlines in morphlines.conf -->
    <!-- <param name="morphlineId" value="morphline1"/> -->
</indexer>
EOF
  • 执行lily hbase indexer刷新脚本
vim hbase2solr.sh
# 填入如下内容
COLLECTION='hainiu'
ZK='worker-1'
echo 'Delete previous docs...'
solrctl collection --deletedocs $COLLECTION
echo 'Lily HBase MapReduce indexing...'
config="/etc/hadoop/conf.cloudera.yarn"
parcel="/opt/cloudera/parcels/CDH"
jar="$parcel/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar"
hbase_conf="/etc/hbase/conf/hbase-site.xml"
opts="'mapred.child.java.opts=-Xmx1024m'"
log4j="$parcel/share/doc/search*/examples/solr-nrt/log4j.properties"
zk="$ZK:2181/solr"
# libjars="lib/lucene-analyzers-smartcn-4.10.3-cdh5.14.2.jar"
# export HADOOP_OPTS="-Djava.security.auth.login.config=conf/jaas.conf"
hadoop --config $config jar $jar --conf $hbase_conf -D $opts --log4j $log4j --hbase-indexer-file conf/indexer-config.xml --verbose --go-live --zk-host $zk --collection $COLLECTION
  • 安全模式执行lily hbase indexer刷新脚本

创建jaas.conf文件,填写如下内容

mkdir -p conf/jaas.conf
Client {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab="/root/solr-hbase/solr.keytab"
  storeKey=true
  useTicketCache=false
  principal="solr@HAINIU.COM";
};
vim hbase2solr.sh
# 填入如下内容
COLLECTION='hainiu'
ZK='worker-1'
echo 'Delete previous docs...'
solrctl collection --deletedocs $COLLECTION
echo 'Lily HBase MapReduce indexing...'
config="/etc/hadoop/conf.cloudera.yarn"
parcel="/opt/cloudera/parcels/CDH"
jar="$parcel/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar"
hbase_conf="/etc/hbase/conf/hbase-site.xml"
opts="'mapred.child.java.opts=-Xmx1024m'"
log4j="$parcel/share/doc/search*/examples/solr-nrt/log4j.properties"
zk="$ZK:2181/solr"
# libjars="lib/lucene-analyzers-smartcn-4.10.3-cdh5.14.2.jar"
export HADOOP_OPTS="-Djava.security.auth.login.config=conf/jaas.conf"
hadoop --config $config jar $jar --conf $hbase_conf -D $opts --log4j $log4j --hbase-indexer-file conf/indexer-config.xml --verbose --go-live --zk-host $zk --collection $COLLECTION
  • 执行hbase2solr.sh脚本
sh hbase2solr.sh
  • solr web验证数据

海汼部落原创文章,原文链接:(http://hainiubl.com/topics/75587)

相关推荐

俄罗斯的 HTTPS 也要被废了?(俄罗斯网站关闭)

发布该推文的ScottHelme是一名黑客,SecurityHeaders和ReportUri的创始人、Pluralsight作者、BBC常驻黑客。他表示,CAs现在似乎正在停止为俄罗斯域名颁发...

如何强制所有流量使用 HTTPS一网上用户

如何强制所有流量使用HTTPS一网上用户使用.htaccess强制流量到https的最常见方法可能是使用.htaccess重定向请求。.htaccess是一个简单的文本文件,简称为“.h...

https和http的区别(https和http有何区别)

“HTTPS和HTTP都是数据传输的应用层协议,区别在于HTTPS比HTTP安全”。区别在哪里,我们接着往下看:...

快码住!带你十分钟搞懂HTTP与HTTPS协议及请求的区别

什么是协议?网络协议是计算机之间为了实现网络通信从而达成的一种“约定”或“规则”,正是因为这个“规则”的存在,不同厂商的生产设备、及不同操作系统组成的计算机之间,才可以实现通信。简单来说,计算机与网络...

简述HTTPS工作原理(简述https原理,以及与http的区别)

https是在http协议的基础上加了一层SSL(由网景公司开发),加密由ssl实现,它的目的是为用户提供对网站服务器的身份认证(需要CA),以至于保护交换数据的隐私和完整性,原理如图示。1、客户端发...

21、HTTPS 有几次握手和挥手?HTTPS 的原理什么是(高薪 常问)

HTTPS是3次握手和4次挥手,和HTTP是一样的。HTTPS的原理...

一次安全可靠的通信——HTTPS原理

为什么HTTPS协议就比HTTP安全呢?一次安全可靠的通信应该包含什么东西呢,这篇文章我会尝试讲清楚这些细节。Alice与Bob的通信...

为什么有的网站没有使用https(为什么有的网站点不开)

有的网站没有使用HTTPS的原因可能涉及多个方面,以下是.com、.top域名的一些见解:服务器性能限制:HTTPS使用公钥加密和私钥解密技术,这要求服务器具备足够的计算能力来处理加解密操作。如果服务...

HTTPS是什么?加密原理和证书。SSL/TLS握手过程

秘钥的产生过程非对称加密...

图解HTTPS「转」(图解http 完整版 彩色版 pdf)

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。...

HTTP 和 HTTPS 有何不同?一文带你全面了解

随着互联网时代的高速发展,Web服务器和客户端之间的安全通信需求也越来越高。HTTP和HTTPS是两种广泛使用的Web通信协议。本文将介绍HTTP和HTTPS的区别,并探讨为什么HTTPS已成为We...

HTTP与HTTPS的区别,详细介绍(http与https有什么区别)

HTTP与HTTPS介绍超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的...

一文让你轻松掌握 HTTPS(https详解)

一文让你轻松掌握HTTPS原文作者:UC国际研发泽原写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原创与翻译。...

如何在Spring Boot应用程序上启用HTTPS?

HTTPS是HTTP的安全版本,旨在提供传输层安全性(TLS)[安全套接字层(SSL)的后继产品],这是地址栏中的挂锁图标,用于在Web服务器和浏览器之间建立加密连接。HTTPS加密每个数据包以安全方...

一文彻底搞明白Http以及Https(http0)

早期以信息发布为主的Web1.0时代,HTTP已可以满足绝大部分需要。证书费用、服务器的计算资源都比较昂贵,作为HTTP安全扩展的HTTPS,通常只应用在登录、交易等少数环境中。但随着越来越多的重要...

取消回复欢迎 发表评论: