分享

hive的使用

有妳很满促 发表于 2013-12-16 12:47:22 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 8 10144
在做hive的时候,大家都知道就算查询一条语句也会非常的慢,大家有没没有用过自己写mapreduce,让hive去执行,也就是说,我自己写mapreduce,让hive去执行,这样可以不,或是我不用hive自动生成的mapreduce任务,安装我们自己写的生成mapreduce任务,在由hadoop去执行。希望大家帮助解决下

已有(9)人评论

跳转到指定楼层
pig2 发表于 2013-12-16 12:58:55
首先看一下hive的作用:
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
从上面可以看出hive是为Hadoop的MapReduce产生的。
但是没有hive是否可以,答案是可以的。可以自己写MapReduce。但是如果把MapReduce转换成hive有点本末倒置了,也没有这样的工具把MapReduce转换成hive



回复

使用道具 举报

有妳很满促 发表于 2013-12-17 12:03:57
我没说把mapreduce转换成hive,hive如果不可以执行mapreduce,它应该可以自己将sql转换mapreduce吧,另外我还看到可以自定义hive的mapreduce脚本
回复

使用道具 举报

hyj 发表于 2013-12-17 12:47:20
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

有妳很满促 发表于 2013-12-18 12:06:02

那个hive的mapreuce的脚本你会用不,能不能给了例子啊
回复

使用道具 举报

nettman 发表于 2013-12-18 12:28:45
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

有妳很满促 发表于 2013-12-27 11:23:37
nettman 发表于 2013-12-18 12:28
hive是一个基于hadoop的数据仓库。使用hadoop-hdfs作为数据存储层;提供类似SQL的语言(HQL),通过hadoo ...

谢谢了,ok
回复

使用道具 举报

有妳很满促 发表于 2013-12-27 11:25:23

不过那个太简单了,只要会hive都知道,我是想要一个hive的mapreduce脚本的写法
回复

使用道具 举报

lzw 发表于 2013-12-28 14:45:24
你说的这种方式是可以的,HIVE本身支持mapreduce外部脚本的。使用hadoop Streaming、TRANSFORM、MAP、REDUCE子句这样的方法,便可以在HIVE中调用外部脚本。
  • 用python来分析:

   calcwin.py
  1. #!/usr/bin/env python
  2. import sys
  3. import datetime
  4. def calcwin():
  5.     for line in sys.stdin:
  6.         
  7.         (ldate,userid,roundbet,fold,allin,chipwon)=line.strip().split()
  8.         win = '0'
  9.         if fold=='1':
  10.            
  11.             print '\t'.join(["%s:%s"%(ldate,userid),win,fold,allin])
  12.             continue
  13.         cw = []
  14.         if chipwon == "NULL":
  15.             print '\t'.join(["%s:%s"%(ldate,userid),win,fold,allin])
  16.             continue
  17.         #print "userid win ",userid
  18.         cw=chipwon.split('|')
  19.         chipwonv=0
  20.         roundbetv=int(roundbet)
  21.         for v in cw:
  22.             chipwonv += int(v.split(':')[1])
  23.       
  24.         if chipwonv > roundbetv:
  25.             win = '1'
  26.         print '\t'.join(["%s:%s"%(ldate,userid),win,fold,allin])
  27. calcwin()
复制代码
原始数据格式:
  1. hive> !hadoop fs -cat /flume/test/testpoker;
  2. 03/13/13 14:59:51 00000ab4 1009 185690475 8639 240 1 0 -1 NULL NULL
  3. 03/13/13 14:59:51 00000cb4 1009 187270278 92030 600 1 0 -1 NULL NULL
  4. 03/13/13 14:59:52 000003d8 1009 184151687 8639 600 1 0 -1 NULL NULL
  5. 03/13/13 14:59:52 00000ba8 1009 186012530 8593 154135 0 1 7 8|21|16|42|39 0:73250|1:60500|2:100135
  6. 03/13/13 14:59:52 00000a88 1009 180286243 92041 100 1 0 -1 NULL NULL
  7. 03/13/13 14:59:52 00000ad8 1009 163003653 2829 40 1 0 -1 NULL NULL
  8. 03/13/13 14:59:54 000002ac 1009 183824880 8639 1200 0 0 -1 NULL 0:1900
  9. 03/13/13 14:59:55 0000091c 1009 173274868 92030 600 0 0 -1 NULL 0:1150
复制代码
然后,在hive命名行添加calcwin.py
  1. hive> add file calcwin.py
  2. hive> from testpoker select transform(ldate,userid,roundbet,fold,allin,chipwon) using 'calcpoker.py' as (key,win,fold,allin) ;
  3. ...
  4. OK
  5. 03/13/13:185690475      0       1       0
  6. 03/13/13:187270278      0       1       0
  7. 03/13/13:184151687      0       1       0
  8. 03/13/13:186012530      1       0       1
复制代码
  • 使用java分析
   HIVE mapreduce in java 连接,连接上对应的源代码及测试例子。
我从网上搜了搜,基本上都是凭python写的mapreduce。







回复

使用道具 举报

有妳很满促 发表于 2014-1-2 12:51:31
lzw 发表于 2013-12-28 14:45
你说的这种方式是可以的,HIVE本身支持mapreduce外部脚本的。使用hadoop Streaming、TRANSFORM、MAP、REDUC ...

谢谢了,要的就是这个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条