,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包,并使用索引存储
下面给出,散仙的测试的脚本:
- ---注册依赖相关的包
- REGISTER /home/search/nsconvent/spig/20150112/lucenepig/pigudf.jar;
- REGISTER /home/search/nsconvent/spig/20150112/lucenepig/lucene-analyzers-common-4.10.2.jar;
- REGISTER /home/search/nsconvent/spig/20150112/lucenepig/lucene-core-4.10.2.jar;
- REGISTER /home/search/nsconvent/spig/20150112/lucenepig/lucene-queryparser-4.10.2.jar;
- --声明别名引用(注意只能无参的引用,带参数的在反射时候,会出现异常)
- DEFINE LuceneStore com.pig.support.lucene.LuceneStore;
- --加载数据
- a = load '/tmp/data/20150303/tt.txt' using PigStorage(',') as (lbl:chararray,desc:chararray,score:int); ;
- --生成索引并存储在HDFS上,注意需要配置简单lucene索引方式(是否存储?是否索引?)
- store a into '/tmp/data/20150303/luceneindex' using LuceneStore('store[true]:tokenize[true]');
---注册依赖相关的包 REGISTER /home/search/nsconvent/spig/20150112/lucenepig/pigudf.jar; REGISTER /home/search/nsconvent/spig/20150112/lucenepig/lucene-analyzers-common-4.10.2.jar; REGISTER /home/search/nsconvent/spig/20150112/lucenepig/lucene-core-4.10.2.jar; REGISTER /home/search/nsconvent/spig/20150112/lucenepig/lucene-queryparser-4.10.2.jar; --声明别名引用(注意只能无参的引用,带参数的在反射时候,会出现异常) DEFINE LuceneStore com.pig.support.lucene.LuceneStore; --加载数据 a = load '/tmp/data/20150303/tt.txt' using PigStorage(',') as (lbl:chararray,desc:chararray,score:int); ; --生成索引并存储在HDFS上,注意需要配置简单lucene索引方式(是否存储?是否索引?) store a into '/tmp/data/20150303/luceneindex' using LuceneStore('store[true]:tokenize[true]');
至此,我们已成功将索引存储在HDFS上,别高兴太宰,这仅仅是一个开始而已,在这里大家可能有疑问,存储在HDFS上的索引是否能够直接查询或访问呢? 答案是肯定的,但不推荐大家直接读取HDFS上索引,即使了有了Hadoop的块缓存(Block Cache)提速,性能仍然是比较低的,除非你的集群机器不缺内存,否则,散仙还是建议大家直接把索引拷贝到本地磁盘再检索,这样做暂时比较麻烦,散仙在后面的文章里会介绍怎么把pig生成的结果集,直接以Http的方式存储到Solr或ElasticSearch里,这样以来就非常方便快捷了。
相关推荐
标题中的“用于进行Hadoop Pig分析的日志”指的是在大数据处理场景中,使用Apache Pig工具对网站访问日志数据进行分析的过程。Pig是Hadoop生态系统中的一个高级数据处理语言,它提供了一种抽象的方式,使得用户可以...
Pig 构建在 Hadoop 平台上,通过提供一个名为 Pig Latin 的高级抽象语言,简化了在 Hadoop 上进行数据分析的过程。Pig Latin 允许数据工程师用简单的语句来描述复杂的分析任务,减少了直接编写 MapReduce 作业的复杂...
Pig Latin 常用于因特网公司的数据分析,例如对用户行为数据、网页日志、社交媒体数据等进行挖掘和分析。通过 Pig Latin,程序员可以编写简洁的脚本来执行复杂的数据处理任务,如分类统计、关联规则发现、聚类分析等...
Storm用于实时数据流处理,YARN作为Hadoop的资源管理系统,而Pig则提供了一种高级数据处理语言,简化了大规模数据集的分析。这里我们将深入探讨如何将这三个组件结合,实现广告点击量的实时分析。 首先,让我们了解...
在实践中,可以使用Pig的`LOAD`命令加载数据,然后应用一系列操作来探索、转换和分析数据,最后通过`DUMP`或`STORE`命令展示结果或将其保存回HDFS。 在《Programming Pig》第二版中,读者可以期待更加详尽的示例、...
Pig允许用户执行复杂的转换和数据查询,这些操作原本需要使用Java MapReduce编程,而Pig通过提供一套数据流语言和执行框架,简化了这一过程。 Pig基础教程涵盖了Pig语言的基本概念、语法、数据类型、操作符和内置...
而Pig作为Hadoop生态系统的一部分,是专门设计用于处理大规模数据集的高级数据分析工具。本课程聚焦于“Hadoop 08 Pig安装与Pig Latin语言”,旨在深入理解Pig的工作原理及其在实际应用中的价值。 Pig拉丁语(Pig ...
Pig 0.15版是Pig发展过程中的一个重要里程碑,它的源码为我们提供了深入理解大数据处理框架内部机制的机会。对于初学者来说,通过学习Pig 0.15的源码,可以提升对大数据处理流程、分布式计算模型以及脚本语言解析等...
通过分析这些源代码,我们可以了解Pig如何实现任务调度、数据分区、并行度控制等关键功能。 3. 架构设计:Pig采用三层架构,即前端(Frontend)、中间层(MiddleManager)和后端(Backend)。前端负责解析和验证Pig...
通过源码分析,我们可以了解这些过程的工作原理。 六、Pig与Hadoop的集成 Pig运行在Hadoop之上,利用Hadoop的分布式计算能力。源码中可能包含了如何在Hadoop集群上运行Pig脚本的示例,以及如何配置Pig与Hadoop的...
- **优点**:Pig为常见的数据处理逻辑提供了预封装的命令,用户可以直接调用这些命令而无需编写复杂的MapReduce代码,这大大简化了开发过程。此外,使用Pig可以避免一些常见的问题,如数据倾斜问题。 - **缺点**:...
Pig编程的主要用途包括但不限于数据挖掘、数据仓库的提取、转换和加载(ETL)任务、大规模数据分析和迭代算法处理等。Pig由于其处理速度快、编写效率高等优点,被越来越多的数据科学家和工程师所使用。 Pig的历史...
- **稳定性提升**:增强了错误处理和恢复机制,使得在大型数据处理过程中更加健壮。 4. **使用Pig-0.9.2.tar.gz**: 下载并解压"Pig-0.9.2.tar.gz"后,开发者可以在本地或Hadoop集群上安装和运行Pig。这通常包括...
在处理PCD文件时,通常会使用像PCL(Point Cloud Library)这样的开源库,该库提供了丰富的工具和算法,用于点云数据的处理、分析、滤波、分割、特征提取、匹配和三维重建。 点云数据集的主要用途之一是进行三维...
Pig通常应用于大数据处理,比如日志分析、用户行为追踪、数据挖掘等。结合Java编程,它可以处理各种复杂的数据处理需求,特别是在数据量庞大且需要定制化操作的情况下。 7. **开发和部署**: 使用`pig.jar`和`...
Pig Latin是Pig编程语言的基础,它允许用户通过简单的语句对大规模数据进行复杂分析,而无需深入理解MapReduce的底层细节。Pig Latin提供了一种声明性的方式,让用户可以专注于数据分析的逻辑,而不是关注如何分布式...
- **错误处理**:Pig 提供了强大的错误处理机制,可以在数据处理过程中自动检测和修复常见问题。 #### 五、案例研究 以电商行业为例,PigLatin 可以帮助分析师从大量的用户行为数据中提取有价值的信息。例如,通过...
Apache Pig 是一个用于大数据分析的高级编程平台,它提供了名为 Pig Latin 的脚本语言,使得用户能够以相对简单的语法处理大规模数据集。Pig-0.12.0 是 Pig 的一个重要版本,它在功能、性能和易用性方面都有所提升。...