网上两个人的牛人牛语,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