分布式并行计算MapReduce
一、用自己的话阐明Hadoop平台上HDFS和MapReduce的功能、工作原理和工作过程。
1.HDFS: Hadoop Distributed File System Hadoop分布式文件系统
1.1功能:
1.兼容廉价的硬件设备。2.流数据的读写。3.大数据集。4.简单的文件模型。5.强大的夸平台兼容性。
1.2工作原理:客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block的副本。
1.3工作过程:
l hdfs集群分为两大角色:NameNode,DataNode (Secondary NameNode)
l NameNode负责管理整个文件的元数据(命名空间信息,块信息) 相当于Master
l DataNode负责管理用户的文件数据块 相当于Salve
l 文件会按照固定的大小(block=128M)切成若干块后分布式存储在若干个datanode节点上
l 每一个文件块有多个副本(默认是三个),存在不同的datanode上
l DataNode会定期向NameNode汇报自身所保存的文件block信息,而namenode则会负责保持文件副本数量
l hdfs的内部工作机制会对客户的保持透明,客户端请求方法hdfs都是通过向namenode申请来进行访问
2.MapReduce
2.1功能:MapReduce是一种并行可扩展计算模型,并且有较好的容错性,主要解决海量离线数据的批处理。实现下面目标
易于编程、良好的扩展性、高容错性
2.2工作原理:MapReduce是一种可用于数据处理的编程框架。MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。
2.3工作过程
1,大数据经split划分成大小相等的数据块(数据块的大小一般等于HDFS一个块的大小)以及用户作业程序。
2,系统中有一个负责调度的Master节点和许多的Map工作节点,Reduce工作节点
3,用户作业程序提交给Master节点,Master节点寻找合适的Map节点,并将数据传给Map节点,并且Master也寻找合适的Reduce节点并将数据传给Reduce节点
4,Master节点启动Map节点执行程序,Map节点尽可能的读取本地或本机架上的数据块进行计算。(数据本地化是Mapreduce的核心特征)
5,每个Map节点处理读取的数据块,并做一些数据整理,并且将中间结果放在本地而非HDFS中,同时通知Master节点Map工作完成,并告知中间结果的存储位置。
6,Master节点等所有Map工作完成后,开始启动Reduce节点,Reduce节点通过Master节点掌握的中间结果的存储位置来远程读取中间结果。
7,Reduce节点将中间结果处理后将结果输出到一个文件中。
从用户作业程序角度来看:
一个作业执行过程中有一个Jobtracker和多个Tasktracker,分别对应于HDFS中的namenode和datanode。Jobclient在用户端把已配置参数打包成jar文件存储在HDFS,并把存储路径提交给Jobtracker,然后Jobtracker创建每一个Task,并且分发到Tasktracker服务中去执行。
二、HDFS上运行MapReduce
1)准备文本文件,放在本地/home/hadoop/wc
2)编写map函数和reduce函数,在本地运行测试通过
3)启动Hadoop:HDFS, JobTracker, TaskTracker
4)把文本文件上传到hdfs文件系统上 user/hadoop/input
5)streaming的jar文件的路径写入环境变量,让环境变量生效
6)建立一个shell脚本文件:streaming接口运行的脚本,名称为run.sh
7)source run.sh来执行mapreduce
8)查看运行结果
每位同学准备不一样的大一点英文文本文件,每个步骤截图交上博客上。
上述步骤测试通过之后,可以尝试对文本做处理之后再统计次数,如标点符号、停用词等。
有能力的同学尝试对之前爬虫爬取的文本,在Hadoop上做中文词频统计。