hive登陆

创建表

 

CREATE TABLE u_data(

  userid INT,

  movieid INT,

  rating INT,

  unixtime STRING)

ROW FORMATDELIMITED

FIELDS TERMINATEDBY '\t'

STORED AS TEXTFILE;

 

ROW FORMAT DELIMITED表示不限制每行的具体格式

FIELDS TERMINATED BY '\t'表示以制表符来分割字段

STOED AS TEXTFILE是使用文本文件的格式来存储数据

导入数据

 

wget

看看是否有这个文件了

解压缩

导入数据

SELECT * FROM u_data LIMIT 10;

SELECT COUNT(*)FROM u_data;

聚合查询

通过MOVIEID分组,然后写出各组的平均等级,这里使用的AVG函数是组内平均数

 

SELECT movieid,avg(rating) FROM u_datagroup by movieid;

wKiom1PEyqqCP6hBAACzoXlcTts657.jpg

...

统计

统计各电影投票次数

 

SELECT movieid,count(rating) FROM u_datagroup by movieid;

...

统计每天每部电影的投票数

CAST(A AS TYPEB)是把A转换成TYPEB类型

FROM_UNIXTIME是吧一个BIGINT转成日期格式,后边可以跟格式模板

 

SELECT movieid,count(rating),from_unixtime(cast(unixtime as bigint),'yyyy-MM-dd') FROM u_data group by movieid,from_unixtime(cast(unixtime as bigint),'yyyy-MM-dd');

 

以此类推,可以写出各种时间和电影的交叉统计,请试写按年中的周数来统计的各部电影的投票数、平均得分统计

提示:

日期转周函数: weekofyear语法:   weekofyear(string date) 

返回值: int
说明: 返回日期在当前的周数。

 

统计每天时段(按小时划分)投票情况,及投票平均分

 

SELECT count(rating),avg(rating),from_unixtime(cast(unixtimeas bigint),'HH') FROM u_data group by from_unixtime(cast(unixtime as bigint),'HH');

排名

 

按平均分排出TOP10

select movieid,avg(rating) ar from u_datagroup by movieid order by ar desc limit 10;

 

删除表

drop table u_data;

Web浏览

通过cloudera可以很方便地配置与管理hadoop集群

请看

实验三

在集群上跑wordcount,出来了200个part,很多是空的。于是先get到本地,再用Linux删掉空文件。

find . -name "*" -type f -size 0c | xargs -n 1 rm -f

也可以直接看内容

hadoop dfs -cat /output/*

实验四是IBM的BigSQL,参见以下网站。

BigSQL是IBM基于Hadoop的定制数据库。用简单的SQL语言就可以操作,较HIVE,HBASE简单。

下载

下载镜像文件。装到虚拟机VMware里。

文档见下列网址