R利剑NoSQL系列文章,主要介绍通过R语言连接使用nosql数据库。涉及的NoSQL产品,包括Redis,MongoDB, HBase, Hive, Cassandra, Neo4j。希望通过我的介绍让广大的R语言爱好者,有更多的开发选择,做出更多地激动人心的应用。
关于作者:
- 张丹(Conan), 程序员Java,R,PHP,Javascript
- weibo:@Conan_Z
- blog: http://blog.fens.me
- email: bsspirit@gmail.com
转载请注明:
http://blog.fens.me/nosql-r-hive/
第四篇 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 之上,控制分隔符,也允许用户指定数据格式
上面内容摘自 百度百科(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/
This entry was posted in Hadoop实践, R语言实践, 数据库