分享

R利剑NoSQL系列文章 之 Hive

本帖最后由 xioaxu790 于 2014-7-5 19:01 编辑
问题导读:
1、什么是RHive?
2、RHive的基本操作有哪些?





摘要:
R利剑NoSQL系列文章,主要介绍通过R语言连接使用nosql数据库。涉及的NoSQL产品,包括Redis,MongoDB, HBase, Hive, Cassandra, Neo4j。希望通过我的介绍让广大的R语言爱好者,有更多的开发选择,做出更多地激动人心的 ...
1.png

第四篇 R利剑Hive,分为5个章节。
Hive介绍
Hive安装
RHive安装
RHive函数库
RHive基本使用操作

1. Hive介绍
Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
Hive 没有专门的数据格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允许用户指定数据格式

Hive与关系数据库的区别:
数据存储不同:hive基于hadoop的HDFS,关系数据库则基于本地文件系统
计算模型不同:hive基于hadoop的mapreduce,关系数据库则基于索引的内存计算模型
应用场景不同:hive是OLAP数据仓库系统提供海量数据查询的,实时性很差;关系数据库是OLTP事务系统,为实时查询业务服务
扩展性不同:hive基于hadoop很容易通过分布式增加存储能力和计算能力,关系数据库水平扩展很难,要不断增加单机的性能

2. Hive安装
Hive是基于Hadoop开发的数据仓库产品,所以首先我们要先有Hadoop的环境。
2.jpg                   
Hadoop-1.0.3的下载地址
http://archive.apache.org/dist/hadoop/core/hadoop-1.0.3/
Hive-0.9.0的下载地址
http://archive.apache.org/dist/hive/hive-0.9.0/

Hive安装好后
启动hiveserver的服务

  1. ~ nohup hive --service hiveserver &
  2. Starting Hive Thrift Server
复制代码

打开hive shell
  1. ~ hive shell
  2. Logging initialized using configuration in file:/home/conan/hadoop/hive-0.9.0/conf/hive-log4j.proper ties
  3. Hive history file=/tmp/conan/hive_job_log_conan_201306261459_153868095.txt
复制代码

#查看hive的表
  1. hive> show tables;
  2. hive_algo_t_account
  3. o_account
  4. r_t_account
  5. Time taken: 2.12 seconds
复制代码


#查看o_account表的数据
  1. hive> select * from o_account;
  2. abc@163.com 2013-04-22 12:21:39
  3. dedac@163.com 2013-04-22 12:21:39
  4. qq8fed@163.com 2013-04-22 12:21:39
  5. qw1@163.com 2013-04-22 12:21:39
  6. af3d@163.com 2013-04-22 12:21:39
  7. ab34@163.com 2013-04-22 12:21:39
  8. q8d1@gmail.com 2013-04-23 09:21:24
  9. conan@gmail.com 2013-04-23 09:21:24
  10. adeg@sohu.com 2013-04-23 09:21:24
  11. ade121@sohu.com 2013-04-23 09:21:24
  12. addde@sohu.com 2013-04-23 09:21:24
  13. Time taken: 0.469 seconds
复制代码

3. RHive安装
请提前配置好JAVA的环境:
  1. ~ java -version
  2. java version "1.6.0_29"
  3. Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
  4. Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)
复制代码

安装R:Ubuntu 12.04,请更新源再下载R2.15.3版本
  1. ~ sudo sh -c "echo deb http://mirror.bjtu.edu.cn/cran/bin/linux/ubuntu precise/ >>/etc/apt/sources.list"
  2. ~ sudo apt-get update
  3. ~ sudo apt-get install r-base-core=2.15.3-1precise0precise1
复制代码

安装R依赖库:rjava
#配置rJava
  1. ~ sudo R CMD javareconf
复制代码


#启动R程序
  1. ~ sudo R
  2. install.packages("rJava")安装RHiveinstall.packages("RHive")
  3. library(RHive)
  4. Loading required package: rJava
  5. Loading required package: Rserve
  6. This is RHive 0.0-7. For overview type ‘?RHive’.
  7. HIVE_HOME=/home/conan/hadoop/hive-0.9.0
  8. call rhive.init() because HIVE_HOME is set.
复制代码


4. RHive函数库
rhive.aggregate        rhive.connect          rhive.hdfs.exists      rhive.mapapply
rhive.assign           rhive.desc.table       rhive.hdfs.get         rhive.mrapply
rhive.basic.by         rhive.drop.table       rhive.hdfs.info        rhive.napply
rhive.basic.cut        rhive.env              rhive.hdfs.ls          rhive.query
rhive.basic.cut2       rhive.exist.table      rhive.hdfs.mkdirs      rhive.reduceapply
rhive.basic.merge      rhive.export           rhive.hdfs.put         rhive.rm
rhive.basic.mode       rhive.exportAll        rhive.hdfs.rename      rhive.sapply
rhive.basic.range      rhive.hdfs.cat         rhive.hdfs.rm          rhive.save
rhive.basic.scale      rhive.hdfs.chgrp       rhive.hdfs.tail        rhive.script.export
rhive.basic.t.test     rhive.hdfs.chmod       rhive.init             rhive.script.unexport
rhive.basic.xtabs      rhive.hdfs.chown       rhive.list.tables      
rhive.size.table
rhive.big.query        rhive.hdfs.close       rhive.load             rhive.write.table
rhive.block.sample     rhive.hdfs.connect     rhive.load.table
rhive.close            rhive.hdfs.du          rhive.load.table2

Hive和RHive的基本操作对比:
#连接到hive
  1. Hive: hive shell
  2. RHive: rhive.connect("192.168.1.210")
复制代码


