pig

Hadoop Pig学习笔记(一) 各种SQL在PIG中实现

痞子三分冷 提交于 2019-12-22 11:39:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我这里以Mysql 5.1.x为例,Pig的版本是0.8 同时我将数据放在了两个文件,存放在/tmp/data_file_1和/tmp/data_file_2中.文件内容如下: tmp_file_1: zhangsan 23 1 lisi 24 1 wangmazi 30 1 meinv 18 0 dama 55 0 tmp_file_2: 1 a 23 bb 50 ccc 30 dddd 66 eeeee 1.从文件导入数据 1)Mysql (Mysql需要先创建表). CREATE TABLE TMP_TABLE(USER VARCHAR(32),AGE INT,IS_MALE BOOLEAN); CREATE TABLE TMP_TABLE_2(AGE INT,OPTIONS VARCHAR(50)); -- 用于Join LOAD DATA LOCAL INFILE '/tmp/data_file_1' INTO TABLE TMP_TABLE ; LOAD DATA LOCAL INFILE '/tmp/data_file_2' INTO TABLE TMP_TABLE_2; 2)Pig tmp_table = LOAD '/tmp/data_file_1' USING PigStorage('\t'

Apache Pig学习笔记(二)

我只是一个虾纸丫 提交于 2019-12-22 11:38:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 主要整理了一下,pig里面的一些关键词的含义和用法,pig虽然是一种以数据流处理为核心的框架,但数据库的大部分关键词和操作,在pig里面基本上都能找到对应的函数,非常灵活与简洁,春节前的最后一篇文章了,祝大家春节快乐! 1,保留关键字: -- A assert, and, any, all, arrange, as, asc, AVG -- B bag, BinStorage, by, bytearray, BIGINTEGER, BIGDECIMAL -- C cache, CASE, cat, cd, chararray, cogroup, CONCAT, copyFromLocal, copyToLocal, COUNT, cp, cross -- D datetime, %declare, %default, define, dense, desc, describe, DIFF, distinct, double, du, dump -- E e, E, eval, exec, explain -- F f, F, filter, flatten, float, foreach, full -- G generate, group -- H help -- I if, illustrate,

玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)

只愿长相守 提交于 2019-12-22 11:38:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> GMV(一定时间内的成交总额)是一个衡量电商网站营业收入的一项重要指标,例如淘宝,京东都有这样的衡量标准,感兴趣的朋友可以自己科普下这方面的概念知识。 当然散仙今天,并不是来解释概念的,而是记录下最近工作的一些东西,原来我们平台的GMV只有一个总的成交金额,并没有细分到各个系统的GMV的比重,比如搜索端,推荐端,移动端等等。 通过细粒度的分析各个系统所占的比重,对于指导各个系统完善和发展有一定的重要意义,这里不就深说了,下面先来看下散仙分析的搜索gmv的数据布局方式。 (1)Hadoop集群上,存储了一些非核心的数据,比如访问数据,点击数据,购物车数据,下单数据(这个是从数据库里每天同步到HDFS上的,算是备份吧) (2)Oracle数据库中,存储了订单信息,交易信息,商品信息,支付信息等一些电商的核心数据 其实关于gmv的计算方式,在我们oracle库里,以及有一个存储过程封装了复杂的细节的处理,包括运费,折扣,不同国家,不同地域,信用用户,等等,在使用时候,只需要传入一个订单编号即可,计算出本单的gmv成交金额。 这样以来的,按照目前的数据情况,订单编号是从Hadoop集群上,一直是从搜索,点击,添加购物车,下单计算出来的,然后获取的对应的订单编号,注意这个过程中,是需要全程去爬虫数据的

Pig数据模型及Order,Limit关系操作

