免费预览已结束,剩余21页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子科技大学成都学院云计算系实践专周设计报告课 程 名 称:基于Hadoop2.0并行数据处理应用指导 教师 组: 组长学号姓名: 组员学号姓名: 组员学号姓名: 科学与技术2015年12月目 录目 录第1章引言11.1 设计目标11.2 功能描述11.3 设计思路1第2章相关技术介绍22.1 平台介绍22.2 MapReduce并行程序设计22.3 HDFS简介3第3章环境搭建43.1 节点配置43.2 Java环境配置53.3 Hadoop集群安装53.3.1 修改配置文件53.3.2 验证Hadoop集群环境73.4 Eclipse安装配置7第4章号码统计94.1 程序设计94.2 程序分析和设计94.2.1 Map过程94.2.2 Reduce过程104.2.3 Run过程104.3 运行结果12第5章倒排索引145.1 程序简介145.2 分析和设计145.2.1 Map过程145.2.2 Combine过程155.2.3 Reduce过程165.3 运行结果17第6章测试和总结196.1 调试过程中存在的问题及解决方案196.2 收获及心得体会20致谢2121第1章 引言第1章 引言1.1 设计目标搭建Hadoop分布式集群环境,编写Map/Reduce程序。1.2 功能描述使用Eclipse 编写,运行,调试Map/Reduce程序,编写两个搭建在Hadoop平台下的应用程序。1) 对所有拨打至同一号码的所有来电号码进行统计输出。2) 使用倒排索引,对不同文档下的内容进行处理,指出出现的所有字段所在的文档和重复的次数,并将结果输出。1.3 设计思路 首先搭建Hadoop分布式集群环境,配置Hadoop环境,安装JDK配置JAVA环境,安装Eclipse,配置Eclipse并导入Hadoop-eclipse jar包,编写Map/Reduce程序。第3章 环境搭建第2章 相关技术介绍2.1 平台介绍Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。2.2 MapReduce并行程序设计MapReduce整体工作原理如下:首先, client发起任务请求,接着server会fork一些进程,包括一个master和一些map worker,以及一些reduce worker。其中master中包含job tracker,用来进行任务分发与监控,而且每个worker里面包含task tracker。然后,job tracker把数据处理任务分发给各个map,每个map都分到一些数据集,一个子数据集只能由一个map来处理。其中,map处理完结果是存放在内存里的,这里会进行partition,将数据结果拆分成与reduce等量的任务。如果有N个map,M个reduce,那么partition就会将map结果拆分成M份。当一个map节点内存快满的时候,进行spill把数据导入本地磁盘,这个时候进行简单的分类与化简,也即sort和combiner。而reduce端则从各个map的磁盘中获取自己所属的partition,将数据进行分类与合并,然后进行reduce的操作,完成分布式处理。2.3 HDFS简介Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。第3章 环境搭建3.1 节点配置1. 修改当前机器名称图3-1 修改Hostname2. 配置hosts文件分别将Hadoop地址、Master和两个slave的IP地址添加至hosts文件当中。图3-2 Hosts文件3. 安装配置SSH免密码登录1)查看/home/用户名/下是否有.ssh文件夹,且.ssh文件下是否有两个刚生产的无密码密钥对。图3-3 查看.ssh文件夹2)生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥)。图3-4 生成的秘钥3.2 Java环境配置1. 编辑/etc/profile文件,添加java路径图3-5 Profile文件2. 验证配置使用java version验证配置是否成功图3-6 验证java配置3.3 Hadoop集群安装3.3.1 修改配置文件1.配置hadoop-env.sh文件图3-7 Hadoop-env.sh文件配置2.配置core-site.xml文件图3-8 Core-site.xml文件配置3.配置hdfs-site.xml文件图3-9 Hdfs-site.xml文件配置4.配置yarn-site.xml文件图3-10 Yarn-site.xml文件配置3.3.2 验证Hadoop集群环境1.启动hadoop图3-11 启动hadoop2.验证hadoop环境图3-12 验证hadoop环境3.4 Eclipse安装配置1.拷贝hadoop-0.20.203-eclipse-plugin.jar到eclipse-plugin然后启动eclipse。在eclipse中的window的preferences的Hadoop Map/Reduce下添加hadoop的路径。图3-132.配置mapreduce/Location.首先在Window中找到并打开Mapreduce视图并打开。图3-14 Map/Reduce Location视图添加Hadoop Location,并配置其中的内容。图3-15 Hadoop Location配置3.创建MapReduce工程,实现程序设计。第4章 号码统计第4章 号码统计4.1 程序设计此程序基于Mapreduce平台运行,能够分析一份通话记录,将所有拨打至指定号码的电话号码记录下来并重新输出到新的文档当中。从源文件中抓取数据,并将数据上传至HDFS中,再由Mapper程序进行筛选、分割并输出所有有效数据,HDFS收到新数据后,新建一个Output文本并将结果输出到其中。4.2 程序分析和设计4.2.1 Map过程从源文件(通话记录)当中提取所需数据,然后分割原始数据,将被叫作为KEY,将主叫作为VALUE。本节代码:public static class Map extends Mapper public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException / 读取源文件,line得到的就是输入文件的一行数据 String line = value.toString(); try / 数据处理 String lineSplit = line.split( ); / 对源数据进行分割重组 String anum = lineSplit0; / 主叫 String bnum = lineSplit1; / 被叫 context.write(new Text(bnum), new Text(anum); / 输出 catch (ArrayIndexOutOfBoundsException e) context.getCounter(Counter.LINESKIP).increment(1); / 出错令计数器加1 4.2.2 Reduce过程将Map过程所得的Key值和Value值组合成所需的格式,然后将数据交还给HDFS处理。此节代码:public static class Reduce extends Reducer public void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException String valueString; String out = ; / 每个value代表Map函数发送的一个value / 在这里代表拨打了这个被叫号码的一个主叫 for (Text value : values) valueString = value.toString(); out += valueString + |; context.write(key, new Text(out); 4.2.3 Run过程设定输入和输出路径,指定Map类和Reduce类作为相应任务代码,并设置Key和Value的输出格式。此节代码:public int run(String args) throws Exception Configuration conf = getConf(); Job job = new Job(conf, test_job); / 任务名 job.setJarByClass(phoneNum.class); / 执行class FileInputFormat.addInputPath(job, new Path(args0); / 输入路径 FileOutputFormat.setOutputPath(job, new Path(args1); / 输出路径 job.setMapperClass(Map.class); / 指定上面Map类作为MAP任务代码 job.setReducerClass(Reduce.class); / 指定上面Reduce类作为REDUCE任务代码 job.setOutputFormatClass(TextOutputFormat.class); job.setOutputKeyClass(Text.class); / 指定输出KEY的格式 job.setOutputValueClass(Text.class); / 指定输出VALUE的格式等哈 job.waitForCompletion(true); return job.isSuccessful() ? 0 : 1; public static void main(String args) throws Exception int res = ToolRunner.run(new Configuration(), new phoneNum(), args ); System.exit(res); 4.3 运行结果图4-1 输入文本1图4-2 输入文本2图4-3 输出结果图4-4 文件列表第5章 倒排索引第5章 倒排索引5.1 程序简介倒排索引(Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。两种不同的倒排索引形式:1.一条记录的水平倒排索引(或者倒排档案索引)包含每个引用单词的文档的列表。2.一个单词的水平倒排索引(或者完全倒排索引)又包含每个单词在一个文档中的位置。后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。5.2 分析和设计5.2.1 Map过程首先使用默认的TextInputFormat类对输入文件进行处理,得到文本中每行的偏移量及其内容,Map过程首先必须分析输入的对,得到倒排索引中需要的三个信息:单词、文档URI和词频。然而Map过程存在两个问题:1.对只能有两个值,在不使用Hadoop自定义数据类型的情况下,需要根据情况将其中的两个值合并成一个值,作为value或key值;2. 通过一个Reduce过程无法同时完成词频统计和生成文档列表,所以必须增加一个Combine过程完成词频统计此节代码:public class InvertedIndex public static class InvertedIndexMapper extends Mapper private Text keyInfo = new Text(); private Text valueInfo = new Text(); private FileSplit split; public void map(Object key, Text value, Context context) throws IOException, InterruptedException split = (FileSplit)context.getInputSplit(); StringTokenizer itr = new StringTokenizer(value.toString(); while(itr.hasMoreTokens() keyInfo.set(itr.nextToken() + : + split.getPath().toString(); valueInfo.set(1); context.write(keyInfo, valueInfo); 5.2.2 Combine过程将key值相同的value值累加,得到一个单词在文档中的词频。此节代码:public static class InvertedIndexCombiner extends Reducer private Text info = new Text(); public void reduce(Text key, Iterablevalues, Context context) throws IOException, InterruptedException int sum = 0; for(Text value : values) sum += Integer.parseInt(value.toString(); int splitIndex= key.toString().indexOf(:); info.set(key.toString().substring(splitIndex + 1) + : + sum); key.set(key.toString().substring(0, splitIndex); context.write(key, info); 5.2.3 Reduce过程Reduce过程只需将相同key值的value值组合成倒排索引文件所需的格式即可,剩下的事情就可以直接交给MapReduce框架进行处理了。此节代码:public static class InvertedIndexReducer extends Reducer private Text result = new Text(); public void reducer(Text key, Iterablevalues, Context context) throws IOException, InterruptedException String fileList = new String(); for(Text value : values) fileList += value.toString() + ; result.set(fileList); context.writ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论