如何使用Hive&R从Hadoop集群中提取数据进行分析
一个简单的例子!
环境:CentOS6.5
Hadoop集群、Hive、R、RHive,具体安装及调试方法见博客内文档。
1、分析题目
--有一个用户数据样本(表名huserinfo)10万数据左右;
--其中有一个字段:身份证号(id_card)
--身份证号前两位代表:省,例如:11北京,12天津,13河北;
--身份证前x位对照表(表名hidcard_province)
--要求1:计算出每个省份出现的次数,并按从大到小排序取前30个;
--要求2:使用R画出柱状图。
2、编写Hive提取数据脚本:hive_getdata.sql
--创建临时表
DROP TABLE if exists tmp.t_province;
CREATE TABLE tmp.t_province(
id int,
p_name string,
cnt int
) COMMENT '用户数据中省份出现次数临时表' --将提取到的数据保存到临时表中
insert overwrite table tmp.t_province
select t1.cid, t2.province, t1.cnt from(
--取出前30条
select y.rownum, y.cid, y.cnt from(
--排序
select x.cid, x.cnt, row_number() over (distribute by x.cnt sort by x.cnt desc) as rownum from(
--分组
select a1.cid, count(1) as cnt from
--取数据
(select substring(id_card, 0, 2) as cid from bdm.huserinfo)a1
group by a1.cid
)x
)y where y.rownum <= 30
)t1
join bdm.hidcard_province t2 on t2.id = t1.cid
运行:
[root@Hadoop-NN-01 ~]$ hive -f hive_getdata.sql
查看数据如下图:
hive> select * from tmp.t_province limit 10;
3、编写R语言绘图脚本:r_draw.r
#!/usr/bin/Rscript
library(RHive); #加载rhive包
rhive.connect(host ='192.168.100.20'); #rhive连接hive
x <- rhive.query('select id from tmp.t_province')
x <- x$id
y <- rhive.query('select cnt from tmp.t_province')
y <- y$cnt library(Cairo) #加载图形渲染库 png("r-province-pic.png", width=960, height=600) #生成图片
#说明:此里可以处理很多问题,可以使用很多算法解决很多的问题,具体算法我就不写了,只简单画个柱柱图,把代码跑通即可!
barplot(beside=TRUE,
y, #纵轴
names.arg=x, #横轴
ylim=c(0,10000) #纵轴取值范围 还有其它参数,可以根据自己需求设置。
) title(xlab="province name") #横轴名称
title(ylab="people number") #纵轴名称 #图例参数
lbls <- round(y/sum(y)*100)
lbls <- paste(lbls,"%",sep="")
lbls <- paste(x, lbls) #设置图例 其它参数根据自己需求设置
legend("topright", lbls) dev.off() #关闭绘图设备
rhive.close() #关闭hive连接
运行:
[root@Hadoop-NN-01 ~]$ Rscript r_draw.r
展示成果:
至此,一个简单的Hadoop-Hive-R实例完成!
PS:R下面中文乱码的问题仍在解决中!
如何使用Hive&R从Hadoop集群中提取数据进行分析的更多相关文章
- Hadoop集群中添加硬盘
Hadoop工作节点扩展硬盘空间 接到老板任务,Hadoop集群中硬盘空间不够用,要求加一台机器到Hadoop集群,并且每台机器在原有基础上加一块2T硬盘,老板给力啊,哈哈. 这些我把完成这项任务的步 ...
- 在Hadoop集群中添加机器和删除机器
本文转自:http://www.cnblogs.com/gpcuster/archive/2011/04/12/2013411.html 无论是在Hadoop集群中添加机器和删除机器,都无需停机,整个 ...
- hadoop集群中客户端修改、删除文件失败
这是因为hadoop集群在启动时自动进入安全模式 查看安全模式状态:hadoop fs –safemode get 进入安全模式状态:hadoop fs –safemode enter 退出安全模式状 ...
- hadoop集群中动态添加节点
集群的性能问题需要增加服务器节点以提高整体性能 https://www.cnblogs.com/fefjay/p/6048269.html hadoop集群之间hdfs文件复制 https://www ...
- hadoop集群中动态添加新的DataNode节点
集群中现有的计算能力不足,须要另外加入新的节点时,使用例如以下方法就能动态添加新的节点: 1.在新的节点上安装hadoop程序,一定要控制好版本号,能够从集群上其它机器cp一份改动也行 2.把name ...
- hadoop 集群中数据块的副本存放策略
HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性.可用性和网络带宽的利用率.目前实现的副本存放策略只是在这个方向上的第一步.实现这个策略的短期目标是验证它在生产环境下的有效 ...
- 集群中Session共享解决方案分析
一.为什么要Session共享 Session存储在服务器的内存中,比如Java中,Session存放在JVM的中,Session也可以持久化到file,MySQL,redis等,SessionID存 ...
- Hadoop集群中Hbase的介绍、安装、使用
导读 HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. 一.Hbase ...
- hadoop集群中zkfc的作用和工作过程
一. 简单了解NameNode的ZKFC机制 NameNode的HA可以个人认为简单分为共享editLog机制和ZKFC对NameNode状态的控制 一般导致NameNode切换的原因 ZKFC的作用 ...
随机推荐
- 洛谷P1074 靶形数独【dfs】【剪枝】
题目:https://www.luogu.org/problemnew/show/P1074 题意: 数独的分数如下.一个数独的总分数就是权值乘所填数字之和. 现在给一个未完成的数独,问分数最高的数独 ...
- sql里的ROW_NUMBER() OVER是啥意思?
是一个分析函数,生成一个排序列select row_number(XX) over(partition by XXX order by XX [desc/asc]) frou table;partit ...
- 深入理解无穷级数和的定义(the sum of the series)
Given an infinite sequence (a1, a2, a3, ...), a series is informally the form of adding all those te ...
- Page3:组合系统状态空间输入输出描述、矩阵指数函数性质[Linear System Theory]
内容包含组合系统的状态空间描述以及输入输出描述,零输入响应的概念以及矩阵指数函数的性质
- iOS-Core-Animation-Advanced-Techniques/13-高效绘图 【没理解】
#import "DrawingView.h" #import <QuartzCore/QuartzCore.h> @interface DrawingView () ...
- da5_模块
一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包, ...
- 在Linux下用C语言实现短信收发
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyserver/archive/2008/10/01/3007090.aspx 首先,我根据功能需要创建了几个头文件 ...
- vim 私人快捷键备忘录
i 上 k 下 j 左 l 右 ( 上移一段 ) 下移一段 * 搜索关键字 d 删除 y 复制 p 粘贴 h 插入 H 头插 o 下开一行 O 上开一行 f 后跳指定关键字 F 前跳指定关键字 e 字 ...
- js正则表达式:学习网址和部分正则验证
https://www.cnblogs.com/chenmeng0818/p/6370819.html ① 不以0开头的多个数字,但可以是单个0,必须为数字,位数不允许超过10个. var reg=/ ...
- Jenkins打包安卓时提示没同意constraintLayout的license的解决方法
使用Jenkins打包安卓项目时,报错并失败,错误信息: You have not accepted the license agreements of the following SDK compo ...