尚学堂Hadoop入门教程(一)如何使用Hadoop分析数据

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数据培训、web前端培训机构,0元入学,先就业后付款,平均就业薪水9500以上北京尚学堂提供Hadoop从这里开始!和我一起学习下使用Hadoop的基本知识,下文将以HadoopTutorial为主体带大家走一遍如何使用Hadoop分析数据!这个专题将描述用户在使用HadoopMapReduce(下文缩写成MR)框架过程中面对的最重要的东西。Mapreduce由clientAPIs和运行时(runtime)环境组成。其中clientAPIs用来编写MR程序,运行时环境提供MR运行的环境。API有2个版本,也就是我们通常说的老api和新api。运行时有两个版本:MRv1和MRv2。该教程将会基于老api和MRv1。其中:老api在org.apache.hadoop.mapred包中,新api在org.apache.hadoop.mapreduce中。前提首先请确认已经正确安装、配置了CDH,并且正常运行。MR概览HadoopMapReduce是一个开源的计算框架,运行在其上的应用通常可在拥有几千个节点的集群上并行处理海量数据(可以使P级的数据集)。MR作业通常将数据集切分为独立的chunk,这些chunk以并行的方式被maptasks处理。MR框架对map的输出进行排序,然后将这些输出作为输入给reducetasks处理。典型的方式是作业的输入和最终输出都存储在分布式文件系统(HDFS)上。通常部署时计算节点也是存储节点,MR框架和HDFS运行在同一个集群上。这样的配置允许框架在集群的节点上有效的调度任务,当然待分析的数据已经在集群上存在,这也导致了集群内部会产生高聚合带宽现象(通常我们在集群规划部署时就需要注意这样一个特点)。MapReduce框架由一个Jobracker(通常简称JT)和数个TaskTracker(TT)组成(在cdh4中如果使用了JobtrackerHA特性,则会有2个Jobtracer,其中只有一个为active,另一个作为standby处于inactive状态)。JobTracker负责在所有tasktracker上调度任务,监控任务并重新执行失败的任务。所有的tasktracker执行jobtracker分配过来的任务。应用至少需要制定输入、输出路径,并提供实现了适当接口和(或)抽象类的map和reduce函数。这些路径和函数以及其他的任务参数组成了任务配置对象(jobconfiguration)。Hadoop任务客户端提交任务(jar包或者可执行程序等)和配置对象到JT。JT将任务实现和配置对象分发到数个TT(由JT分配),调度、监控任务,并向客户端返回状态和检测信息。Hadoop由JavaTM实现,用户可以使用java、基于JVM的其他语言或者以下的方式开发MR应用:HadoopStreaming-允许用户以任何一种可执行程序(如shell脚本)实现为mapper和(或)reducer来创建和运行MR任务。HadoopPigs–一种兼容SWIG(不基于JNITM)的C++API,用来实现MapReduce应用。北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数据培训、web前端培训机构,0元入学,先就业后付款,平均就业薪水9500以上输入和输出MapReuce框架内部处理的是kv对(key-valuepair),因为MR将任务的输入当做一个kv对的集合,将输出看做一个kv对的集合。输出kv对的类型可以不同于输入对。key和vaue的类型必须在框架内可序列化(serializable),所以keyvalue必须实现Writable接口。同时,key类必须实现WritableComparable以便框架对key进行排序。典型的MR任务输入和输出类型转换图为:(input)k1-v1-map-k2-v2-combine-k2-v2-reduce-k3-v3(output)经典的WordCount1.0玩Hadoop不得不提WordCount,CDH原文里也以这为例,当然这里也以它为例:)简单说下WordCount,它是计算输入数据中每个word的出现次数。因为足够简单所以经典,和HelloWorld有的一拼!上源码:12345678910111213141516171819202122packageorg.myorg;importjava.io.IOException;importjava.util.*;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.conf.*;importorg.apache.hadoop.io.*;importorg.apache.hadoop.mapred.*;importorg.apache.hadoop.util.*;publicclassWordCount{publicstaticclassMapextendsMapReduceBaseimplementsMapperLongWritable,Text,Text,IntWritable{privatefinalstaticIntWritableone=newIntWritable(1);privateTextword=newText();publicvoidmap(LongWritablekey,Textvalue,OutputCollectorText,IntWritableoutput,Reporterreporter)throwsIOException{Stringline=value.toString();StringTokenizertokenizer=newStringTokenizer(line);while(tokenizer.hasMoreTokens()){北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数据培训、web前端培训机构,0元入学,先就业后付款,平均就业薪水9500以上2324252627282930313233343536373839404142434445464748495051525354555657word.set(tokenizer.nextToken());output.collect(word,one);}}}publicstaticclassReduceextendsMapReduceBaseimplementsReducerText,IntWritable,Text,IntWritable{publicvoidreduce(Textkey,IteratorIntWritablevalues,OutputCollectorText,IntWritableoutput,Reporterreporter)throwsIOException{intsum=0;while(values.hasNext()){sum+=values.next().get();}output.collect(key,newIntWritable(sum));}}publicstaticvoidmain(String[]args)throwsException{JobConfconf=newJobConf(WordCount.class);conf.setJobName(wordcount);conf.setOutputKeyClass(Text.class);conf.setOutputValueClass(IntWritable.class);conf.setMapperClass(Map.class);conf.setCombinerClass(Reduce.class);conf.setReducerClass(Reduce.class);conf.setInputFormat(TextInputFormat.class);conf.setOutputFormat(TextOutputFormat.class);FileInputFormat.setInputPaths(conf,newPath(args[0]));FileOutputFormat.setOutputPath(conf,newPath(args[1]));JobClient.runJob(conf);}}首先编译WordCount.java$mkdirwordcount_classes$javac-cpclasspath-dwordcount_classesWordCount.java北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数据培训、web前端培训机构,0元入学,先就业后付款,平均就业薪水9500以上其中classpath为:CDH4/usr/lib/hadoop/:/usr/lib/hadoop/client-0.20/CDH3/usr/lib/hadoop-0.20/hadoop-0.20.2-cdh3u4-core.jar打成jar包:1$jar-cvfwordcount.jar-Cwordcount_classes/.假定:/user/cloudera/wordcount/input输入HDFS路径/user/cloudera/wordcount/output输出HDFS路径创建文本格式的数据并移动到HDFS:1234$echoHelloWorldByeWorldfile0$echoHelloHadoopGoodbyeHadoopfile1$hadoopfs-mkdir/user/cloudera/user/cloudera/wordcount/user/cloudera/wordcount/input$hadoopfs-putfile*/user/cloudera/wordcount/input运行wordcount:1$hadoopjarwordcount.jarorg.myorg.WordCount/user/cloudera/wordcount/input/user/cloudera/wordcount/output运行完毕后查看输出:123456$hadoopfs-cat/user/cloudera/wordcount/output/part-00000Bye1Goodbye1Hadoop2Hello2World2MR应用可以用-files参数指定在当前工作目录下存在的多个文件,多个文件使用英文逗号分隔。-libjars参数可以将多个jar包添加到map和reduce的classpath。-archive参数可以将工作路径下的zip或jar包当做参数传递,而zip或jar包名字被当做一个链接(link)。更加详细的命令信息可以参考HadoopCommandGuide.使用-libjars和-files参数运行wordcount的命令:1hadoopjarhadoop-examples.jarwordcount-filescachefile.txt-libjarsmylib.jarinputoutput详细看下wordcount应用14-26行实现了Mapper,通过map方法(18-25行)一次处理一行记录,记录格式为指定的TextInputFormat(行49)。然后将一条记录行根据空格分隔成一个个单词。分隔使用的是类StringTokenizer,然后以word,1形式发布kv对。北京尚学堂-cctv央视网广告合作伙伴,专业IT培训机构,口碑最好的java培训、iOS培训、android培训、hadoop大数

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功