hive选型讨论

网上两个人的牛人牛语,bigtable要淘汰了?google的数据挖掘基本上用的是MPI,而非mapreduce ? 百度的hypertable真不行吗?

大家边看边学吧



梁建:    hive 主要用于 结构化数据 吗?
我:    结构化数据
梁建:    hadoop 0.19.1 和 那个  hive 版本 配置
我:    它走的是传统数据库, 有compiler解析sql,形成mapreduce任务
我:    hive都支持,不过要改下配置
hivefans: hive做数据仓库的 分析/统计
我:    hive要做到数据仓库,还早着
梁建:     google  的 三架马车 不是 mapreduce,  gfs , bigtable

我:    为什么一定要学google?你的思维太定势了
梁建:    正好对应  mapreduce  hdfs  hbase

我:    而且google还有很多没有公开的东西
梁建:    是呀

我:    google的数据挖掘基本上用的是MPI,而非mapreduce
我:    MPI从bigtable读数据了
梁建:    我的 意思是   hive  对应 google  的 什么
我:    没有
梁建:    哦
梁建:    那 我 也 改 用  hive
hivefans:\t ...
我:    你要看你的应用
我:    facebook的hive只限应用于日志分析
梁建:    我主要做大规模结构化 数据表的查询
我:    那就合适了
我:    注意还有一个,不是实时的,是批量作业的
梁建:    一般都是几十亿 行的oracle 数据
梁建:    那我点一个查询按钮 ,hive还不能实时的结果 ?
hivefans:\t 数据仓库一般不是实时的数据
我:    你想实时的那不靠谱
梁建:    你说的 批量作业 是什么意思
梁建:    我的意思是 准实时  <2分钟

我:    那不是hive的特长
hivefans: 1 数据不是实时的
2 数据量大 也要等半天...
梁建:    那在 hadoop  上什么 东东  能 做大量的数据查询
梁建:    分布式的
hivefans: 如果你是想要Oracle的典型应用的话
hadoop上没有那种东东
hivefans: 如果你的数据是非结构化的
比如文档 就用hbase吧
梁建:    我现在是结构化的数据
梁建:    就是想实现分布式计算
梁建:    和分布式存储
hivefans: 用mysql/PostgreSQL的集群吧
梁建:    郁闷,那我不是白学 hadoop 了
我:    推荐greenplum,或者直接mysql-proxy作shard得了
梁建:    我想用 hadoop
我:    [/擦汗]
hivefans: 或者Oracle的RAC...也凑合
我:    rac集群上不去
hivefans: greenplum也是数据仓库
梁建:    我想试试 hive

梁建:    hive 是 分布式存储?
hivefans: 是
梁建:    那 hadoop + hive 就可以 解决我的问题 啊
梁建:    为什么不建议让我用呢
hivefans: 你是要从几亿条数据中查询一条或几条数据吗
梁建:    是在不行我先放上 1G 的表看看  总能实时出吧
梁建:    我要从几亿条数据中查询200条左右数据吗
hivefans: 那就不适合
梁建:    我要从几亿条数据中查询200条左右数据
梁建:    为什么不适合
hivefans: hive是做统计的
梁建:    慢?
hivefans: 数据仓库和数据库是两码事
hivefans: 结构就不一样
梁建:    那 hbase 适合 几亿条数据中查询200条左右数据