笑着哭i 提交于 2019-12-22 11:34:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一篇博客主要讲解了Pig的安装和一个试手的例子,下面说一下Pig的数据模型。 Pig的数据模型基本分为2大类,基本类型,和复杂类型。基本类型只能包含一个简单的数值,复杂类型可以包含其他所有类型。 基本类型,和其他大多数主流语言提供的简单类型一样,Pig也提供int, long, float, double,chararray(Sring),bytearray(字节类型) Pig是用Java开发的,因此Java程序员应该能想象的到,上面的基本类型都是java.lang包中对应类型的实现的。 需要注意的是,Pig的基本类型中没有Boolean值,但是在Pig的运行期却是有Boolean值的,因为关系Filter需要一个Boolean关系为true时数据才能流过去。这点上需要注意。 复杂类型包括Map, Tuple和Bag Map相当于Java的Map<String, Object>类型的。Key必须是一个chararray,而值可以是任何基本和复杂类型。表示为[key#value] Tuple可以理解为Java中的List,其实如果懂得Python,它更像Python中的Tuple[元组],表示为:(1, “abc”, 1.5)等 Bag的数据类型按我的理解为Java的Set<Tuple>,它内部的数据是无序的

Apache Pig和Solr问题笔记(一)

荒凉一梦 提交于 2019-12-22 11:33:54
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 记录下最近两天散仙在工作中遇到的有关Pig0.12.0和Solr4.10.2一些问题,总共有3个,如下: (1)问题一: 如何Pig中使用ASCII和十六进制(hexadecimal)的分隔符进行加载,和切分数据? 注意关于这个问题,在Pig中,会反应到2个场景中, 第一: 在Pig加载(load)数据时候 。 第二: 在Pig处理split,或则正则截取数据的时候。 先稍微说下,为啥使用十六进制的字段分隔符,而不是我们常见的空格,逗号,冒号,分号,#号,等,这些字符,虽然也可以使用,但是如果我们数据中有和这些符号冲突的数据,那么在解析时,就会发生一些出人意料的Bug,所以,为了保险起见,选用肉眼不可读的十六进制的数据,是一个不错的选择,当然这也是,针对场景来说的,看情况决定。 关于详细的ASCII和十六进制,二进制,八进制,十进制的文档介绍,请参考 维基 百科全书。 下面继续回到正题,本例中,我们的数据格式是这样存储的: Java代码 每行一条记录,UTF- 8 编码; 每条记录都包括字段名和字段内容; 字段之间用ascii码 1 分隔; 字段名与内容之间用ascii码 2 分隔; 一个在eclipse中的小例子如下: Java代码 public static void main(String[] args)

Apache Pig字符串截取实战小例子

为君一笑 提交于 2019-12-22 11:25:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 记录一个Pig字符串截取的实战小例子: 需求如下,从下面的字符串里提取出第2列(冒号后面)的值: Java代码 1 2 3 4 a:ab#c#d a:c#c#d a:dd#c#d a:zz#c#d 如果是在java里,方法可能有很多种,比如substring,或者split多次等,在pig也大致如此,可以使用SUBSTRING内置函数来完成,但散仙推荐使用下面的方式,这种方式比较灵活,适合大部分场景的数据提取,需要用到的2个函数如下: (1)REGEX_EXTRACT('原始字符串','正则式',int类型的返回索引) (2)STRSPLIT('原始字符串', '正则式', 限制返回的个数) pig脚本写法: Java代码 a = laod '/tmp/data' as (data:chararray) //注意逻辑是,先获取冒号后面的数据,然后split成tuple,再通过$1(下标访问元素)获取我们需要的数据即可。 b = foreach a generate STRSPLIT (REGEX_EXTRACT (data, '(.*):(.*)', 2) ,'#',5).$0; dump b; 来源: oschina 链接: https://my.oschina.net/u/1027043/blog

玩转大数据系列之Apache Pig如何与Apache Solr集成(二)

不想你离开。 提交于 2019-12-04 06:46:20
散仙,在 上篇文章 中介绍了,如何使用Apache Pig与Lucene集成,还不知道的道友们,可以先看下上篇,熟悉下具体的流程。 在与Lucene集成过程中,我们发现最终还要把生成的Lucene索引,拷贝至本地磁盘,才能提供检索服务,这样以来,比较繁琐,而且有以下几个缺点: (一)在生成索引以及最终能提供正常的服务之前,索引经过多次落地操作,这无疑会给磁盘和网络IO,带来巨大影响 (二)Lucene的Field的配置与其UDF函数的代码耦合性过强,而且提供的配置也比较简单,不太容易满足,灵活多变的检索需求和服务,如果改动索引配置,则有可能需要重新编译源码。 (三)对Hadoop的分布式存储系统HDFS依赖过强,如果使用与Lucene集成,那么则意味着你提供检索的Web服务器,则必须跟hadoop的存储节点在一个机器上,否则,无法从HDFS上下拉索引,除非你自己写程序,或使用scp再次从目标机传输,这样无疑又增加了,系统的复杂性。 鉴于有以上几个缺点,所以建议大家使用Solr或ElasticSearch这样的封装了Lucene更高级的API框架,那么Solr与ElasticSearch和Lucene相比,又有什么优点呢? (1)在最终的写入数据时,我们可以直接最终结果写入solr或es,同时也可以在HDFS上保存一份,作为灾备。 (2)使用了solr或es,这时

玩转大数据系列之Apache Pig高级技能之函数编程(六)

落爺英雄遲暮 提交于 2019-12-03 04:03:37
原创不易,转载请务必注明,原创地址,谢谢配合! http://my.oschina.net/u/1027043/blog Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Apache Pig如何自定义UDF函数? Apache Pig5行代码怎么实现Hadoop的WordCount? Apache Pig入门学习文档(一) Apache Pig学习笔记(二) Apache Pig学习笔记之内置函数(三) 玩转大数据系列之Apache Pig如何与Apache Lucene集成(一) 玩转大数据系列之Apache Pig如何与Apache Solr集成(二) 玩转大数据系列之Apache Pig如何与MySQL集成(三) 玩转大数据系列之如何给Apache Pig自定义存储形式(四) 玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五) 如何使用Pig集成分词器来统计新闻词频? 在Hadoop的生态系统中,如果我们要离线的分析海量的数据,大多数人都会选择Apache Hive或Apache Pig,在国内总体来说,Hive使用的人群占比比较高, 而Pig使用的人相对来说,则少的多,这并不是因为Pig不成熟,不稳定,而是因为Hive提供了类数据库SQL的查询语句,使得大多人上手Hive非常容易,相反而Pig则提供了类Linux

Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别

喜欢而已 提交于 2019-12-02 23:46:41
初接触 Hadoop 技术的朋友肯定会对它体系下寄生的个个开源项目糊涂了,我敢保证Hive,Pig,HBase这些开源技术会把你搞的有些糊涂,不要紧糊涂的不止你一个,如某个菜鸟的帖子的疑问,when to use Hbase and when to use Hive?....请教了^_^没关系这里我帮大家理清每个技术的原理和思路。 Pig 一种操作hadoop的轻量级脚本语言,最初又雅虎公司推出,不过现在正在走下坡路了。当初雅虎自己慢慢退出pig的维护之后将它开源贡献到开源社区由所有爱好者来维护。不过现在还是有些公司在用,不过我认为与其使用pig不如使用hive。:) Pig是一种数据流语言,用来快速轻松的处理巨大的数据。 Pig包含两个部分:Pig Interface,Pig Latin。 Pig可以非常方便的处理HDFS和HBase的数据,和Hive一样,Pig可以非常高效的处理其需要做的,通过直接操作Pig查询可以节省大量的劳动和时间。当你想在你的数据上做一些转换,并且不想编写MapReduce jobs就可以用Pig. Hive 不想用程序语言开发MapReduce的朋友比如DB们,熟悉SQL的朋友可以使用Hive开离线的进行数据处理与分析工作。 注意Hive现在适合在离线下进行数据的操作,就是说不适合在挂在真实的生产环境中进行实时的在线查询或操作,因为一个字“慢”。相反

