文件名称:
lucene + hadoop 分布式搜索运行框架 Nut 1.0a8
开发工具:
文件大小: 149kb
下载次数: 0
上传时间: 2019-07-29
详细说明:NULL
博文链接:https://catastiger.iteye.com/blog/811985删除和添加步骤可按不同定吋策略来实现。
用户
发起请求
排序结
果
负载均衡器
返回排序结果
Nut cache
排序结果
Nut client
Nut dB
搜索条:文档ids
n client 1
O C000 0
Client m
Key: value
返叫结果
返回
返回分结果
Nut search
Zookeeper服务器状态管理
sg 1
sg 2
oc。)0。
sg h
1
Search group 1
Search group h
运行中搜索服务器组
备用中搜索服务器组(可选)
s1
S2
sn
B 1
B2
Bi
索
索引分发
Nut Index
MR 1
MR 2
MR P
5、 Zookeeper服务器状态管理策略
Zookeeper服务器状态管理
Sg 1
Sg 2
run
lock
bak
Search group 1
运行中搜索服务器组
备用中搜索服务器组
s1
Sn
B 1
Bi
在架构设计上通过使用多组搜索服务器可以支持每秒处理100万个搜索请求。
每组搜索服务器能处理的搜索请求数在1万—1万5千之间。如果使用100组搜索服务器,理
论上每秒可处理100万个搜索请求。
假如每组搜索服务器有100份索引放在100台正在运行屮搜索服务器(run)上,那么将索引按
照如下的方式放在备用中搜索服务器(bak)上: index1, index2, index3, index4, index
5, index 6, index 7, index 8, index 9, index 1OjX4EB 1 E, index 6, index 7, index 8, index
9, index10, index11, index12, index13, index1, index15放在B2上。。。。。。 index
96, index 97, index 98, index 99, index 100 index 5 index 4, index 3. index 2 index 1
放在最后一台备用搜索服务器上。那么每份索引会存在3台机器中(1份正在运行中,2份备
份中)
尽管这样设训每份索引会存在3台札器中,仍然不是绝对安仝的。假如运行中的 index
1, index2, index3同时宕机的话,那么就会有一份索引搜索服务无法正确启用,这样设计
作者认为是在安全性和机器资源两者之间一个比较适合的方案
备用中的搜索服务器会定时检查运行中搜索服务器的状态。一旦发现与自己索引对应的服
冬器宕机就会向lock申请分布式锁,得到分布式锁的服务器就将自己加入到运行中搜索服
务器组,同时从备用搜索服务器组中删除自己,并停止运行中搜索服务器检查服务。
为能够更快速的得到搜索结果,设计上将搜索服务器分优先等级。通常是将最新的数据放
在一台或几台内存搜索服务器上ε通常情况下前几页数据能在这几台搜索服务器甲搜索到。
如果在这几台搜索服务器上没有数据时再向其他旧数据搜索服务器上搜索。
优先搜索等级的逻辑是这样的:9最大为搜索全部服务器并且9不能作为 level标识。当搜索
等级1eve为1,搜索优先级为1的服务器,当leve1为2时搜索优先级为1和2的服务器,依此
类推。
6、web.xm1配置
!—-启动 zookeeper连接检查-〉
Kservlet-name >ZooKeeperInitServletnut nianzai servlet ZooKeeper lnitServlet/servlet-classy
K/servlet>
!--服务器状态显示->
servlet
Kservlet-classnut. nianzai servlet. StatusServlet/ servlet-class>
servlet>
Kservlet-mappin
status servlet/servlet-name
Kurl-pattern>/status. cgi
7、搜索插件
a、通过实现 Queryplugin接口来实现自定义查询功能
public class ExampleQuery Plugin implements QueryPlugin
( Override
米米
将自己要实现的查询功能在这实现
public Query query(String keyword) throws Exception
Analyzer analyzer new ChineseAnalyzer o
QueryParser parserl new QueryParser(Version. LUCLNE 30, title", analyzer
QueryParser parser2= new QueryParser(Version. LUCENE 30, descs", analyzer)
Query query1= parser parse(keyword)
query1. setBoost(1. 2f)
Query query2- parser2 parse(keyword)
query2. setBoost(0.8f)
BooleanQuery bq= new Boole
bg. add (query 1, Boolean Clause Occur MUST)
bg. add (query 2, BooleanClause Occur SHOULD)
return b
Override
米水
实现自己的排序功能
public Sort sort O
Sort sort=new Sort(new SortField("reviews", SortField INT, true))
return sort
Override
实现自己的fi1ter功能
public Filter filter
return null
b、配置plug
rties文件
#自定义査询插件名称-自定义查询插件实现类名
basicQuery=nut nianzai plugin. ExampleQueryPlugin
C、将自定义杳询插件和 plugin. properties打包生成 nut-plugir.jar部署在每台服务的
1ib目录中
8、索引插件
a、通过实现 IndexPlugin接凵米实现自定义生成索引功能
public class example Inde plugin implement s Indexplugin
private static Analyzer analyzer new ChineseAnalyzer o
0
erroe
public void create(File file, Iterable values
try
IndexWriter index writer new
IndexWriter(NIoFSDirectory open(file), analyzer, true, IndexWriter. MaxFieldLength. UNLIMITED)
indexWriter. setRAMBufferSizeMB(256)
indexWriter. setUse CompoundFile(false
Tor(Text str: values
Document doc new DocumentO
String
[] ss=str toString(. spl
doc. add (new Field(id, ss[ol, Field. Store. YES, Field Index. NOT ANALYZED))
doc. add (new Field(title", ss[ll, Field. Store. NO, Field. Index. ANALYZED))
doc. add (new Field(descs". ss[21, Field. Store. NO, Field. Index. ANALYZED))
doc. add(new Field( reviews", ssL3, Field. Store. YES, Field Index NOT ANALYZED))
indexWriter. addDocument. (dac)
indexWriter optimize o
indexWriter close o
catch(Exception e)
e printstackTrace o
Override
publ ic void merge (directory[] dirs, Directory local WorkingDir) throws TOException
IndexWriter writer =new Index Writer(local WorkingDir, analyzer
true, IndexWriter. MaxFieldlength UNLIMITED
writer. setRAMBufferSizeMB(256)
writer. setUse CompoundFile(false
riter. addIndexesNoOpLimize(dirs)
writer optimize
writer. close o
Override
public void delete directory dir, String ids) throws IOException
IndexWriter writer new
IndexWriter(dir, analyzer, false, IndexWriter. MaxFieldLength UNLIMITED
writer. deleteDocuments (NutUtil getTerms (ids)
writer. close o
b、配置 hadoop. propertles文件
indexplugin=nut nianzai plugin. Example IndexPlugin
c、将自定义建索引插件和 hadoop. properties文件打包成nut- index.jar放在 hadoop环境
屮运行
9、 HBase数据插入插件
a、通过实现 HBaseplugin接凵来实现自定义插入数据功能
public class exampleHBaseplugin implement s HBaseplugin
override
public Put insert(Text value)
String[] ss=value toString. split(<, >>
Putput new Put(Bytes. toBytes(Integer parseInt(sslo]))
out. add(Bytes. toBytes(title), Bytes. tobytes("), Bytes. toBytes (ss[l]))
put. add(Bytes. toBytes(descs"), Bytes. toBytes("), Bytes. toBytes(ss[ 21)
put. add(Bytes. toBytes("reviews ) Bytes toBytes(), Bytes. toBytes(ss[3]))
b、配置 hadoop. properties文件
indexplugin-nut. nianzai plugin. ExamplelIBasePlugin
c、将自定义建索引插件和 hadoopυ. properties文件打包成 nut-hbase.jar放在hado环境
中运行
0、测试
分布式搜索例子
等待秒用于通信初始化
构造查询对象
如果实现了排序,指明排序字段,需要根据
这个来对结果进行排序
只统计
搜索
返回搜索记录总数
11、服务器端部署
将nut压缩包解压部署在服务器上,根据服务操用途使用相应的启动服务命
a、运行搜索服务器启用命令 nutserver.sh或 nutserver.bat
b、备用搜索服务器启用命令 checkserver.sh或 checkserver.bat
12、用户管理工具
nut.sh(nut.bat)为命令行用户管理工具。
a、新建一个 zookeeper根节点
sh nut. sh zk create 192.168. 195.128: 2181 nutzk
b、查看根节点 nutz下的子节点
sh nut, sh zk list 192.168. 195.128: 2181 nutzk
c、删除根节点 nutz
sh rlut. sh zk delete 192. 168. 195.128: 2181 nulzk
d、将目录(文件)从hdfs复制到本地目录
sh nut. sh copy h21 hdfs: //192. 168. 195. 128: 9000/user/nianzai /nutindex/0/
ome/nlanzal/index
e、将目录(文件)从本地复制到hdfs
sh nut. sh copy 12h/home/nianzai/l. txt hdfs: //192. 168. 195. 128: 9000/user/nianzai/ input/
f、新建搜索节点
sh nul. sh zk searchgroup 192 168. 195. 128: 2181 sg1
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.