MapReduce-分布式离线计算框架

MapReduce

Hadoop MapReduce是一个用于轻松编写程序的软件框架,这些程序以可靠的,容错的方式运行于大型集群中(数千个节点)的商用软件上并行处理大量数据(TB级别数据集)。
MapReduce作业通常是将输入的数据集划分为独立的块,这些块完全由Map Task以完全并行的方式处理。框架将Map的输出进行排序,排序后的结果将被放入Reduce Task。通常,作业的输入输出结果都存储于一个文件系统中。框架负责调度任务、监视它们并重新执行失败的任务。通常计算节点和存储节点是相同的,那是因为,MapReduce框架和Hadoop的分布式文件系统是运行在相同的节点集上。这种配置允许框架在数据已经存在的节点上有效地调度任务,从而在集群中产生非常高的聚合带宽。
MapReduce框架由一个主资源管理器、每个集群节点一个工作节点管理器和每个应用程序的MRAppMaster组成。
至少,应用程序通过适当接口和/或抽象类的实现指定输入/输出位置并提供映射和减少函数。这些和其他作业参数组成作业配置。
尽管Hadoop使用Java是实现的,但是MapReduce却不是用Java编写的。

  1. Hadoop
    Streaming是一个实用程序,它允许用户使用任何可执行文件(例如shell实用程序)作为映射器和/或还原器来创建和运行作业。
  2. Hadoop管道是一种支持MapReduce应用程序的Sug兼容的C++ API(非JNI)™ 基于)。

(Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.
A MapReduce job usually splits the input data-set into independent chunks which are processed by the map tasks in a completely parallel manner. The framework sorts the outputs of the maps, which are then input to the reduce tasks. Typically both the input and the output of the job are stored in a file-system. The framework takes care of scheduling tasks, monitoring them and re-executes the failed tasks.
Typically the compute nodes and the storage nodes are the same, that is, the MapReduce framework and the Hadoop Distributed File System (see HDFS Architecture Guide) are running on the same set of nodes. This configuration allows the framework to effectively schedule tasks on the nodes where data is already present, resulting in very high aggregate bandwidth across the cluster.
The MapReduce framework consists of a single master ResourceManager, one worker NodeManager per cluster-node, and MRAppMaster per application (see YARN Architecture Guide).
Minimally, applications specify the input/output locations and supply map and reduce functions via implementations of appropriate interfaces and/or abstract-classes. These, and other job parameters, comprise the job configuration.
The Hadoop job client then submits the job (jar/executable etc.) and configuration to the ResourceManager which then assumes the responsibility of distributing the software/configuration to the workers, scheduling tasks and monitoring them, providing status and diagnostic information to the job-client.
Although the Hadoop framework is implemented in Java™, MapReduce applications need not be written in Java.
Hadoop Streaming is a utility which allows users to create and run jobs with any executables (e.g. shell utilities) as the mapper and/or the reducer.
Hadoop Pipes is a SWIG-compatible C++ API to implement MapReduce applications (non JNI™ based).

在这里插入图片描述在这里插入图片描述

Combiner

在这里插入图片描述

ETL

ETL,Extraction-Transformation-Loading的缩写,中文名称为数据抽取、转换和加载。
一般随着业务的发展扩张,产线也越来越多,产生的数据也越来越多,这些数据的收集方式、原始数据格式、数据量、存储要求、使用场景等方面有很大的差异。作为数据中心,既要保证数据的准确性,存储的安全性,后续的扩展性,以及数据分析的时效性,这是一个很大的挑战。
名词解释:

  • ODS——操作性数据

  • DW——数据仓库

  • List item

  • DM——数据集市
    在这里插入图片描述在这里插入图片描述
    ​一、数据抽取
    数据抽取是指把ODS源数据抽取到DW中,然后处理成展示给相关人员查看的数据
    源数据:

  • 用户访问日志

  • 自定义事件日志、操作日志

  • 业务日志

  • 各服务产生的日志

  • 系统日志:操作系统日志,CDN日志等

  • 监控日志

其它日志
抽取频次:
如果没有特殊要求可以一天一次,但是需要避开拉去日志的高峰期
对于有实时性要求的日志,可以一小时一次,或者直接使用kafka等相关工具收集,需要考虑到系统能否承受
抽取策略:
由于数据量较大,一般都是采用增量抽取,但是对于一些特殊场景的数据,比如订单数据,由于订单的状态会发生变化,并且订单的量级是可预知和相对较少的,就需要采用全量拉取的策略
对于增量拉取的日志,如果是文件类型,可以在文件名称上追加日期,例如 server_log_2018082718.log,这样就可以满足按小时拉取的需求
对于源数据的保留,考虑到突发情况,服务器上的源数据至少要保证2天以上的时间
二、数据转换、清洗
顾名思义​,就是把不需要的和不符合规范的数据进行处理。数据清洗最好不要放在抽取的环节进行,考虑到有时可能会查原始数据。一般各公司都会有自己的规范,以下列出几点仅供参考
​数据清洗主要包括以下几个方面:
空值处理;根据业务需要,可以将空值替换为特定的值或者直接过滤掉;
验证数据正确性;主要是把不符合​业务含义的数据做一处理,比如,把一个表示数量的字段中的字符串替换为0,把一个日期字段的非日期字符串过滤掉等等;
规范数据格式;比如,把所有的日期都格式化成yyyy-MM-dd HH:mm:ss的格式等;
​数据转码;把一个源数据中用编码表示的字段,通过关联编码表,转换成代表其真实意义的值等等;
数据标准,统一;比如在源数据中表示男女的方式有很多种,在抽取的时候,直接根据模型中定义的值做转化,统一表示男女;
其他业务规则定义的数据清洗…
三、数据加载
数据拉取,清洗完之后,就需要展示了。一般是把清洗好的数据加载到mysql中,然后在各系统中使用,或者使用Tableau直接给相关人员展示
四、ETL相关工具
ELT相关的工具有很多,这里只列举一些常用的,而且各公司的技术原型也不一样,就需要根据实际情况来选择
数据抽取工具:

  • kafka
  • flume
  • sync

数据清洗

  • hive/tez
  • pig/tez
  • storm
  • spark

其它工具

  • 数据存储:hadoop、hbase,ES、redis
  • 任务管理:azkaban、oozie
  • 数据同步:datax、sqoop

五、ETL过程中的元数据
试想一下,你作为一个新人接手别人的工作,没有文档,程序没有注释,数据库中的表和字段也没有任何comment,你是不是会望着窗外,一声长叹…
所以元数据管理系统对于数据仓库来说是必须的,并且相关人员必须定时维护,如果元数据和数据仓库中的变动不同步,那么元数据系统就形同虚设。
这里说一句:对于元数据管理不应该是规范,应该是硬性规定。
ETL详解出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值