驭象者之Apache Oozie

半世苍凉 提交于 2019-12-02 14:55:08
(1)Apache Oozie是什么? Oozie在英语中的释义指的是:驯象人,驭象者(多指缅甸那边的俗称),这个比喻相对与它的功能来说,还是很恰当的。 Apache Oozie是一个用来管理Hadoop任务的工作流调度系统,是基于有向无环图的模型(DAG)。Oozie支持大多数的Hadoop任务的组合,常见的有Java MapReduce,Streaming map-reduce,Pig,Hive, Sqoop , Distcp,也可以结合一些脚本如Shell,Python,Java来很灵活的完成一些事情。同时,它也是一个可伸缩的,可扩展,高可靠的的系统 (2)Apache Oozie能用来干什么? 其实,上面的这张图,已经足够回答这个问题了,工作流嘛,顾名思义,就是我要干一件事,需要很多步骤,然后有序组合,最终达到能够完成这件事的目的。 举个例子,就拿做饭这件事吧。 1,买菜 2,洗菜 3,切菜 4,炒菜 5,上菜 这是一个简单的流程,当然这里面会有很多其他的小细节,比如我买菜,去了不同的菜市场,炒菜时候,又临时去买了一些调料,等等。 仔细分析这里面的道道,有些是有依赖关系的,有些没依赖关系的,比如菜是核心,所有很菜有关的都有先后顺序,其他的辅助步骤,比如说烧水,跟这是没有依赖关系的。反应到实际工作中的一些任务也是如此,所以采用oozie来管理调度,还是很方便的一件事。 (3