在hadoop中创建表MySQL命令_hadoop日志数据分析开发步骤及代码

本文介绍了如何在Hadoop环境中处理日志数据分析的全过程,包括将日志上传到HDFS、使用MapReduce清洗数据、通过Hive进行统计分析、使用Sqoop将结果导入MySQL,并提供了详细的Shell脚本和Hive SQL代码示例。
摘要由CSDN通过智能技术生成

日志数据分析:

1.背景

1.1 hm论坛日志,数据分为两部分组成,原来是一个大文件,是56GB;以后每天生成一个文件,大约是150-200MB之间;

1.2 日志格式是apache common日志格式;每行记录有5部分组成:访问ip、访问时间、访问资源、访问状态、本次流量;27.19.74.143 - - [30/May/2013:17:38:20 +0800] "GET /static/image/common/faq.gif HTTP/1.1" 200 1127

1.3 分析一些核心指标,供运营决策者使用;

1.4 开发该系统的目的是分了获取一些业务相关的指标,这些指标在第三方工具中无法获得的;(第三方工具:百度统计)

2.开发步骤

2.1 把日志数据上传到HDFS中进行处理

如果是日志服务器数据较小、压力较小,可以直接使用shell命令把数据上传到HDFS中;

如果是日志服务器数据较大、压力较大,使用NFS在另一台服务器上上传数据;(NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。)

如果日志服务器非常多、数据量大,使用flume进行数据处理;

2.2 使用MapReduce对HDFS中的原始数据进行清洗;

2.3 使用Hive对清洗后的数据进行统计分析;

2.4 使用Sqoop把Hive产生的统计结果导出到mysql中;指标查询--mysql

2.5 如果用户需要查看详细数据的话,可以使用HBase进行展现;明细查询--HBase

3.流程代码(具体实际操作步骤见下面)

3.1 使用shell命令把数据从linux磁盘上传到HDFS中

3.1.1 在hdfs中创建目录,命令如下

$HADOOP_HOME/bin/hadoop fs -mkdir /hmbbs_logs

3.1.2 写一个shell脚本,叫做upload_to_hdfs.sh,内容大体如下

yesterday=`date --date='1 days ago' +%Y_%m_%d`

hadoop fs -put /apache_logs/access_${yesterday}.log /hmbbs_logs

3.1.3 把脚本upload_to_hdfs.sh配置到crontab中,执行命令crontab -e, 写法如下

* 1 * * * upload_to_hdfs.sh

3.2 使用MapReduce对数据进行清洗,把原始处理清洗后,放到hdfs的/hmbbs_cleaned目录下,每天产生一个子目录。

3.3 使用hive对清洗后的数据进行统计。

3.3.1 建立一个外部分区表,脚本如下

CREATE EXTERNAL TABLE hmbbs(ip string, atime string, url string) PARTITIONED BY (logdate string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/hmbbs_cleaned';

3.3.2 增加分区,脚本如下

ALTER TABLE hmbbs ADD PARTITION(logdate='2013_05_30') LOCATION '/hmbbs_cleaned/2013_05_30';

把代码增加到upload_to_hdfs.sh中,内容如下

hive -e "ALTER TABLE hmbbs ADD PARTITION(logdate='${yesterday}') LOCATION '/hmbbs_cleaned/${yesterday}';"

3.3.3 统计每日的pv,代码如下

CREATE TABLE hmbbs_pv_2013_05_30 AS SELECT COUNT(1) AS PV FROM hmbbs WHERE logdate='2013_05_30';

统计每日的注册用户数,代码如下

CREATE TABLE hmbbs_reguser_2013_05_30 AS SELECT COUNT(1) AS REGUSER FROM hmbbs WHERE logdate='2013_05_30' AND INSTR(url,'member.php?mod=register')>0;

统计每日的独立ip,代码如下

CREATE TABLE hmbbs_ip_2013_05_30 AS SELECT COUNT(DISTINCT ip) AS IP FROM hmbbs WHERE logdate='2013_05_30';

统计每日的跳出用户,代码如下

CREATE TABLE hmbbs_jumper_2013_05_30 AS SELECT COUNT(1) AS jumper FROM (SELECT COUNT(ip) AS times FROM hmbbs WHERE logdate='2013_05_30' GROUP BY ip HAVING times=1) e;

把每天统计的数据放入一张表

CREATE TABLE hmbbs_2013_05_30 AS SELECT '2013_05_30', a.pv, b.reguser, c.ip, d.jumper FROM hmbbs_pv_2013_05_30 a JOIN hmbbs_reguser_2013_05_30 b ON 1=1 JOIN hmbbs_ip_2013_05_30 c ON 1=1 JOIN hmbbs_jumper_2013_05_30 d ON 1=1 ;

3.4 使用sqoop把数据导出到mysql中

*********************************************

日志数据分析详细步骤(自己实际操作成功的步骤):

1、使用shell把数据从Linux磁盘上上传到HDFS中

在Linux上/usr/local/下创建一个目录:mkdir apache_logs/,然后复制两天的日志数据放到此文件夹下。

在HDFS中创建存放数据的目录:hadoop fs -mkdir /hmbbs_logs

hadoop fs -put /usr/local/apache_logs/* /hmbbs_logs

上传结束了,在hadoop0:50070中观察到在/hmbbs/目录下有两个日志文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值