R利剑NoSQL系列文章 之 Hive

释放双眼,带上耳机,听听看~!

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

关于作者:

转载请注明:
http://blog.fens.me/nosql-r-hive/

第四篇 R利剑Hive,分为5个章节。

  1. Hive介绍
  2. Hive安装
  3. RHive安装
  4. RHive函数库
  5. RHive基本使用操作

1. Hive介绍

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

Hive 没有专门的数据格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允许用户指定数据格式

上面内容摘自 百度百科(http://baike.baidu.com/view/699292.htm)

hive与关系数据库的区别:

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

2. Hive安装

Hive是基于Hadoop开发的数据仓库产品,所以首先我们要先有Hadoop的环境。

Hadoop安装,请参考:Hadoop环境搭建, 创建Hadoop母体虚拟机

Hive的安装,请参考:Hive安装及使用攻略

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
2
3
4
1~ nohup hive --service hiveserver  &
2Starting Hive Thrift Server
3
4

打开hive shell


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1~ hive shell
2Logging initialized using configuration in file:/home/conan/hadoop/hive-0.9.0/conf/hive-log4j.proper             ties
3Hive history file=/tmp/conan/hive_job_log_conan_201306261459_153868095.txt
4
5#查看hive的表
6hive> show tables;
7hive_algo_t_account
8o_account
9r_t_account
10Time taken: 2.12 seconds
11
12#查看o_account表的数据
13hive> select * from o_account;
141       abc@163.com     2013-04-22 12:21:39
152       dedac@163.com   2013-04-22 12:21:39
163       qq8fed@163.com  2013-04-22 12:21:39
174       qw1@163.com     2013-04-22 12:21:39
185       af3d@163.com    2013-04-22 12:21:39
196       ab34@163.com    2013-04-22 12:21:39
207       q8d1@gmail.com  2013-04-23 09:21:24
218       conan@gmail.com 2013-04-23 09:21:24
229       adeg@sohu.com   2013-04-23 09:21:24
2310      ade121@sohu.com 2013-04-23 09:21:24
2411      addde@sohu.com  2013-04-23 09:21:24
25Time taken: 0.469 seconds
26
27

3. RHive安装

请提前配置好JAVA的环境:


1
2
3
4
5
6
1~ java -version
2java version "1.6.0_29"
3Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
4Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)
5
6

安装R:Ubuntu 12.04,请更新源再下载R2.15.3版本


1
2
3
4
5
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
4
5

安装R依赖库:rjava


1
2
3
4
5
6
7
8
1#配置rJava
2~ sudo R CMD javareconf
3
4#启动R程序
5~ sudo R
6install.packages("rJava")
7
8

安装RHive


1
2
3
4
5
6
7
8
9
10
1
2install.packages("RHive")
3library(RHive)
4Loading required package: rJava
5Loading required package: Rserve
6This is RHive 0.0-7. For overview type ‘?RHive’.
7HIVE_HOME=/home/conan/hadoop/hive-0.9.0
8call rhive.init() because HIVE_HOME is set.
9
10

由于RHive已经从CRAN上移除,需要动手下载安装,下载地址:https://cran.r-project.org/src/contrib/Archive/RHive/。我们需要动手下载RHive_0.0-7.tar.gz包,然后通过命令进行安装。


1
2
3
4
5
1
2# 安装RHive
3~ R CMD INSTALL RHive_0.0-7.tar.gz
4
5

4. RHive函数库


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1rhive.aggregate        rhive.connect          rhive.hdfs.exists      rhive.mapapply
2rhive.assign           rhive.desc.table       rhive.hdfs.get         rhive.mrapply
3rhive.basic.by         rhive.drop.table       rhive.hdfs.info        rhive.napply
4rhive.basic.cut        rhive.env              rhive.hdfs.ls          rhive.query
5rhive.basic.cut2       rhive.exist.table      rhive.hdfs.mkdirs      rhive.reduceapply
6rhive.basic.merge      rhive.export           rhive.hdfs.put         rhive.rm
7rhive.basic.mode       rhive.exportAll        rhive.hdfs.rename      rhive.sapply
8rhive.basic.range      rhive.hdfs.cat         rhive.hdfs.rm          rhive.save
9rhive.basic.scale      rhive.hdfs.chgrp       rhive.hdfs.tail        rhive.script.export
10rhive.basic.t.test     rhive.hdfs.chmod       rhive.init             rhive.script.unexport
11rhive.basic.xtabs      rhive.hdfs.chown       rhive.list.tables      
12rhive.size.table
13rhive.big.query        rhive.hdfs.close       rhive.load             rhive.write.table
14rhive.block.sample     rhive.hdfs.connect     rhive.load.table
15rhive.close            rhive.hdfs.du          rhive.load.table2
16
17

