您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作范文 > Hadoop学习总结之五:Hadoop的运行痕迹
在使用hadoop的时候,可能遇到各种各样的问题,然而由于hadoop的运行机制比较复杂,因而出现了问题的时候比较难于发现问题。本文欲通过某种方式跟踪Hadoop的运行痕迹,方便出现问题的时候可以通过这些痕迹来解决问题。一、环境的搭建为了能够跟踪这些运行的痕迹,我们需要搭建一个特殊的环境,从而可以一步步的查看上一节提到的一些关键步骤所引起的变化。我们首先搭建一个拥有一个NameNode(namenode:192.168.1.104),三个DataNode(datanode01:192.168.1.105,datanode02:192.168.1.106,datanode03:192.168.1.107)的Hadoop环境,其中SecondaryNameNode和NameNode运行在同一台机器上。对于这四台机器上的Hadoop,我们需要进行如下相同的配置:NameNode,SeondaryNameNode,JobTracker都应该运行在namenode:192.168.1.104机器上DataNode,TaskTracker,以及生成的Map和Reduce的TaskJVM应该运行在datanode01,datanode02,datanode03上数据共有三份备份HDFS以及Map-Reduce运行的数据放在/data/hadoop/dir/tmp文件夹下propertynamefs.default.name/namevaluehdfs://192.168.1.104:9000/value/propertypropertynamemapred.job.tracker/namevalue192.168.1.104:9001/value/propertypropertynamedfs.replication/namevalue3/value/propertypropertynamehadoop.tmp.dir/namevalue/data/hadoopdir/tmp/valuedescriptionAbaseforothertemporarydirectories./description/property然而由于Map-Reduce过程相对复杂,为了能够对Map和Reduce的TaskJVM进行远程的调试,从而能一步一步观察,因而对NameNode和三个DataNode有一些不同的配置:对于NameNode:设置mapred.job.reuse.jvm.num.tasks为-1,使得多个运行于同一个DataNode上的Map和Reduce的Task共用同一个JVM,从而方便对此JVM进行远程调试,并且不会因为多个TaskJVM监听同一个远程调试端口而发生冲突对于mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum的配置以DataNode上的为准设置io.sort.mb为1M(原来为100M),是为了在Map阶段让内存中的mapoutput尽快的spill到文件中来,从而我们可以观察map的输出设置mapred.child.java.opts的时候,即设置TaskJVM的运行参数,添加远程调试监听端口8333propertynamemapred.job.reuse.jvm.num.tasks/namevalue-1/valuedescription/description/propertypropertynamemapred.tasktracker.map.tasks.maximum/namevalue1/valuedescription/description/propertypropertynamemapred.tasktracker.reduce.tasks.maximum/namevalue1/valuedescription/description/propertypropertynameio.sort.mb/namevalue1/valuedescription/description/propertypropertynamemapred.child.java.opts/namevalue-Xmx200m-agentlib:jdwp=transport=dt_socket,address=8883,server=y,suspend=y/valuedescription/description/propertypropertynamemapred.job.shuffle.input.buffer.percent/namevalue0.001/valuedescription/description/propertypropertynamemapred.job.shuffle.merge.percent/namevalue0.001/valuedescription/description/propertypropertynameio.sort.factor/namevalue2/valuedescription/description/property对于DataNode:对于datanode01:192.168.1.105,设置同时运行的maptask的个数(mapred.tasktracker.map.tasks.maximum)为1,同时运行的reducetask的个数(mapred.tasktracker.reduce.tasks.maximum)为0对于datanode02:192.168.1.106,设置同时运行的maptask的个数(mapred.tasktracker.map.tasks.maximum)为0,同时运行的reducetask的个数(mapred.tasktracker.reduce.tasks.maximum)为0对于datanode02:192.168.1.107,设置同时运行的maptask的个数(mapred.tasktracker.map.tasks.maximum)为0,同时运行的reducetask的个数(mapred.tasktracker.reduce.tasks.maximum)为1之所以这样设置,是因为我们虽然可以控制多个Maptask共用同一个JVM,然而我们不能控制Maptask和ReduceTask也共用一个JVM。从而当Maptask的JVM和ReduceTask的JVM同时在同一台机器上启动的时候,仍然会出现监听远程调用端口冲突的问题。经过上面的设置,从而datanode01专门负责运行MapTask,datanode03专门负责运行ReduceTask,而datanode02不运行任何的Task,甚至连TaskTracker也不用启动了对于ReduceTask设置mapred.job.shuffle.input.buffer.percent和mapred.job.shuffle.merge.percent为0.001,从而使得拷贝,合并阶段的中间结果都因为内存设置过小而写入硬盘,我们能够看到痕迹设置io.sort.factor为2,使得在maptask输出不多的情况下,也能触发合并。除了对Maptask和ReduceTask进行远程调试之外,我们还想对NameNode,SecondaryName,DataNode,JobTracker,TaskTracker进行远程调试,则需要修改一下bin/hadoop文件:if[$COMMAND=namenode];thenCLASS='org.apache.hadoop.hdfs.server.namenode.NameNode'HADOOP_OPTS=$HADOOP_OPTS$HADOOP_NAMENODE_OPTS-agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=nelif[$COMMAND=secondarynamenode];thenCLASS='org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode'HADOOP_OPTS=$HADOOP_OPTS$HADOOP_SECONDARYNAMENODE_OPTS-agentlib:jdwp=transport=dt_socket,address=8887,server=y,suspend=nelif[$COMMAND=datanode];thenCLASS='org.apache.hadoop.hdfs.server.datanode.DataNode'HADOOP_OPTS=$HADOOP_OPTS$HADOOP_DATANODE_OPTS-agentlib:jdwp=transport=dt_socket,address=8886,server=y,suspend=n……elif[$COMMAND=jobtracker];thenCLASS=org.apache.hadoop.mapred.JobTrackerHADOOP_OPTS=$HADOOP_OPTS$HADOOP_JOBTRACKER_OPTS-agentlib:jdwp=transport=dt_socket,address=8885,server=y,suspend=nelif[$COMMAND=tasktracker];thenCLASS=org.apache.hadoop.mapred.TaskTrackerHADOOP_OPTS=$HADOOP_OPTS$HADOOP_TASKTRACKER_OPTS-agentlib:jdwp=transport=dt_socket,address=8884,server=y,suspend=n在进行一切实验之前,我们首先清空/data/hadoopdir/tmp以及logs文件夹。二、格式化HDFS格式化HDFS需要运行命令:bin/hadoopnamenode–format于是打印出如下的日志:10/11/2019:52:21INFOnamenode.NameNode:STARTUP_MSG:/************************************************************STARTUP_MSG:StartingNameNodeSTARTUP_MSG:host=namenode/192.168.1.104STARTUP_MSG:args=[-format]STARTUP_MSG:version=0.19.2STARTUP_MSG:build=:40:50EDT2009************************************************************/10/11/2019:52:21INFOnamenode.FSNamesystem:fsOwner=admin,sambashare10/11/2019:52:21INFOnamenode.FSNamesystem:supergroup=supergroup10/11/2019:52:21IN
本文标题:Hadoop学习总结之五:Hadoop的运行痕迹
链接地址:https://www.777doc.com/doc-6164382 .html