#列出所有hive的表
  1. Hive: show tables;
  2. RHive: rhive.list.tables()
复制代码


#查看表结构
  1. Hive: desc o_account;
  2. RHive: rhive.desc.table('o_account'), rhive.desc.table('o_account',TRUE)
复制代码


#执行HQL查询
  1. Hive: select * from o_account;
  2. RHive: rhive.query('select * from o_account')
复制代码


#查看hdfs目录
  1. Hive: dfs -ls /;
  2. RHive: rhive.hdfs.ls()
复制代码


#查看hdfs文件内容
  1. Hive: dfs -cat /user/hive/warehouse/o_account/part-m-00000;
  2. RHive: rhive.hdfs.cat('/user/hive/warehouse/o_account/part-m-00000')
复制代码


#断开连接
  1. Hive: quit;
  2. RHive: rhive.close()
复制代码

5. RHive基本使用操作
#初始化
  1. rhive.init()
复制代码


#连接hive
  1. rhive.connect("192.168.1.210")
复制代码


#查看所有表
  1. rhive.list.tables()
  2. tab_name
  3. hive_algo_t_account
  4. o_account
  5. r_t_account
复制代码


#查看表结构
  1. rhive.desc.table('o_account');
  2. col_name data_type comment
  3. id int
  4. email string
  5. create_date string
复制代码


#执行HQL查询
  1. rhive.query("select * from o_account");
  2. id email create_date
  3. 1 abc@163.com 2013-04-22 12:21:39
  4. 2 dedac@163.com 2013-04-22 12:21:39
  5. 3 qq8fed@163.com 2013-04-22 12:21:39
  6. 4 qw1@163.com 2013-04-22 12:21:39
  7. 5 af3d@163.com 2013-04-22 12:21:39
  8. 6 ab34@163.com 2013-04-22 12:21:39
  9. 7 q8d1@gmail.com 2013-04-23 09:21:24
  10. 8 conan@gmail.com 2013-04-23 09:21:24
  11. 9 adeg@sohu.com 2013-04-23 09:21:24
  12. 10 ade121@sohu.com 2013-04-23 09:21:24
  13. 11 addde@sohu.com 2013-04-23 09:21:24
复制代码


#关闭连接
  1. rhive.close()
  2. [1] TRUE创建临时表
  3. rhive.block.sample('o_account', subset="id<5")
  4. [1] "rhive_sblk_1372238856"
  5. rhive.query("select * from rhive_sblk_1372238856");
  6. id email create_date
  7. 1 abc@163.com 2013-04-22 12:21:39
  8. 2 dedac@163.com 2013-04-22 12:21:39
  9. 3 qq8fed@163.com 2013-04-22 12:21:39
  10. 4 qw1@163.com 2013-04-22 12:21:39
复制代码


#查看hdfs的文件
  1. rhive.hdfs.ls('/user/hive/warehouse/rhive_sblk_1372238856/')
  2. permission owner group length modify-time
  3. rw-r--r-- conan supergroup 141 2013-06-26 17:28
  4. file
  5. /user/hive/warehouse/rhive_sblk_1372238856/000000_0
  6. rhive.hdfs.cat('/user/hive/warehouse/rhive_sblk_1372238856/000000_0')
  7. abc@163.com2013-04-22 12:21:39
  8. dedac@163.com2013-04-22 12:21:39
  9. qq8fed@163.com2013-04-22 12:21:39
  10. qw1@163.com2013-04-22 12:21:39
复制代码


按范围分割字段数据
  1. rhive.basic.cut('o_account','id',breaks='0:100:3')
  2. [1] "rhive_result_20130626173626"
  3. attr(,"result:size")
  4. [1] 443
  5. rhive.query("select * from rhive_result_20130626173626");
  6. email create_date id
  7. abc@163.com 2013-04-22 12:21:39 (0,3]
  8. dedac@163.com 2013-04-22 12:21:39 (0,3]
  9. qq8fed@163.com 2013-04-22 12:21:39 (0,3]
  10. qw1@163.com 2013-04-22 12:21:39 (3,6]
  11. af3d@163.com 2013-04-22 12:21:39 (3,6]
  12. ab34@163.com 2013-04-22 12:21:39 (3,6]
  13. q8d1@gmail.com 2013-04-23 09:21:24 (6,9]
  14. conan@gmail.com 2013-04-23 09:21:24 (6,9]
  15. adeg@sohu.com 2013-04-23 09:21:24 (6,9]
  16. ade121@sohu.com 2013-04-23 09:21:24 (9,12]
  17. addde@sohu.com 2013-04-23 09:21:24 (9,12]
复制代码



Hive操作HDFS
#查看hdfs文件目录
  1. rhive.hdfs.ls()
  2. permission owner group length modify-time file
  3. rwxr-xr-x conan supergroup 0 2013-04-24 01:52 /hbase
  4. rwxr-xr-x conan supergroup 0 2013-06-23 10:59 /home
  5. rwxr-xr-x conan supergroup 0 2013-06-26 11:18 /rhive
  6. rwxr-xr-x conan supergroup 0 2013-06-23 13:27 /tmp
  7. rwxr-xr-x conan supergroup 0 2013-04-24 19:28 /user
复制代码


#查看hdfs文件内容
  1. rhive.hdfs.cat('/user/hive/warehouse/o_account/part-m-00000')
  2. abc@163.com2013-04-22 12:21:39
  3. dedac@163.com2013-04-22 12:21:39
  4. qq8fed@163.com2013-04-22 12:21:39
复制代码

没找到任何评论,期待你打破沉寂

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

本版积分规则

关闭

推荐上一条 /2 下一条