- 浏览: 141953 次
- 性别:
- 来自: 上海
最新评论
-
xueyinv86:
你这个增强版的wordcount是在哪个版本的hadoop上跑 ...
MapReduce入门程序WordCount增强版 -
chenjianjx:
很不错的收集!
几篇关于Hadoop+Hive数据仓库的入门文章 -
canedy:
import org.apache.hadoop.hbase. ...
使用HBase的一个典型例子,涉及了HBase中很多概念 -
天籁の圁:
你的图全部挂了啊
基于Eclipse的Hadoop应用开发环境的配置 -
landyer:
happinesss 写道你是做java开发的吗我是杂货铺,什 ...
MongoDB1.8安装、分布式自动分片(Auto-Sharding)配置备忘
原文地址:http://www.cnblogs.com/end/archive/2011/04/26/2029497.html
在使用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,我们需要进行如下相同的配置: <property> <name>fs.default.name</name> <value>hdfs://192.168.1.104:9000</value> </property> <property> <name>mapred.job.tracker</name> <value>192.168.1.104:9001</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoopdir/tmp</value> <description>A base for other temporary directories.</description> </property> 然而由于Map-Reduce过程相对复杂,为了能够对Map和Reduce的Task JVM进行远程的调试,从而能一步一步观察,因而对NameNode和三个DataNode有一些不同的配置: 对于NameNode: <property> <property> <property> <property> 对于DataNode: 除了对Map task和Reduce Task进行远程调试之外,我们还想对NameNode,SecondaryName,DataNode,JobTracker,TaskTracker进行远程调试,则需要修改一下bin/hadoop文件: if [ "$COMMAND" = "namenode" ] ; then CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode' HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS -agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=n" elif [ "$COMMAND" = "secondarynamenode" ] ; then CLASS='org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode' HADOOP_OPTS="$HADOOP_OPTS $HADOOP_SECONDARYNAMENODE_OPTS -agentlib:jdwp=transport=dt_socket,address=8887,server=y,suspend=n" elif [ "$COMMAND" = "datanode" ] ; then CLASS='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" ] ; then CLASS=org.apache.hadoop.mapred.JobTracker HADOOP_OPTS="$HADOOP_OPTS $HADOOP_JOBTRACKER_OPTS -agentlib:jdwp=transport=dt_socket,address=8885,server=y,suspend=n" elif [ "$COMMAND" = "tasktracker" ] ; then CLASS=org.apache.hadoop.mapred.TaskTracker HADOOP_OPTS="$HADOOP_OPTS $HADOOP_TASKTRACKER_OPTS -agentlib:jdwp=transport=dt_socket,address=8884,server=y,suspend=n" 在进行一切实验之前,我们首先清空/data/hadoopdir/tmp以及logs文件夹。 格式化HDFS需要运行命令:bin/hadoop namenode –format 于是打印出如下的日志: 10/11/20 19:52:21 INFO namenode.NameNode: STARTUP_MSG: 这个时候在NameNode的/data/hadoopdir/tmp下面出现如下的文件树形结构: 这个时候,DataNode的/data/hadoopdir/tmp中还是空的。 启动Hadoop需要调用命令bin/start-all.sh,输出的日志如下: starting namenode, logging to logs/hadoop-namenode-namenode.out 192.168.1.106: starting datanode, logging to logs/hadoop-datanode-datanode02.out 192.168.1.105: starting datanode, logging to logs/hadoop-datanode-datanode01.out 192.168.1.107: starting datanode, logging to logs/hadoop-datanode-datanode03.out 192.168.1.104: starting secondarynamenode, logging to logs/hadoop-secondarynamenode-namenode.out starting jobtracker, logging to logs/hadoop-jobtracker-namenode.out 192.168.1.106: starting tasktracker, logging to logs/hadoop-tasktracker-datanode02.out 192.168.1.105: starting tasktracker, logging to logs/hadoop-tasktracker-datanode01.out 192.168.1.107: starting tasktracker, logging to logs/hadoop-tasktracker-datanode03.out 从日志中我们可以看出,此脚本启动了NameNode, 三个DataNode,SecondaryName,JobTracker以及三个TaskTracker. 下面我们分别从NameNode和三个DataNode中运行jps -l,看看到底运行了那些java程序: 在NameNode中: 22214 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode 22107 org.apache.hadoop.hdfs.server.namenode.NameNode 22271 org.apache.hadoop.mapred.JobTracker 在datanode01中: 12580 org.apache.hadoop.mapred.TaskTracker 12531 org.apache.hadoop.hdfs.server.datanode.DataNode 在datanode02中: 10548 org.apache.hadoop.hdfs.server.datanode.DataNode 在datanode03中: 12593 org.apache.hadoop.hdfs.server.datanode.DataNode 12644 org.apache.hadoop.mapred.TaskTracker 同我们上面的配置完全符合。 当启动了Hadoop以后,/data/hadoopdir/tmp目录也发生了改变,通过ls -R我们可以看到。 对于NameNode: .: dfs ./dfs: name namesecondary ./dfs/name: current image in_use.lock ./dfs/name/current: edits fsimage fstime VERSION ./dfs/name/image: fsimage ./dfs/namesecondary: current image in_use.lock ./dfs/namesecondary/current: edits fsimage fstime VERSION ./dfs/namesecondary/image: fsimage 对于DataNode: .: dfs mapred ./dfs: data ./dfs/data: current detach in_use.lock storage tmp ./dfs/data/current: dncp_block_verification.log.curr VERSION ./dfs/data/detach: ./dfs/data/tmp: ./mapred: local ./mapred/local: 当然随着Hadoop的启动,logs文件夹下也多个很多的日志: 在NameNode上,日志有: 在DataNode上的日志有(以datanode01为例子): 下面我们详细查看这些日志中的有重要意义的信息: 在hadoop-namenode-namenode.log文件中,我们可以看到NameNode启动的过程: Namenode up at: namenode/192.168.1.104:9000 //文件的数量 Number of files = 0 Number of files under construction = 0 //加载fsimage和edits文件形成FSNamesystem Image file of size 97 loaded in 0 seconds. Edits file /data/hadoopdir/tmp/dfs/name/current/edits of size 4 edits # 0 loaded in 0 seconds. Image file of size 97 saved in 0 seconds. Finished loading FSImage in 12812 msecs //统计block的数量和状态 Total number of blocks = 0 Number of invalid blocks = 0 Number of under-replicated blocks = 0 Number of over-replicated blocks = 0 //离开safe mode Leaving safe mode after 12 secs. //注册DataNode Adding a new node: /default-rack/192.168.1.106:50010 Adding a new node: /default-rack/192.168.1.105:50010 Adding a new node: /default-rack/192.168.1.107:50010 在hadoop-secondarynamenode-namenode.log文件中,我们可以看到SecondaryNameNode的启动过程: Secondary Web-server up at: 0.0.0.0:50090 //进行Checkpoint的周期 Checkpoint Period :3600 secs (60 min) Log Size Trigger :67108864 bytes (65536 KB) //进行一次checkpoint,从NameNode下载fsimage和edits Downloaded file fsimage size 97 bytes. Downloaded file edits size 370 bytes. //加载edit文件,进行合并,将合并后的fsimage保存,我们可以看到fsimage变大了 Edits file /data/hadoopdir/tmp/dfs/namesecondary/current/edits of size 370 edits # 6 loaded in 0 seconds. Image file of size 540 saved in 0 seconds. //此次checkpoint结束 Checkpoint done. New Image Size: 540 在hadoop-jobtracker-namenode.log文件中,我们可以看到JobTracker的启动过程: JobTracker up at: 9001 JobTracker webserver: 50030 //清除HDFS中的/data/hadoopdir/tmp/mapred/system文件夹,是用于Map-Reduce运行过程中保存数据的 Cleaning up the system directory //不断的从TaskTracker收到heartbeat,第一次是注册TaskTracker Got heartbeat from: tracker_datanode01:localhost/127.0.0.1:58297 Adding a new node: /default-rack/datanode01 Got heartbeat from: tracker_datanode03:localhost/127.0.0.1:37546 Adding a new node: /default-rack/datanode03 在hadoop-datanode-datanode01.log中,可以看到DataNode的启动过程: //格式化DataNode存放block的文件夹 Storage directory /data/hadoopdir/tmp/dfs/data is not formatted. Formatting ... //启动DataNode Opened info server at 50010 Balancing bandwith is 1048576 bytes/s Initializing JVM Metrics with processName=DataNode, sessionId=null //向NameNode注册此DataNode dnRegistration = DatanodeRegistration(datanode01:50010, storageID=, infoPort=50075, ipcPort=50020) New storage id DS-1042573498-192.168.1.105-50010-1290313555129 is assigned to data-node 192.168.1.105:5001 DatanodeRegistration(192.168.1.105:50010, storageID=DS-1042573498-192.168.1.105-50010-1290313555129, infoPort=50075, ipcPort=50020)In DataNode.run, data = FSDataset{dirpath='/data/hadoopdir/tmp/dfs/data/current'} //启动block scanner Starting Periodic block scanner. 在hadoop-tasktracker-datanode01.log中,可以看到TaskTracker的启动过程: //启动TaskTracker Initializing JVM Metrics with processName=TaskTracker, sessionId= TaskTracker up at: localhost/127.0.0.1:58297 Starting tracker tracker_datanode01:localhost/127.0.0.1:58297 //向JobTracker发送heartbeat Got heartbeatResponse from JobTracker with responseId: 0 and 0 actions 一 个特殊的log文件是hadoop-tasktracker-datanode02.log中,因为我们设置的最大Map Task数目和最大Reduce Task数据为0,而报了一个Exception,Can not start task tracker because java.lang.IllegalArgumentException,从而使得datanode02上的TaskTracker没有启动起来。 当Hadoop启动起来以后,在HDFS中也创建了一些文件夹/data/hadoopdir/tmp/mapred/system,用来保存Map-Reduce运行时候的共享资源。 向HDFS中放入文件,需要使用命令:bin/hadoop fs -put inputdata /data/input 放入文件完毕后,我们查看HDFS:bin/hadoop fs -ls /data/input,结果为: -rw-r--r-- 3 hadoop supergroup 6119928 2010-11-21 00:47 /data/input/inputdata 这个时候,我们查看DataNode下的/data/hadoopdir/tmp文件夹发生了变化: .: dfs mapred ./dfs: data ./dfs/data: current detach in_use.lock storage tmp ./dfs/data/current: blk_2672607439166801630 blk_2672607439166801630_1002.meta dncp_block_verification.log.curr VERSION ./dfs/data/detach: ./dfs/data/tmp: ./mapred: local ./mapred/local: 在放入文件的过程中,我们可以看log如下: namenode的hadoop-namenode-namenode.log如下: //创建/data/input/inputdata ugi=admin,sambashareip=/192.168.1.104 cmd=create src=/data/input/inputdata dst=null perm=hadoop:supergroup:rw-r--r-- //分配block NameSystem.allocateBlock: /data/input/inputdata. blk_2672607439166801630_1002 NameSystem.addStoredBlock: blockMap updated: 192.168.1.107:50010 is added to blk_2672607439166801630_1002 size 6119928 NameSystem.addStoredBlock: blockMap updated: 192.168.1.105:50010 is added to blk_2672607439166801630_1002 size 6119928 NameSystem.addStoredBlock: blockMap updated: 192.168.1.106:50010 is added to blk_2672607439166801630_1002 size 6119928 datanode01的hadoop-datanode-datanode01.log如下: //datanode01从客户端接收一个block Receiving block blk_2672607439166801630_1002 src: /192.168.1.104:41748 dest: /192.168.1.105:50010 src: /192.168.1.104:41748, dest: /192.168.1.105:50010, bytes: 6119928, op: HDFS_WRITE, cliID: DFSClient_-1541812792, srvID: DS-1042573498-192.168.1.105-50010-1290313555129, blockid: blk_2672607439166801630_1002 PacketResponder 2 for block blk_2672607439166801630_1002 terminating datanode02的hadoop-datanode-datanode02.log如下: //datanode02从datanode01接收一个block Receiving block blk_2672607439166801630_1002 src: /192.168.1.105:60266 dest: /192.168.1.106:50010 src: /192.168.1.105:60266, dest: /192.168.1.106:50010, bytes: 6119928, op: HDFS_WRITE, cliID: DFSClient_-1541812792, srvID: DS-1366730865-192.168.1.106-50010-1290313543717, blockid: blk_2672607439166801630_1002 PacketResponder 1 for block blk_2672607439166801630_1002 terminating datanode03的hadoop-datanode-datanode03.log如下: //datanode03从datanode02接收一个block Receiving block blk_2672607439166801630_1002 src: /192.168.1.106:58899 dest: /192.168.1.107:50010 src: /192.168.1.106:58899, dest: /192.168.1.107:50010, bytes: 6119928, op: HDFS_WRITE, cliID: DFSClient_-1541812792, srvID: DS-765014609-192.168.1.107-50010-1290313555841, blockid: blk_2672607439166801630_1002 PacketResponder 0 for block blk_2672607439166801630_1002 terminating Verification succeeded for blk_2672607439166801630_1002 运行Map-Reduce函数,需要运行命令:bin/hadoop jar hadoop-0.19.2-examples.jar wordcount /data/input /data/output 为了能够观察Map-Reduce一步步运行的情况,我们首先远程调试JobTracker,将断点设置在JobTracker.submitJob函数中。 按照我们上一篇文章讨论的那样,DFSClient向JobTracker提交任务之前,会将任务运行所需要的三类文件放入HDFS,从而可被JobTracker和TaskTracker得到: 当Map-Reduce程序停在JobTracker.submitJob函数中的时候,让我们查看HDFS中有如下的变化: bin/hadoop fs -ls /data/hadoopdir/tmp/mapred/system 其中多了一个文件夹job_201011202025_0001,这是当前运行的Job的ID,在这个文件夹中有三个文件: bin/hadoop fs -ls /data/hadoopdir/tmp/mapred/system/job_201011202025_0001 Found 3 items -rw-r--r-- /data/hadoopdir/tmp/mapred/system/job_201011202025_0001/job.jar -rw-r--r-- /data/hadoopdir/tmp/mapred/system/job_201011202025_0001/job.split -rw-r--r-- /data/hadoopdir/tmp/mapred/system/job_201011202025_0001/job.xml 现在我们可以断开对JobTracker的远程调试。 在JobTracker.submitJob的函数中,会读取这些上传到HDFS的文件,从而将Job拆分成Map Task和Reduce Task。 当 TaskTracker通过heartbeat向JobTracker请求一个Map Task或者Reduce Task来运行,按照我们上面的配置,显然datanode01会请求Map Task来执行,而datanode03会申请Reduce Task来执行。 下面我们首先来看datanode01上Map Task的执行过程: 当TaskTracker得到一个Task的时候,它会调用TaskTracker.localizeJob将job运行的三个文件从HDFS中拷贝到本地文件夹,然后调用TaskInProgress.localizeTask创建Task运行的本地工作目录。 我 们来远程调试datanode01上的TaskTracker,分别将断点设在localizeJob和localizeTask函数中,当程序停在做完 localizeTask后,我们来看datanode01上的/data/hadoopdir/tmp/mapred/local /taskTracker/jobcache下多了一个文件夹 job_201011202025_0001,在此文件夹下面有如下的结构:一、环境的搭建
<name>mapred.job.reuse.jvm.num.tasks</name>
<value>-1</value>
<description></description>
</property>
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>1</value>
<description></description>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>1</value>
<description></description>
</property>
<property>
<name>io.sort.mb</name>
<value>1</value>
<description></description>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx200m -agentlib:jdwp=transport=dt_socket,address=8883,server=y,suspend=y</value>
<description></description>
</property>
<name>mapred.job.shuffle.input.buffer.percent</name>
<value>0.001</value>
<description></description>
</property>
<name>mapred.job.shuffle.merge.percent</name>
<value>0.001</value>
<description></description>
</property>
<name>io.sort.factor</name>
<value>2</value>
<description></description>
</property>
二、格式化HDFS
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = namenode/192.168.1.104
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 0.19.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.19 -r 789657; compiled by 'root' on Tue Jun 30 12:40:50 EDT 2009
************************************************************/
10/11/20 19:52:21 INFO namenode.FSNamesystem: fsOwner=admin,sambashare
10/11/20 19:52:21 INFO namenode.FSNamesystem: supergroup=supergroup
10/11/20 19:52:21 INFO namenode.FSNamesystem: isPermissionEnabled=true
10/11/20 19:52:21 INFO common.Storage: Image file of size 97 saved in 0 seconds.
10/11/20 19:52:21 INFO common.Storage: Storage directory /data/hadoopdir/tmp/dfs/name has been successfully formatted.
10/11/20 19:52:21 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at namenode/192.168.1.104
************************************************************/
+- dfs
+- name
+--- current
+---- edits
+---- fsimage
+---- fstime
+---- VERSION
+---image
+---- fsimage二、启动Hadoop
三、向HDFS中放入文件
四、运行一个Map-Reduce程序
相关推荐
### Hadoop运行痕迹追踪详解 #### 一、引言 Hadoop作为一种强大的分布式计算框架,在大数据处理领域扮演着举足轻重的角色。然而,随着其功能的不断扩展和复杂性的增加,用户在使用过程中难免会遇到各种各样的问题...
Hadoop 技术内幕:深入解析Hadoop Common 和HDFS 架构设计与实现原理
“Hadoop学习总结之五:Hadoop的运行痕迹.doc”可能涉及监控和日志记录,这是理解Hadoop系统运行状态和问题排查的重要手段。通过监控Hadoop集群的性能指标,如CPU利用率、内存使用情况、磁盘I/O等,可以优化系统配置...
Hadoop技术内幕:深入解析Hadoop Common 和HDFS 架构设计与实现原理 (大数据技术丛书) 原版书籍,非扫描版,使用kindle可以打开,也可以转换为epub使用ibooks打开
Hadoop硬实战:Hadoop in Practice
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》还从源代码实现中对分布式技术的精髓、分布式系统设计的优秀思想和方法,以及Java语言的编码技巧、编程规范和对设计模式的精妙运用进行了总结和...
《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》还从源代码实现中对分布式技术的精髓、分布式系统设计的优秀思想和方法,以及Java语言的编码技巧、编程规范和对设计模式的精妙运用进行了总结和...
以下是对Hadoop学习的详细总结: **HDFS(Hadoop Distributed File System)简介** HDFS是Hadoop的核心组件之一,是一个高度容错性的分布式文件系统。它被设计成能在普通的硬件上运行,并能够处理大规模的数据集。...
Hadoop技术内幕:深入解析MapReduce架构设计i与实现原理Hadoop技术内幕:深入解析MapReduce架构设计i与实现原理Hadoop技术内幕:深入解析MapReduce架构设计i与实现原理Hadoop技术内幕:深入解析MapReduce架构设计i与...
总的来说,"hadoop学习总结1-5"这份资料可能涵盖了从Hadoop的基本概念到实际操作的各个方面,对于想要深入了解和掌握Hadoop的初学者来说,是一份宝贵的参考资料。通过系统学习,可以逐步提升在大数据处理领域的专业...
这个版本是为Hadoop 2.8.0定制的,这意味着它与Hadoop 2.x系列的兼容性已经过验证,可以在该版本的Hadoop环境中稳定运行。 描述中提到的"Mac下编译的hadoop-lzo"意味着这个版本是在Mac操作系统上编译构建的,这确保...
hadoop&spark:Hive是一个基于Hadoop的数据仓库平台.zip
【Hadoop学习总结(面试必备)】 Hadoop作为大数据处理的核心框架,因其分布式存储和计算的能力,成为业界处理海量数据的首选工具。本总结将深入探讨Hadoop的主要组件、工作原理以及在面试中可能遇到的相关知识点。...
Hadoop权威指南 大数据的存储与分析 第四版
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。本文集的文档主要介绍Hadoop的一些概念介绍和操作教程,...
在IT行业中,Hadoop是一个广泛使用的开源框架,主要用于大数据处理和分析。Hadoop 2.7.6是该框架的一个稳定...这个过程可能对新手来说有些复杂,但通过学习和实践,可以成功地在Windows系统上建立和运行Hadoop集群。
Hadoop 简介 Hadoop 优点 Hadoop基本架构
Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理(扫描版)
9. 开发工具和环境:要成功编译和运行Hadoop,需要适当的开发工具和环境。文档中强调了JDK、Ant以及Eclipse的安装对于构建和开发Hadoop项目的重要性。 10. Hadoop家族和其他相关技术:文档中提到了Hadoop家族(如...
hadoop学习总结.ppt