Hive和RHive的基本操作对比:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2#连接到hive
3Hive:  hive shell
4RHive: rhive.connect("192.168.1.210")
5
6#列出所有hive的表
7Hive:  show tables;
8RHive: rhive.list.tables()
9
10#查看表结构
11Hive:  desc o_account;
12RHive: rhive.desc.table('o_account'), rhive.desc.table('o_account',TRUE)
13
14#执行HQL查询
15Hive:  select * from o_account;
16RHive: rhive.query('select * from o_account')
17
18#查看hdfs目录
19Hive:  dfs -ls /;
20RHive: rhive.hdfs.ls()
21
22#查看hdfs文件内容
23Hive:  dfs -cat /user/hive/warehouse/o_account/part-m-00000;
24RHive: rhive.hdfs.cat('/user/hive/warehouse/o_account/part-m-00000')
25
26#断开连接
27Hive:  quit;
28RHive: rhive.close()
29
30

5. RHive基本使用操作


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1#初始化
2rhive.init()
3
4#连接hive
5rhive.connect("192.168.1.210")
6
7#查看所有表
8rhive.list.tables()
9             tab_name
101 hive_algo_t_account
112           o_account
123         r_t_account
13
14#查看表结构
15rhive.desc.table('o_account');
16     col_name data_type comment
171          id       int
182       email    string
193 create_date    string
20
21#执行HQL查询
22rhive.query("select * from o_account");
23   id           email         create_date
241   1     abc@163.com 2013-04-22 12:21:39
252   2   dedac@163.com 2013-04-22 12:21:39
263   3  qq8fed@163.com 2013-04-22 12:21:39
274   4     qw1@163.com 2013-04-22 12:21:39
285   5    af3d@163.com 2013-04-22 12:21:39
296   6    ab34@163.com 2013-04-22 12:21:39
307   7  q8d1@gmail.com 2013-04-23 09:21:24
318   8 conan@gmail.com 2013-04-23 09:21:24
329   9   adeg@sohu.com 2013-04-23 09:21:24
3310 10 ade121@sohu.com 2013-04-23 09:21:24
3411 11  addde@sohu.com 2013-04-23 09:21:24
35
36#关闭连接
37rhive.close()
38[1] TRUE
39
40

创建临时表


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2rhive.block.sample('o_account', subset="id<5")
3[1] "rhive_sblk_1372238856"
4
5rhive.query("select * from rhive_sblk_1372238856");
6  id          email         create_date
71  1    abc@163.com 2013-04-22 12:21:39
82  2  dedac@163.com 2013-04-22 12:21:39
93  3 qq8fed@163.com 2013-04-22 12:21:39
104  4    qw1@163.com 2013-04-22 12:21:39
11
12#查看hdfs的文件
13rhive.hdfs.ls('/user/hive/warehouse/rhive_sblk_1372238856/')
14  permission owner      group length      modify-time
151  rw-r--r-- conan supergroup    141 2013-06-26 17:28
16                                                 file
171 /user/hive/warehouse/rhive_sblk_1372238856/000000_0
18
19rhive.hdfs.cat('/user/hive/warehouse/rhive_sblk_1372238856/000000_0')
201abc@163.com2013-04-22 12:21:39
212dedac@163.com2013-04-22 12:21:39
223qq8fed@163.com2013-04-22 12:21:39
234qw1@163.com2013-04-22 12:21:39
24
25

按范围分割字段数据


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2rhive.basic.cut('o_account','id',breaks='0:100:3')
3[1] "rhive_result_20130626173626"
4attr(,"result:size")
5[1] 443
6
7rhive.query("select * from rhive_result_20130626173626");
8             email         create_date     id
91      abc@163.com 2013-04-22 12:21:39  (0,3]
102    dedac@163.com 2013-04-22 12:21:39  (0,3]
113   qq8fed@163.com 2013-04-22 12:21:39  (0,3]
124      qw1@163.com 2013-04-22 12:21:39  (3,6]
135     af3d@163.com 2013-04-22 12:21:39  (3,6]
146     ab34@163.com 2013-04-22 12:21:39  (3,6]
157   q8d1@gmail.com 2013-04-23 09:21:24  (6,9]
168  conan@gmail.com 2013-04-23 09:21:24  (6,9]
179    adeg@sohu.com 2013-04-23 09:21:24  (6,9]
1810 ade121@sohu.com 2013-04-23 09:21:24 (9,12]
1911  addde@sohu.com 2013-04-23 09:21:24 (9,12]
20
21

Hive操作HDFS


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2#查看hdfs文件目录
3rhive.hdfs.ls()
4  permission owner      group length      modify-time   file
51  rwxr-xr-x conan supergroup      0 2013-04-24 01:52 /hbase
62  rwxr-xr-x conan supergroup      0 2013-06-23 10:59  /home
73  rwxr-xr-x conan supergroup      0 2013-06-26 11:18 /rhive
84  rwxr-xr-x conan supergroup      0 2013-06-23 13:27   /tmp
95  rwxr-xr-x conan supergroup      0 2013-04-24 19:28  /user
10
11#查看hdfs文件内容
12rhive.hdfs.cat('/user/hive/warehouse/o_account/part-m-00000')
131abc@163.com2013-04-22 12:21:39
142dedac@163.com2013-04-22 12:21:39
153qq8fed@163.com2013-04-22 12:21:39
16
17

转载请注明:
http://blog.fens.me/nosql-r-hive/

R利剑NoSQL系列文章 之 Hive

This entry was posted in Hadoop实践, R语言实践, 数据库

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索