1.项目是要对apache日志进行分析
2.数据特点:apache log,每天产生一个日志文件
3.项目需要对历史日志文件和每天的日志文件进行处理
4.处理步骤
4.1 把linux上的logs上传到hdfs中
4.1.1 当前apache logs与hadoop在同一台服务器,可以直接使用命令上传;
上传的命令写在shell脚本中,该脚本区分是一次性上传所有历史日志和每天重复执行的。
init.sh
daily.sh
把daily.sh配置到crontab中,使其每天都执行。执行命令crontab -e编辑配置:
* 1 * * * /apache_logs/daily.sh
4.1.2 当apache logs与hadoop不在同一台服务器时,可以使用nfs共享磁盘的方式访问;
4.1.2 当apache server很多时,可以使用flume进行分布式数据收集处理;
4.2 数据清洗,把原始数据中与业务无关的信息、脏数据等处理掉,统一放到/hmbbs_cleaned/YYYY-mm-dd
4.3 使用hive的外部分区表处理数据
4.3.1 创建一个外部分区表
CREATE EXTERNAL TABLE hmbbs(ip string,logtime string, url string) PARTITIONED BY (logdate string) ROW FORMATDELIMITED FIELDS TERMINATED BY '\t' LOCATION '/hmbbs_cleaned';
4.3.2 每天要修改分区字段,添加分区
ALTER TABLE hmbbs ADD PARTITION(logdate="2013_05_31") LOCATION "/h-mbbs_cleaned/2013_05_31";
4.3.3 统计某一天的指标
--pv
SELECT COUNT(1) FROM hmbbs WHERElogdate='2013_05_30';
CREATE TABLE pv_2013_05_30 AS SELECT'2013_05_30', COUNT(1) FROM hmbbs WHERE logdate='2013_05_30';
--reguser
SELECT COUNT(1) FROM hmbbs WHERElogdate='2013_05_30' AND instr(url, 'member.php?mod=register')>0;
CREATE TABLE reguser_2013_05_30 AS SELECT'2013_05_30', COUNT(1) FROM hmbbs WHERE logdate='2013_05_30' AND instr(url,'member.php?mod=register')>0;
--ip
SELECT COUNT(distinct ip) FROM hmbbs WHERElogdate='2013_05_30';
CREATE TABLE ip_2013_05_30 AS SELECT'2013_05_30', COUNT(distinct ip) FROM hmbbs WHERE logdate='2013_05_30';
--jumper
SELECT COUNT(1) FROM (SELECT ip, COUNT(1)FROM hmbbs WHERE logdate='2013_05_30' GROUP BY ip HAVING COUNT(1)=1) t;
CREATE TABLE jumper_2013_05_30 AS SELECT'2013_05_30', COUNT(1) FROM (SELECT ip, COUNT(1) FROM hmbbs WHERElogdate='2013_05_30' GROUP BY ip HAVING COUNT(1)=1) t;
4.3.4 把每天的统计结果导出到mysql中
sqoopexport --connect jdbc:mysql://hadoop0:3306/hmbbs --username root --passwordadmin --table daily_pv--export-dir '/user/hive/warehouse/pv_2013_05_30' --fields-terminated-by '\001'
sqoopexport --connect jdbc:mysql://hadoop0:3306/hmbbs --username root --passwordadmin --table daily_reguser--export-dir '/user/hive/warehouse/reguser_2013_05_30' --fields-terminated-by '\001'
sqoopexport --connect jdbc:mysql://hadoop0:3306/hmbbs --username root --passwordadmin --table daily_ip--export-dir '/user/hive/warehouse/ip_2013_05_30' --fields-terminated-by '\001'
sqoopexport --connect jdbc:mysql://hadoop0:3306/hmbbs --username root --passwordadmin --table daily_jumper--export-dir '/user/hive/warehouse/jumper_2013_05_30' --fields-terminated-by '\001'
4.4 使用hbase查询明细数据
4.4.1 创建hbase数据库,执行create'hmbbs','cf'