搜狗搜索日志分析系统500w数据(一、数据预处理(Linux))

环境:
maxos上parallel虚拟机安装的centos7
hadoop2.6.0

一、数据预处理(Linux环境)

搜狗数据的数据格式:
访问时间\t 用户 ID\t[查询词]\t 该 URL 在返回结果中的排名\t 用户点击的顺序号\t 用户点击的 URL

其中,用户 ID 是根据用户使用浏览器访问搜索引擎时的 Cookie 信息自动赋值,即同一次使用浏览器输入的不同查询对应同一个用户 ID。

1.查看数据
进入实验数据文件夹

[hadoop@localhost ~]$ cd /home/hadoop/resources/sogou-data/500w

less查看

[hadoop@localhost 500w]$ less sogou.500w.utf8


(注:进入less查看后,按e可以查看下一条数据,按q退出。)

查看总行数:

[hadoop@localhost 500w]$ wc -l sogou.500w.utf8

在这里插入图片描述
2.数据扩展
将时间字段拆分并拼接,添加年、月、日、小时字段

[hadoop@localhost resources]$ sudo mkdir ide-code
[hadoop@localhost resources]$ cd ide-code
[hadoop@localhost ide-code]$ sudo vim sogou-log-extend.sh

然后在sogou-log-extend.sh中输入下面的内容,并保存

#!/bin/bash
#infile=/data/sogou-data/sogou.500w.utf8
infile=$1
#outfile=/data/sogou-data/sogou.500w.utf8.final
outfile=$2
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)}' $infile > $outfile

注:awk截取字段–substr()
substr(列,开始字符,截取长度)
第1个参数是列,从1开始,第1列是$1,第2列是$2,…
第2个参数是开始字符,从1开始
第3个参数是截取的长度

[hadoop@localhost ide-code]$ sudo bash sogou-log-extend.sh /home/hadoop/resources/sogou-data/500w/sogou.500w.utf8 /home/hadoop/resources/sogou-data/500w/sogou.500w.utf8.ext

3.数据过滤
过滤第 2 个字段(UID)或者第 3 个字段(搜索关键词)为空的行(需要用第 2 步数据扩展的结果)

[hadoop@localhost ide-code]$ sudo vim sogou-log-filter.sh

然后在sogou-log-filter.sh中输入下面的内容,并保存

#!/bin/bash
#infile=/data/sogou-data/sogou.500w.utf8.ext
infile=$1
#outfile=/data/sogou-data/sogou.500w.utf8.flt
outfile=$2
awk -F "\t" '{if($2 != "" && $3 != "") print $0}' $infile > $outfile

注:
shell命令awk '{print $0}' 1.txt 的意思是输出1.txt文件的所有内容。
shell命令awk '{print $1}' 1.txt的意思是输出1.txt文件的第一列内容。

[hadoop@localhost ide-code]$ sudo bash sogou-log-filter.sh /home/hadoop/resources/sogou-data/500w/sogou.500w.utf8.ext /home/hadoop/resources/sogou-data/500w/sogou.500w.utf8.flt

(其实wc一下,发现一条都没被滤掉。。。)

数据加载到HDFS上

首先hadoop集群要配置好

参考博客:
1.【厦大林子雨数据库实验室】Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0:http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/

[hadoop@localhost ~]$ hdfs dfs -mkdir -p /sogou/20111230

结果报错:

[hadoop@localhost ~]$ hdfs dfs -mkdir -p /sogou/20111230
19/10/21 16:14:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

解决方法:
1.【CSDN】Hadoop _ 疑难杂症 解决1 - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat…:https://blog.csdn.net/u010003835/article/details/81127984

然后继续:

[hadoop@localhost ~]$ hdfs dfs -mkdir -p /sogou/20111230
[hadoop@localhost ~]$ hdfs dfs -put /home/hadoop/resources/sogou-data/500w/sogou.500w.utf8 /sogou/20111230
[hadoop@localhost ~]$ hdfs dfs -mkdir -p /sogou_ext/20111230
[hadoop@localhost ~]$ hdfs dfs -put /home/hadoop/resources/sogou-data/500w/sogou.500w.utf8.flt /sogou_ext/20111230

你可能感兴趣的:(大数据存储与处理)