阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache Pig如何与Apache Lucene集成

133次阅读
没有评论

共计 3494 个字符,预计需要花费 9 分钟才能阅读完成。

在文章开始之前,我们还是简单来回顾下 Pig 的的前尘往事:

1,Pig 是什么?

Pig 最早是雅虎公司的一个基于 Hadoop 的并行处理架构,后来 Yahoo 将 Pig 捐献给 Apache(一个开源软件的基金组织)的一个项目,由 Apache 来负责维护,Pig 是一个基于 Hadoop 的大规模数据分析平台,它提供的 SQL-like 语言叫 Pig Latin,该语言的编译器会把类 SQL 的数据分析请求转换为一系列经过优化处理的 MapReduce 运算。Pig 为复杂的海量数据并行计算提供了一个简 易的操作和编程接口,这一点和 FaceBook 开源的 Hive(一个以 SQL 方式,操作 hadoop 的一个开源框架)一样简洁,清晰,易上手!

2,Pig 用来干什么?

要回答这个问题,还得回归到雅虎当初使用 Pig 的目的:

1)吸收和分析用户的行为日志数据(点击流分析、搜索内容分析等),改进匹配和排名算法,以提高检索和广告业务的质量。
2)构建和更新 search index。对于 web-crawler 抓取了的内容是一个流数据的形式,这包括去冗余、链接分析、内容分类、基于点击次数的受欢迎程度计算 (PageRank)、最后建立倒排表。
3)处理半结构化数据订阅(data seeds)服务。包括:deduplcaitin(去冗余),geographic location resolution,以及 named entity recognition.

3,Pig 在 Hadoop 生态系统中的地位

Apache Pig 如何与 Apache Lucene 集成

OK,下面回答正题,散仙最近在做的一个项目也是有关我们站搜索的关键词的点击率分析,我们的全站的日志数据,全部记录在 Hadoop 上,散仙初步要做的任务以及此任务的意义如下:

(1)找出来自我站搜索的数据
(2)分析关键词在某个时期内的搜索次数
(3)分析关键词在某个时期的点击次数
(4)通过这些数据,找出一些搜索无点击,搜索有点击,搜索点击少,和少搜索点击高等的一些边界关键词
(5)通过分析这些关键词,来评估我们站的搜索质量,给搜索方案的优化,以及改良提供一些参考依据
(6)使用 Lucene 或 Solr 索引存储分析后的数据,并提供灵活强大的检索方式

具体的使用 Pig 分析数据过程,散仙在这里就不细写了,感兴趣的朋友,可以在微信公众号的后台留言咨询,今天主要看下,Pig 分析完的数据结果如何存储到 Lucene 索引里,至于为什么选择 lucene 系列的索引存储,而不选择数据库存储或直接存储在 HDFS 上,最大的原因还是在速度上,散仙前段时间分析的数据是直接存储在 HDFS 上,存 HDFS 上是很好,又能备份,还能容灾,但是!但是查询,读取,过滤,转换就非常麻烦了,速度慢的没法说,每次都得读取数据,然后使用 JAVA 程序计算出最终结果,然后给前端展示,即使数据量并不太大,但中间耗费了较多的时间数据的读取,传输和分析上,所以这次在分析关键词的转化率时,干脆就顺便研究下,如何使用 Pig 和 Lucene,Solr 或者 ElasticSearch 集成。

Pig 或 Hive 本身能直接将各种格式的文件包括二进制,json,avro,以及 bzip,gzip,lzo,snappy,orc 等各种压缩格式存储在 HDFS 上或 Hbase 里,但是却不能直接将 Lucene 索引存储在 HDFS 上,至于为什么不能直接存储索引在 HDFS 上,这个与倒排索引的文件结构的组织方式有一定的关系,感兴趣的朋友可以在微信公众号上留言咨询,虽说不能直接存储在 HDFS 上,但是我们可以间接得通过他们的 UDF 函数来扩展 Pig 或 Hive,使得他们支持索引存储,注意这里虽然实现了索引存储在 HDFS 上,但实质却是,在本地的临时目录先生成索引,然后又变相的拷贝到了 HDFS 上,算是一种折中的算式吧。在 Pig 里,需要定义两个 UDF 上来完成索引存储这件事,一个主要是创建索引,另一个是索引输出,在 github 上已有大牛实现了,我们需要做的工作:

(1)访问这个地址下载这个压缩包。
(2)提取出自己想要的部分,在 eclipse 工程中,修改定制适合自己环境的的代码(Lucene 版本是否兼容?hadoop 版本是否兼容?,Pig 版本是否兼容?)。
(3)使用 ant 重新打包成 jar
(4)在 pig 里,注册相关依赖的 jar 包,并使用索引存储

下面给出,散仙的测试的脚本:

1.— 注册依赖相关的包 

2.REGISTER  /home/search/nsconvent/spig/20150112/lucenepig/pigudf.jar; 

3.REGISTER  /home/search/nsconvent/spig/20150112/lucenepig/lucene-analyzers-common-4.10.2.jar; 

4.REGISTER  /home/search/nsconvent/spig/20150112/lucenepig/lucene-core-4.10.2.jar; 

5.REGISTER  /home/search/nsconvent/spig/20150112/lucenepig/lucene-queryparser-4.10.2.jar; 

6. 

7.– 声明别名引用(注意只能无参的引用,带参数的在反射时候,会出现异常)

8.DEFINE  LuceneStore  com.pig.support.lucene.LuceneStore; 

9.– 加载数据 

10.a = load ‘/tmp/data/20150303/tt.txt’ using PigStorage(‘,’)  as (lbl:chararray,desc:chararray,score:int);  ; 

11.– 生成索引并存储在 HDFS 上,注意需要配置简单 lucene 索引方式(是否存储?是否索引?)

12.store a into ‘/tmp/data/20150303/luceneindex’ using LuceneStore(‘store[true]:tokenize[true]’); 

至此,我们已成功将索引存储在 HDFS 上,别高兴太宰,这仅仅是一个开始而已,在这里大家可能有疑问,存储在 HDFS 上的索引是否能够直接查询或访问呢?答案是肯定的,但不推荐大家直接读取 HDFS 上索引,即使了有了 Hadoop 的块缓存(Block Cache)提速,性能仍然是比较低的,除非你的集群机器不缺内存,否则,散仙还是建议大家直接把索引拷贝到本地磁盘再检索,这样做暂时比较麻烦,散仙在后面的文章里会介绍怎么把 pig 生成的结果集,直接以 Http 的方式存储到 Solr 或 ElasticSearch 里,这样以来就非常方便快捷了。

————————————– 分割线 ————————————–

基于 Lucene 多索引进行索引和搜索 http://www.linuxidc.com/Linux/2012-05/59757.htm

Lucene 实战 (第 2 版) 中文版 配套源代码 http://www.linuxidc.com/Linux/2013-10/91055.htm

Lucene 实战 (第 2 版) PDF 高清中文版 http://www.linuxidc.com/Linux/2013-10/91052.htm

使用 Lucene-Spatial 实现集成地理位置的全文检索 http://www.linuxidc.com/Linux/2012-02/53117.htm

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a9 http://www.linuxidc.com/Linux/2012-02/53113.htm

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a8 http://www.linuxidc.com/Linux/2012-02/53111.htm

Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a7 http://www.linuxidc.com/Linux/2012-02/53110.htm

Project 2-1: 配置 Lucene, 建立 WEB 查询系统 [Ubuntu 10.10] http://www.linuxidc.com/Linux/2010-11/30103.htm

————————————– 分割线 ————————————–

Lucene 的详细介绍 :请点这里
Lucene 的下载地址 :请点这里

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计3494字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中