视频1的全了,视频3的还不全 日志数据分析: 1.背景 1.1 黑马论坛日志,数据分为两部分组成,原来是一个大文件(05_30之前),是56GB;以后每天生成一个文件,大约是150-200MB之间; 1.2 日志格式是apache common日志格式; 1.3 分析一些核心指标,供运营决策者使用; 1.4 开发该系统的目的是分了获取一些业务相关的指标,这些指标在第三方工具中无法获得的; 2.开发步骤 2.1 把日志数据上传到HDFS中进行处理 如果是日志服务器数据较小、压力较小,可以直接使用shell命令把数据上传到HDFS中; 如果是日志服务器数据较大、压力较大,使用NFS在另一台服务器上上传数据; 如果日志服务器非常多、数据量大,使用flume进行数据处理; 技术:flume: source: 是从spool directory中拿的 sink: hdfs和Hbase(我们同样要把数据送到Hbase中) channel:文件 2.2 使用MapReduce对HDFS中的原始数据进行清洗(清洗的意思是,数据中不要的就扔掉,需要补充的就补充进来) 技术:Map/Reduce 2.3 使用Hbase存储明细日志,能够利用IP,时间查询(使用Hbase,这部分没讲) 技术:设计表、预分区 (因为我们的数据在Hbase存储的时候,他都是存储在RegionServer中的Region上, 我们发挥Hbase的优势是分布式查询的优势,我们应该尽量多的分一些Region, 让我们的数据尽量均匀的分摊到我们的Region中,这样查询的时候才可以发挥出并行的优势) 具体表结构设计,看ppt 2.4 使用Hive对清洗后的数据进行统计分析,得到PV,独立IP数,跳出数,注册用户数等;(使用hive或者pig) 技术:hive(主要用到Hive的建表操作,比如内部表,分区表,外部表,以及动态修改分区,以及视图,自定义函数操作) 2.5 使用Sqoop把Hive产生的统计结果导出到mysql中; 技术: sqoop 由于数据导入到mysql中,所以我们还需要对mysql表进行设计(这里的表指的是汇总表),具体表结构看PPT 2.6 如果用户需要查看详细数据的话,可以使用HBase进行展现; 注意: 我们这里使用Hive进行统计分析,然后把结果导出到mysql中,被导出到mysql中的数据都是汇总值。 如果我们发现某个IP,他访问的很频繁,我们可能感觉到他有一些异常,我们想看一下这个IP在某一段时间内 干了什么事,访问了什么。看某个IP在指定时间内的活动情况,就需要看详细信息,这些详细信息在我们mysql是拿不到的 因为导出到mysql中的是汇总信息,没有详细信息,如果Mysql要是能存详细信息要hadoop就没什么用了。这些详细信息是Hbase 来做。就说这些明细信息,我们可以用Habase来存储。进行存储的时候关键的是要判断一下你用什么进行查询,也就是说 设置Hbase,关键是设置行健,我们刚才说是用IP和时间来查询,那么我们需要把IP和时间放到行健中。 另外,我们还会用到linux的crontab来做调度,crontab就是一个linux中的定时器,我们的机制是,服务器日志每天都会生成,所以 需要我们的程序每天定时的运行处理,所以需要用crontab做定时器。所以还需要会写linux脚本 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