梁建:    ?
我:    hive实质上是hadoop的一个客户端,只是把产生mapreduce任务用一个sql编译器自动化了
hivefans: 嗯嗯
我:    数据仓库的东西一般不会删掉,而且不会改变
hivefans: 玩多了关系型数据库 思想就有局限了哈
梁建:    数据库适合 update 事物操作
数据仓库 适合 查询操作
我说的不对吗?
hivefans: hbase是column-oriented的
传统关系数据库是row-oriented的
hivefans: 数据仓库 适合 聚合运算
hivefans: 比如sum avg这类的运算
梁建:    那你做报表和查询 有什么区别 ,
大多数  报表是把数据先算好 ,然后再展现出来呀
梁建:    我查询也可以有 sum avg 运算啊
hivefans: 数据仓库没有明细信息...
梁建:    啊 ,我们的oracle 数据仓库都有详细信息
梁建:    都20T了
梁建:    全是详细信息
hivefans: 放进去是详细信息
hivefans: 展现的不是
梁建:    展现的是汇总 的
梁建:    我知道
梁建:    hive  做报表的案例有没有?
hivefans: 没见过
找facebook要吧....
梁建:    哎 ,你们都挺厉害的 ,技术很强
hivefans: 我技术一般 只会忽悠
我:    facebook不在hive上直接做报表
梁建:    hive 好用吗 ?
我:    hive处理完数据后, 会传给oracle
梁建:    bug 多吗?
我:    bug 非常多
我:    不过还是可以用D
hivefans: facebook的特点 嗯嗯
梁建:    啊,晕
梁建:    为什么要传给 oracle?
我:    oracle好查啊
我:    查得快,而且有BI工具可以连上去
hivefans: 这样啊 才听说
梁建:    要用 orlce ,就直接用 oralce
梁建:    来回传 麻烦
我:    oracle rac吃不消哦
我:    不是回传
我:    他们的日志先经过hive,再给oracle结果
我:    日志是文本的,oracle可吃不消。
梁建:    不过好多报表服务器就是 oracle 数据库 的
我:    一天就有2T多
梁建:    想 congnos
我:    yep.
我:    MicroStrategy
梁建:    现在 hadoop  的应用主要有哪些
梁建:    和数据库有关的
梁建:    用 hive 不用 写 mapreduce  程序?
我:    基本上是,但有时候你得写UDF或者python之类的程序
梁建:    我不会 UDF或者python ,能不能用 mapreduce 替代掉
我:    UDF就是用java写, 用户自定义函数的缩写
我:    sql的表意能力有限,你得扩展它
我:    cloudbase还支持UDT了
我:    用户自定义类型
梁建:    哦,多谢
梁建:    我现在就配置个环境试试
梁建:    你们经常用这个啊
梁建:    敢觉你们都很熟
梁建:    cloudbase 是另外一个东西吧 ,好像不是 hive 的
hivefans: 嗯嗯
我:    这东西我看过源码,不行
梁建:    那用那个好
梁建:    那个速度快
我:    hive好。 cloudbase设计上败笔太多,以后很麻烦
梁建:    好,多谢了
CYan羽: hypertable呢?
hivefans: 和hbase差不多
我:    hypertable性能nb, 稳定性极差。百度用这个
我:    而且百度是赞助商之一
CYan羽: 看了一下都0.9了,版本涨的神快
hivefans: 百度好差啊...
hivefans: 搞啥啥不行
梁建:    不是吧
CYan羽: 赞助商而已,也不是他们在搞吧
没有人: 测试过没有?
CYan羽: hypertable用C写的周期是要长一点,比hbase起步也晚
hivefans: cpp
我:    百度很早就在搞了
没有人: 谁在研究Hypertable?
comsci[神父]: 本文作者
CYan羽: 原本也是hbase里跑出来的一堆人
CYan羽: 最早的时候也没百度什么事
comsci[神父]: 21nw.com/2009/01/04/高性能数据库hypertable/
梁建:    你们在抖知道这些内幕
comsci[神父]: http://blog.csdn.net/xpspace/archive/2008/05/22/2470904.aspx
comsci[神父]: http://www.hudong.com/wiki/HyperTable
comsci[神父]: 搜索引擎公司Zvents以Google发布的BigTable为基础,推出的一款开源分布式数据储存系统。 新软件MHypertable是按照1000节点比例设计,刚刚发布0.9 alpha测试版,已经在10个节点上测试过。
Hypertable 是由Zvents设计的BigTable clone开放原始码专案,以 C++撰写,可架在 HDFS 和 KFS 上。尽管还在初期阶段,但已有不错的效能:写入 28M 列的资料,各节点写入速率可达7MB/s,读取速率可达 1M cells/s。
Hypertable是根据Google的9位研究人员在2006年发表的一篇论文《Bigtable:结构化数据的分布存储系统》开发的,Bigtable 是Google内部使用的文件储存系统。
CYan羽: [图片] Bigtable是数据库......
Chen: google的文件系统是gfs
梁建:    hive 有没有 web 监控页面
梁建:    像  http:/localhost:50070/    这样的 namenode
梁建:    web监控页面
梁建:    hive  load data 的  0.dat 文件是什么格式的 ,  和oracle 的文本文档格式一样吗
梁建:    哪有hive 的语法文档
梁建:    hive 区分大小写?
梁建:    为什么我的 hive 只有 map100% reduce 0%
梁建:    load data local inpath .......
都对了
梁建:    select 结果都出来了,  中文全是乱码
梁建:    hypertable 和 hive  的主要 功能有区别吗?
梁建:    郁闷
梁建:    是不是 一般的 select (不带 sum,avg)  都只有 map 没有 reduce 运算
我:    yep
我:    如果有join就不是了
我:    你想像一下,你要做到select的效果是怎么做的,就知道为什么是这样运行了
梁建:    那hive 更适合作那种经营分析 应用
梁建:    hive 支持 join ?
我:    equal join
梁建:    那个地方 有 hive 语法说明资料
梁建:    我找到的都是 api的
我:    http://wiki.apache.org/hadoop/Hive/LanguageManual
梁建:    多谢
我:    不客气
梁建:    我可以用 java 写前台程序 调用 后台的hadoop的hive 实现查询的操作,然后在用java 处理Hql查询的结果 ,并用 java 程序将结果显示在前台
梁建:    这样不就 实现了准实时 查询?
梁建:    我这样的想法对不对阿
梁建:    hive  好像 不支持  delete
梁建:    ?
我:    to梁建,我貌似说过了数据仓库的特征之一,就是很少删东西
梁建:    哦,知道了
我:    共享里面可以下载了
梁建:    写的 不错 了
梁建:    现在知道这块 东西 的 人少
梁建:    能写成这样已经不错了
梁建:    恩   咋样用自己写的 java 程序 调用 hive 呢?
我:    hive有一个类 HiveServer
我:    它提供了一个thrift服务
梁建:    哦 ,就是直接写 客户端的 java 类 和 hive 的 HiveServer thrift服务 交互访问
我:    to梁建:    right
梁建:    这样就能够实现 java 使用分布式数据仓库hive了
我:    呵呵. 但它那个HiveServer有问题
我:    session的处理, 而且不能用UDF
梁建:    呵呵, 我觉得 你还是走在大家的前面 HiveServer 有什么问题
我:    session的处理问题
梁建:    session的处理, 而且不能用UDF
有什么影响
我:    搞应用的话,没有UDF,那没法搞哦
我:    不过我已经解决了
梁建:    和 jsp 的 session 一样吗?
我:    不懂web
我:    一个client连server,就是一道session了
梁建:    我是 做 web  的
我:    各session有自己状态的
梁建:    这个知道
我:    hive没处理好
梁建:    他是 什么协议 socket?
我:    嗯
梁建:    那你是处理好了是用什么 ? 也是socket ?
我:    socket不是协议吧, 只是IPC技术。协议是thrift, facebook开源出去的,挺方便的
梁建:    对,我刚说错了
梁建:    thrift 没有听说过
梁建:    UDF  又是 什么东东
我:    UDF = user defined function
梁建:    哦 ,这回印象深刻了
梁建:    这个UDF 可有可无,只要有一个HiveServer  接口 能让我拿到数据,我 前台写函数也是一样 能完成功能的
我:    definitely not

