最近工作中用了了Hadoop,比如用Hadoop来处理广告的一些pv量数据、点击数据等,最后统计后给运营展示每个广告的数据报表
首先自己了解了一些关于Hadoop的概念知识
hadoop平台提供了分布式存储(hdfs),分布式计算(mapredduce),任务调度(YARN)、对象存储(Ozone)、和组件支撑服务
Hadoop主要用来存储以及处理大量并且复杂的数据. 他是由java编写的, 最核心的三个组件分别是HDFS, MapReduce, Yarn。
主要使用场景有三个:
- 存储大量的数据
- 处理不同格式的数据, 包括结构性的数据, 比如关系型数据库里面的数据 以及日常生活中大量存在的非结构化以及半结构化的数据
- 快速处理大量数据,主要用于实时分析
HDFS负责存储
MapReduce则负责处理数据啦, 它分为Map和Reduce两个阶段. Map负责将我们需要的数据从不同的电脑上拿出来, Reduce则负责对数据进行统计分析啦, 比如计数以及筛选。
Yarn 负责资源的分配以及调度.
hadoop就是用来做大文件存储以及数据处理的框架。
为了存储大量数据和查询数据
Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的
hdfs:就是一个文件系统,可以存储海量的数据
mapredduce:从海量的数据中,通过一定的算法,计算出有用信息
hive:就是sql语句解释器,接收用户输入的sql语句,然后将sql语句翻译成复杂的mapreduce程序,并发布到mr集群中进行运算,也是计算出有用的信息。
hbase:mysql是基于linux/window 的文件系统的数据库,而hbase就是基于hdfs文件系统的数据库
flume:就是一个水泵,将水从一个源水坑,抽到到另一个目的水坑中,当然flumen抽的是数据,将数据从一个文件抽取到另一个文件中
sqoop:将hdfs文件系统的文件,导出到Linux文件系统的文件中,就像豌豆荚的应用程序,实现android系统和window系统之间文件的导入导出
ooize/azkaban:一个完整的业务(word)是由多个任务(task)相互配合完成
我在应用中,配置了crontab,写了shell脚本,这个脚本是主流程,每天定时开始处理数据
1、引入了jdk包,以及hadoop的目录,设置的日期是前一天
2、将数据源,也就是记录日志的机器把日志推送到使用的服务器,比如点击的数据、pv的log
3、使用hadoop开始创建一个新目录,将推送过来的数据put到该目录
4、点击数据同上一步
5、引入java的jar 了,这一步就是实现mapreduce,比如我新建的方法pvMapper extends MapReduceBase implemns Mapper,然后就是解析刚才保存的日志,根据广告位的唯一id,获取想要的广告位,再取这个广告位下的所有广告,然后按照一定的算法设置将想要的数据进行处理,处理后放到一个文件中。
6、get这个文件,按照一定的参数排列获取写入一个小时的问题,比如需要按照小时记录
7、最后将日志文件推送到处理数据的服务器
8、在那台服务器使用脚本解析文件,入库即可。
9、最后清空文件目录
我大概就是按照这个流程做的一个日志的数据处理。总结一下。
网上很多mapreduce的文件,拿到改成自己的文件路径和处理数据格式直接用就可以啦。