文档章节

玩转大数据之Apache Pig如何与Apache Lucene集成

九劫散仙
 九劫散仙
发布于 2015/03/06 00:46
字数 1698
阅读 1982
收藏 79

 
在文章开始之前,我们还是简单来回顾下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生态系统中的地位 





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包,并使用索引存储 

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

Java代码  收藏代码

  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里,这样以来就非常方便快捷了。 

本文就到此结束,有任何疑问的朋友,都可以直接在微信公众号里留言咨询,公众号的二维码在文末能够看到,大家用手机骚一下,就能直接关注,好了,不扯了,赶紧回家,在尼玛不走,苦逼的就没地铁了!!! 

© 著作权归作者所有

九劫散仙
粉丝 268
博文 175
码字总数 189625
作品 0
海淀
私信 提问
加载中

评论(6)

九劫散仙
九劫散仙 博主

引用来自“OSC大胖森”的评论

谢谢分享
不客气!
大胖森
大胖森
谢谢分享
九劫散仙
九劫散仙 博主

引用来自“anduo”的评论

很好
多谢!
九劫散仙
九劫散仙 博主

引用来自“混世顽童”的评论

原来我们也想把lucene索引存到HDFS中,这次总算是明白了,检索效率低啊,谢谢
不过,如果你们的集群不缺内存,倒是也可以存放在HDFS上,将Block Cache调大,这样虽不如一块SSD来的直接,但HDFS也附带了众多好的存储特性(分布式,可容灾,高扩张),也算有利有弊吧!
混世顽童
混世顽童
原来我们也想把lucene索引存到HDFS中,这次总算是明白了,检索效率低啊,谢谢
anduo
anduo
很好
玩转大数据系列之Apache Pig高级技能之函数编程(六)

原创不易,转载请务必注明,原创地址,谢谢配合! http://my.oschina.net/u/1027043/blog Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Apache Pig如何自定义UDF...

九劫散仙
2015/03/18
112
0
玩转大数据系列之Apache Pig如何与Apache Solr集成(二)

散仙,在上篇文章中介绍了,如何使用Apache Pig与Lucene集成,还不知道的道友们,可以先看下上篇,熟悉下具体的流程。 在与Lucene集成过程中,我们发现最终还要把生成的Lucene索引,拷贝至本...

九劫散仙
2015/03/06
180
0
OSChina 技术周刊第二十四期 —— C# 6.0 的新特性

每周技术抢先看,总有你想要的! 移动开发 【博客】Swift社交应用文本输入优化汇总 服务端开发/管理 【翻译】HTTP/1 的最佳实践并不适合 HTTP/2 【翻译】使用 AppDomain 存储实现大数据集合 ...

OSC编辑部
2015/03/09
107
0
15个具有高度影响力的Apache开源项目

自1999年创立以来,Apache软件基金会如今已成了众多重要的开源软件项目之家。其中成功的项目有Geronimo,有Tomcat,有Hadoop,有如今成了大数据王国关键车毂的分布式计算系统。   虽然Apa...

老先生二号
2017/08/27
0
0
OSChina 技术周刊第 24 期 —— C# 6.0 的新特性

每周技术抢先看,总有你想要的! 移动开发 【博客】Swift社交应用文本输入优化汇总 服务端开发/管理 【翻译】HTTP/1 的最佳实践并不适合 HTTP/2 【翻译】使用 AppDomain 存储实现大数据集合 ...

OSC编辑部
2015/03/09
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部