我:    你前台写的函数只运行在client
梁建:    是的
我:    这个UDF得在集群的每个计算节点都运行
梁建:    哦, 知道了
梁建:    就是并行性能好
梁建:    网上有没有这样现成的  code
梁建:    我今天没有来的及看 他自带的 example
我:    没有,事实上hive也没很好的实现。
梁建:    哦, 他自带的  example 里有 HiveServer ?

梁建:    我有空看看学习一下
我:    哪个example?
梁建:    下载的安装文件里应该有
梁建:    理论上
梁建:    下载的安装文件里的 example 理论上
应该有
梁建:    不知道是不是这样的
我:    不知道你指的是
梁建:    hive 支持不支持存储过程
我:    [/流汗]
梁建:    在这里 存储过程
就有点像 UDF
我:    你没掌握它的设计理念
梁建:    了
我:    UDF和存储过程两码事
我:    在任何数据库都是这样
梁建:    我知道 oracle 也有用户自定义函数
梁建:    我知道 oracle 也有用户自定义存储过程
梁建:    就是那个 hadoop/  contrib   /hive  /example
梁建:     大概是这个目录吧我忘了
我:    [/流汗]
我:    hive已经独立出来了
梁建:    我还用的老版本的
梁建:    我用的 hadoop 0.19.1 上自带的 hive
梁建:    没太大区别吧
我:    我看看它的svn地址
我:    貌似不是一致的
我:    svn co http://svn.apache.org/repos/asf/hadoop/hive/ hive
梁建:    我今天试了一下 hql 都能用
梁建:    基本一致
梁建:    你用的 hadoop 那个版本的
梁建:    coderplay ?
我:    0.19.0 这个不大稳定
梁建:    就是我感觉到了
梁建:    你用的那个
梁建:    版本
梁建:    Hive 不是有 JDBC Interface  ?
梁建:    干嘛还要 socket ?

我:    完全不能用
梁建:    JDBC Interface 完全不能用


