hadoop和hive的数据处理泪流成
hive Cli常用操作
需求
场景:统计每日用户登录总数
每分钟的原始日志内容如下:
http://www.baidu.com/uid=123&ip=192.168.2.2
假如只有两个字段uid和ip,其中uid是用户的uid
是用户的uid,是用户的唯一标识,ip是用户的
登录ip,每日的记录行数是10亿行,要统计出一天用户登录的总数
处理流程
1、建表
那么我们首先要在hive里面建立一张表,建表语句如下:
表名-login
fields 列分分隔符号
create table login(
uid string,
ip string
)
partitioned by (dt string)
row format delimited
fields terminated by ','
stored as textfile;
其实表名是login,字段之间以,隔开,存储是text,其次
还以dt这个字段作为分区
创建成功之后,会看到hdfs上创建了
/user/hive/warehouse/login这个目录
2、入库
格式完毕,就可以把数据入库到hive了。假设几天
执行的命令
load data local inpath '/hadoop/hive0.9/testHive/test*' overwrite into
table login partition (dt='20150207')
执行成功
3、分析
在hive执行一下语句
select count(distinct uid) from login
where dt='20150207';
使用dt这个分区条件查询,就可以避免hive去查询其他分区的文件
这样减少IO操作,这个是hive分区很重要的特性,也是已
天为单位,作为login表分区的重要意义。
执行完毕后,就可以在命令里出现结果,一般通过管道执行hive shell命令
,读取管道的内容,把结果入库到mysql里就完成了分析了、
分区不能做的太多。
一般是以天做为分区。
hive Cli常用操作
需求
场景:统计每日用户登录总数
每分钟的原始日志内容如下:
http://www.baidu.com/uid=123&ip=192.168.2.2
假如只有两个字段uid和ip,其中uid是用户的uid
是用户的uid,是用户的唯一标识,ip是用户的
登录ip,每日的记录行数是10亿行,要统计出一天用户登录的总数
处理流程
1、建表
那么我们首先要在hive里面建立一张表,建表语句如下:
表名-login
fields 列分分隔符号
create table login(
uid string,
ip string
)
partitioned by (dt string)
row format delimited
fields terminated by ','
stored as textfile;
其实表名是login,字段之间以,隔开,存储是text,其次
还以dt这个字段作为分区
创建成功之后,会看到hdfs上创建了
/user/hive/warehouse/login这个目录
2、入库
格式完毕,就可以把数据入库到hive了。假设几天
执行的命令
load data local inpath '/hadoop/hive0.9/testHive/test*' overwrite into
table login partition (dt='20150207')
执行成功
3、分析
在hive执行一下语句
select count(distinct uid) from login
where dt='20150207';
使用dt这个分区条件查询,就可以避免hive去查询其他分区的文件
这样减少IO操作,这个是hive分区很重要的特性,也是已
天为单位,作为login表分区的重要意义。
执行完毕后,就可以在命令里出现结果,一般通过管道执行hive shell命令
,读取管道的内容,把结果入库到mysql里就完成了分析了、
分区不能做的太多。
一般是以天做为分区。