环境:
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