《hadoop培训》PPT课件.ppt_第1页
《hadoop培训》PPT课件.ppt_第2页
《hadoop培训》PPT课件.ppt_第3页
《hadoop培训》PPT课件.ppt_第4页
《hadoop培训》PPT课件.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hadoop原理与Streaming下编程,数据中心-研究院,提纲,hadoop的组成部分和安装方法 hadoop的web接口 hadoop的命令行接口 dfs job jar dfsadmin . hadoop的编程接口 mapreduce任务编程 hdfs编程 Streaming编程框架 任务的调试和查错,hadoop的软件结构和安装方法,软件结构(我们目前主要使用的) DFS模块,包含了Namenode, Secondary Namenode, Datanode等模块,这些模块分别会运行在主节点和从节点上,通过http协议进行交互 mapred模块,包含了JobTracker和TaskTracker模块,这些模块运行在主节点和从节点上,也通过http协议进行交互,hadoop的软件结构和安装方法,软件安装方法 下载程序包 解压后配置相关参数,所有的配置文件在主文件夹下的conf文件夹内。 分发程序目录到集群中所有机器 命令行启动集群“start-mapred.sh“,hadoop的接口,通过接口了解hadoop内部的情况 web接口 部分命令行接口 通过接口控制hadoop的运行和态 web接口(需开启配置中web控制选项) 命令行接口 通过接口提交任务 命令行接口结合编程接口,hadoop的web接口,hdfs,默认用浏览器访问namenode节点的50070端口即可 hdfs接口中可以访问 mapred,默认用浏览器访问jobtracker节点的50030端口即可,一般将同一台机器作为jobtracker和namenode节点,hadoop的命令行接口,dfs -mv -cp(宜使用distCp工具替代) -ls . job -list -kill -history . jar : 读取配置运行java程序 Streaming.jar myjob.jar wordcount.jar . ?admin:管理和查看hadoop上的详细状态 . .,hadoop任务运行原理,hadoop任务(Job)由多个子任务(Task)组成,tasks由以下两部分 多个mapper,其中mapper的个数由输入文件格式规定的文件分块数确定,mapper的运行和数据分块所在的机器有很大的关系 多个/0个 reducer,reducer的个数由用户提交任务时指定 集群中JobTracker负责调度Job和Job之下的tasks,而每个tasktracker负责接收task任务并运行之 提交任务过程:用户与JobTracker交互,提交任务资源和配置 运行任务过程:JobTracker将队列中的tasks按调度算法分配给各tasktracker的空闲槽,tasktracker随后就运行之并监视汇报tasks的运行情况。,hadoop任务运行原理-通过hadoop编程接口提交任务,以一个任务的提交为例:WordCount.jar 其代码结构如下: 这个程序其实和普通的java程序没有区别,其实现了mapper,reducer接口,并通过main函数加载配置和参数,上传jar,提交任务并监控运行情况,public class WordCount public static class TokenizerMapper extends Mapper public static class IntSumReducer extends Reducer public static void main(String args) ,hadoop编程接口,hadoop任务运行原理,以一个任务的提交为例:WordCount.jar 其main函数如下,其中就包含了提交任务的流程:,public static void main(String args) throws Exception Configuration conf = new Configuration(); /读取默认的配置文件 String otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); /通用参数解析 if (otherArgs.length != 2) System.err.println(“Usage: wordcount “); System.exit(2); Job job = new Job(conf, “word count“); /新建任务对象 job.setJarByClass(WordCount.class);/主类 job.setMapperClass(TokenizerMapper.class);/mapper job.setCombinerClass(IntSumReducer.class);/作业合成类 job.setReducerClass(IntSumReducer.class);/reducer job.setOutputKeyClass(Text.class);/设置作业输出数据的关键类 job.setOutputValueClass(IntWritable.class);/设置作业输出值类 FileInputFormat.addInputPath(job, new Path(otherArgs0);/文件输入 FileOutputFormat.setOutputPath(job, new Path(otherArgs1);/文件输出 System.exit(job.waitForCompletion(true) ? 0 : 1);/提交任务,等待完成退出. ,hadoop编程需要实现的接口,调用提交任务接口:submitjobandmonitor(jobconf); 其中jobconf需要在提交任务时设置好 实现map接口:map端进程运行时调用的接口,默认为 实现reduce接口:reduce端进程运行时调用的接口 实现partitioner接口:partitioner接口用于分配map端输出到reduce端 实现输入输出文件读写接口:默认有用于文本文件读写的接口,Streaming编程框架,Streaming? Streaming也就是一个java编写的任务提交工具 Streaming自己实现的mapper Streaming自己的reducer 输入输出接口 额外的针对子进程的输入输出接口 针对输入输出文件的输入输出接口,Streaming编程框架,如何编写Streaming的mapper端和reduce端子程序? mapredlib库,我们的声学模型训练工具三期中,包含了这个mapredlib库,其中包含了处理我们规定的文件格式的输入输出和检索的功能 从标准输入读入数据 使用mapredlib库提供的ReadOneMI的功能从标准输入读入数据,然后使用GetTailByType从数据块中提取需要的数据类型数据(如从一句话的所有数据中提取特征,标注,lattice等) 向标准输出写出输出数据 使用mapredlib库提供的AddTail功能添加数据到输出数据块中 使用mapredlib库提供的WriteOneMI功能写出数据块到标准输出中,Streaming编程框架,自定义Streaming支持的文件内数据结构,Streaming编程框架,mapredlib库内定义的数据结构,Streaming编程框架,子程序运行的原理? 子程序运行在集群上的时候的环境 tasktracker为每一个分配到它的子程序(mapper或reducer子进程分配一个临时文件夹,子程序由mapper或reducer启动后就会在其中运行 子程序需要的资源的分发方式 1.使用-file 参数上传单个文件,tasktracker会将指定的文件从hdfs上下载并将其软链接到每个task当前文件夹中,Streaming编程框架,子程序的调试方法 数据的准备,可使用fetchdata_hdp.jar工具从hdfs上下载到文件中的一块作为调试程序的输入文件分块 调试环境的准备,将提交任务时的命令行作为调试命令行,提交任务时上传的文件作为资源文件放在执行目录下 IDE的选择: linux下使用gdb或者codelite windows下使用visual studio,调试过程和普通的C+/C程序一致 Streaming工具的调试方法 在本地使用eclipse即可像调试java程序一样调试Streaming工具 除非要改写得到自己的partitioner,否则不要修改Streaming工具,编写Streaming框架下程序时的常见问题,1.为什么包含了相应的库,但是编译的时候显示undefined function xxxxxxx? 答:有可能是因为你呃库为C语言,这时候cpp程序包含的C头文件需要加上extern “C” 比如 exter “C” #include “MapInput.h” 2.在一个库A依赖另一个库B的函数c时,我先后链接了两个库A,B,为什么仍然有库A中引用的函数显示undefined function c? 答:在可执行程序中没有直接引用c时,链接程序先引用A时不会提取出c备用,所以在链接到B库时,其中引用的c符号就找不到了。 这个时候需要先链接B库再链接A库。 3.为什么Streaming启动后无缘无故报错,提示IOException Array Out of Bound等错误? 答:这时很可能是由于输入的打包文件的64M边界处没有处理好,需要检查打包程序。 在linux下可以通过如下步骤检查: split b64m file.pak #这时文件夹中会有xaa xab等一大堆文件,每个文件都是从file.pak中解散出来的64M分块 #这时只需要检查xab、xac、xad等的开头是否完整的数据条目即可。 4.如何使用带动态链接库的程序? 答:我们的修改版Streaming程序中默认将当前执行目录下的bin文件夹加入了LD_LIBRARY_PATH环境变量中了。这样在执行这样的Streaming任务时就可以通过 cacheArchive参数将所有动态链接库打包成的tar包下载到每台机器上并解压到当前目录的bin目录下即可。但是由于-cacheArchive使用的是软链接方式创建的bin目录,所以不能将动态链接库文件分散放在多个tar下,这样会引起冲突。 5.为什么程序持续出现timeout 600现象导致task被kill? 答:导致这个问题的有两种原因: 1.tasktracker所在机器繁忙,这个的解决需要酌情减少tasktracker上的map和reduce槽数。 2.子程序有bug,刘丹目前碰到了这个问题,他的程序中有部分析构代码进入了死循环,所以其程序无法自行了结导致了tasktracker一直在忙等。 6.关于strtok的常见错误? 答:strtok不能嵌套使用,比如line=strtok(B,”xx”) 然后word = strtok(line,”a”)后又想通过line=strt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论