我:    对
我:    仔细看它的代码
我:    我夜宵去了 -____-
梁建:    meta. server 是干什用的
梁建:    那个 meta. server  好
梁建:    hive 的 jdbc 咋不能用
梁建:    是 derby 的 问题 ?
梁建:    meta. server 和 derby   是什么关系?
梁建:    求助啊
我:    metaserver是一个为hive提供元数据服务的server
我:    derby是一个嵌入式的数据库
我:    metaserver从derby中取出的数据就是hive的元数据
我:    不一定非得使用derby, hive使用了jpox,使得可以连接derby, mysql, orcale等数据库
我:    它们存储了hive的元数据信息
梁建:    元数据 信息 是什么信息 ? 能不能举个例子
我:    元数据是指hive的表,列等相关信息
我:    你的DDL语句,会改变元数据
梁建:    那就表结构的信息 ?
梁建:    好像 通过 jdbc 可以 执行hive 查询 ?

我:    不可以
我:    目前的不成熟
hivefans: 那目前hive的jdbc能做什么
梁建:    咋样知道 jdbc 是否配置好了
梁建:    我的  web interface 调证好了

梁建:    但是 web页面 里 有个 browse schema 报错
梁建:    其它的 hwi 都可以用
梁建:    报错 好像就是  jpox 连 derby 的问题

梁建:    但是 我 在 hive> show tables ; 都是好的
梁建:    hive > create table .....也是好的
梁建:    这说明了是我的 derby 没有配置好?
梁建:    对吗
梁建:    我看官方现在给了一个 jdbc  l链接的例子 ,上面说可以直接链接
我:    没有用了. 你看它的jdbc代码就知道了
我:    没有获取metadata
我:    还有很多接口没实现
我:    比ResulSet.getString(String label),没实现
梁建:      if (standAloneServer) {
    
            // get connection
    
        con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
  
      }
else {

        con = DriverManager.getConnection("jdbc:hive://", "", "");
  
      }
梁建:    res = stmt.executeQuery("select * from " + tableName);

我:    没有用了. 你看它的jdbc代码就知道了
        没有获取metadata
    还有很多接口没实现
    比如ResulSet.getString(String label),没实现

梁建:  
那怎样才能把 derby 和hive 调通呢
梁建:    derby 和hive 之间还夹了一个 jpox 是把
我:    yep
梁建:    英文的配置文档说的太简单了
梁建:    那我的环境中现在就是  derby 没有配置好 ,或者是 jpox 的问题

但是 derby 没有配置好得可能性大
梁建:    理论上 通过 jdbc 连接 derby  和 Thrift Hive Server   能够实现的功能是一样的吧?
梁建:    Thrift Hive Server  不需要  derby 吧?
我:    jdbc就是HiveServer的一个特殊的客户端
我:    你没理解哦
梁建:    啊 ,那我要先启动  HiveServer 才能用 jdbc 啊
梁建:    这么说 HiveServer 也用 derby 数据库了 ? 你不是说 Thrift  Hive Server 是socket ?
梁建:    难到   Thrift  Hive Server  是建立在数据库上 的?
梁建:    derby 数据库 可以分布在 各各 slave 上?
梁建:    derby 数据库 实现的 并行计算 ?
hivefans: 只是Name Node要derby吧
hivefans: derby 数据库只是存metadata
我:    hivefans说对了后面那句
梁建:    我用hive  web interface 的时候 浏览文件目录时 报错 就是 jpox 连接 derby失败
我:    查wiki,有教怎么配置
梁建:    好
那就是derby 数据库只能安装在一个机器上 ,derby 数据库没有并行计算的能力,hadoop 帮derby 完成了并行计算
对吗?
我:    no
hivefans: no
梁建:    那应该是什么呢?
我:    derby只是存metadata, HDFS上存大文件, 不适合随机读取,所以把metadata的信息存在别的数据库(如derby, mysql)之上,这样更好查询.
我:    查询的是metadata
hivefans: http://rdc.taobao.com/blog/dw/archives/266
我:    当然也可以不是derby,可以用不jpox, 文本都可以
hivefans: 那连接是个配置hive的
梁建:    hivefans(8615615)  15:31:20
那连接是个配置hive的

这个我已经测通了
梁建:    hive 里的表里的 内容(如: 200901梁建: 男 00000001 ) 是存储在 HDFS上的大文件里 还是 derby里?
我:    hdfs
梁建:    哦,这样的啊
hivefans: derby里大约存的是 某个块存在哪个机
我:    create table profile(name string, id string)
        那表名 profile, 列名name,id,都存在derby里
梁建:    知道了
梁建:    既然我 hive> show tables ; 都能用 就说明我 derby 没有问题
问题在 jpox 连接 derby
梁建:    多谢
梁建:    hadoop 这样的存储有点像 cognos
梁建:    把报表的结构样式全存在 oracle 数据库中
我:    我夜宵去了 -___-
梁建:    好
我:    bye

你可能感兴趣的:(hive)