如何通过 Hadoop MapReduce 进行数据分析?
1 Hadoop MapReduce 大数据分析
1.1 什么是Hadoop MapReduce
Hadoop MapReduce 是一种大数据分析平台,它利用Hadoop分布式计算框架去解决大规模数据处理任务,它分为Map(映射)阶段和Reduce(聚集或者汇总)阶段,Hadoop MapReduce框架通过将大规模数据任务分解成若干个Sub-Task来实现分布式计算,从而完成大数据处理。
1.2 Hadoop MapReduce 的优势
(1)海量数据处理能力。数据量比较大,Hadoop MapReduce能够高效的处理海量的数据,比关系型数据库快得多,它能够支持TB\PB级别的数据处理,实现数据从收集,存储,分析一系列的功能。 (2)分布式弹性。Hadoop MapReduce将原本单机处理的数据通过多机器同时处理,能够更加有效的处理数据,随着任务量的增大可以根据实际需求添加节点来满足业务流量需求,减少等待时间,加快数据处理速度。 (3)容错性。Hadoop MapReduce支持多个磁盘的容错机制,如果磁盘发生故障,它只需复制服务器上的数据就可以实现数据容灾,这样Hadoop MapReduce能够有效的保证系统的可靠性。 (4)价格低廉。由于Hadoop MapReduce使用的廉价机器,开启高度大规模数据分析,由于使用的服务器价格可以大大减少,因此Hadoop MapReduce可以实现高层次的数据分析,帮助企业提高效率,降低维护难度,价格可以大大降低。
2 Hadoop MapReduce 数据分析步骤
2.1 数据准备
Hadoop MapReduce数据分析任务的第一步就是要准备好数据,让它可以被Hadoop MapReduce识别和处理。这一步对于加快数据处理和改善分析准确性至关重要,有时,它可能需要进行清理和整理,具体的操作步骤有: (1)确定需要的数据; (2)确定数据格式; (3)设定计算参数; (4)收集和准备数据。
2.2 Map阶段
Map阶段相当于将原始数据分解成许多小任务,每一个小任务都会有一个Mapper分布在集群中去执行,Map阶段最终会生成一个中间结果。
例如有一个用户统计,原始数据为JSON格式如下:
{"user": "Alice","gender":"female","job":"engineer"}
{"user": "Bob","gender":"male","job":"teacher"}
那么,Map阶段第一步需要定义Map函数:
def map(user, gender, job):
# 输出gender作为key,1作为value
emit(gender, 1)
那么Map阶段执行后的中间结果就会生成两个键值对,即:
female:1
male:1
2.3 Reduce阶段
Reduce阶段就是利用Map阶段生成的中间结果进行汇总,汇总后就可以得出最终的结果了。 Reduce阶段第一步,需要定义Reduce函数:
def reduce(gender,values):
# 统计每个 gender 的数量
sum = 0
for value in values:
sum = sum + value
emit(gender,sum)
执行Reduce阶段后,最终得到的结果就是:
female:1
male:1
3 Hadoop MapReduce 代码示例
3.1 定义Mapper函数
Mapper 函数的格式如下:
def map(key, value):
pass
下面就给出一个简单的Mapper代码示例:
def map(key, value):
# 对value中每一个字母都输出一个key,value都是1
for letter in value:
emit(letter, 1)
3.2 定义Reducer函数
Reduce 函数的格式如下:
def reduce(key, values):
pass
下面就给出一个简单的Mapper代码示例:
def reduce(key, values):
# 统计key出现的次数
sum = 0
for value in values:
sum = sum + value
emit(key,sum)
综上所述,通过 Hadoop MapReduce 对数据进行大数据分析的步骤就为如下几个: (1)数据准备; (2)定义Map函数; (3)定义Reduce函数; (4)执行程序并获得最后结果。