数据清洗

视频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

    
原文地址:https://www.cnblogs.com/mrxiaohe/p/5274338.html