Hive构建日搜索引擎日志数据分析系统
1.数据预处理
根据自己或者学校系统预制的数据
使用less sogou.txt可查看
wc -l sogou.txt 能够查看总行数
2.数据扩展部分
我的数据位置存放在 /data/bigfiles
点击q退出
将一个文件的内容传递到另一个目录文件下
原数据在 /data/bigfiles ->传递 到/data/workspace
awk -F '\t' '{print $0 "\t" substr($1,1,4) "\t" substr($1,5,2) "\t" substr($1,7,2) "\t" substr($1,9,2)}' /data/bigfiles/sub_sogou.txt>/data/workspace/sub_sogou-ext.txt
继续使用less命令可以查看数据扩展结果
3.数据加载
将数据加载到HDFS
hdfs dfs -mkdir -p /sogou/20111230
hdfs dfs -put /data/workspace/sub_sogou.txt /sogou/20111230
hdfs dfs -mkdir -p /sogou_ext/20111230
hdfs dfs -put /data/workspace/sub_sogou.txt /sogou_ext/20111230
基于Hive构建日志数据的数据仓库
要记得启动hive
接下来的操作均在hive客户端完成
1.基本操作
查看数据库的命令:show databases;
创建数据库sogou:create database if not exists sogou;
接下来使用数据库:use sogoul
查看表名:show tables;
创建外部表sogou_22106128用于加载sogou.txt的数据
CREATE EXTERNAL TABLE sogou.sogou_22106128 (
ts STRING,
uid STRING,
keyword STRING,
rank INT,
order_num INT,
url STRING
)
COMMENT 'This is the sogou search data of one day'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/sogou/22106128';
desc sogou_22106128可查看相关字段和类型
2.创建分区(按照年、月、日、小时)
创建四个字段数据的外部表
CREATE EXTERNAL TABLE sogou.sogou_ext_22106128 (
ts STRING,
uid STRING,
keyword STRING,
rank INT,
order1 INT,
url STRING,
year INT,
month INT,
day INT,
hour INT
)
COMMENT 'this is the sogou search data of extend'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/sogou_ext/22106128';
创建好后创建分区表:
CREATE EXTERNAL TABLE sogou.sogou_partition (
ts STRING,
uid STRING,
keyword STRING,
rank INT,
order1 INT,
url STRING
)
PARTITIONED BY (year INT, month INT, day INT, hour INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/path/to/sogou_partition';
最后向分区表sogou_partition中载入数据:
set hive.exec.dynamic.partition.mode=nonstrict; //开启动态分区模式为非严格的
这部分参考的老师的代码: