调试eclipse下hadoop的map reduce程序

  categories:hadoop  tags:  author:

原创文档,转载请将原文url地址

前面介绍了hadoop的本地安装, vnc控制hadoop服务器的开发调试, hadoop的eclipse插件安装及运行等。 本文我们重点介绍如何在eclipse集成环境下如何debug调试hadoop程序, 充分利用debug工具的调试, 断点, 变量查看等等。

一.调试hadoop要解决的问题:

在上一篇文章中, 我们已经可以采用插件的方法, 来运行hadoop项目, 但是我们没办法用debug方式来运行您的hadoop项目。

那么我们可以运行这个项目吗?

我们当然可以采用运行普通java项目的办法来运行这个java项目, 但是map reduce程序没办法正常的工作。

我们如何解决这个问题?要解决这个问题如何进行?首先要解决这个问题,需要了解hadoop的基本工作过程,特别是hadoop的工作过程中的classpath相关设置问题了。

关于hadoop的classpath问题, 请参考前面的一些体会,如下地址供您研究:

Hadoop源代码分析 之hadoop配置及启动(4)—–启动过程汇总

Hadoop源代码分析 之hadoop配置及启动(3)—–classpath与hadoop主要组件启动过程

Hadoop源代码分析 之hadoop配置及启动(2)—–classpath与启动shell脚本

Hadoop源代码分析 之hadoop配置及启动(1)—–classpath与配置文件

通过上面这些研究我们可以了解hadoop启动的关键时,如何配制hadoop运行的classpath的,通过这个classpath的脚本能找到配置文件, 然后根据配置文件能联系到各个服务组件, 然后在根据组件连接各个服务器然后决定如何进行下一步的工作。

有了以上,我们就可以断定, 我们的普通的java项目可以通过适当调整classpath设置然后能够运行hadoop的map reduce程序。 在普通java项目中可以应用 方便的各种调试工具来进行应用程序的调试、开发等。

下面我们将根据这个线索来逐步构建一个java的项目, 然后添加hadoop的配置文件等到项目中, 然后调试程序。

二.配置并测试一个hadoop的本地系统

阅读全文

用Hadoop eclipse插件开发程序

  categories:hadoop  tags:  author:

原创文档,转载请将原文url地址

采用Hadoop的eclipse插件开发调试程序

Hadoop为采用eclipse开发程序,提供了插件, 本篇文档我们从下载eclipse及hadoop插件开始, 创建开发环境, 然后调试伪分布模式下的hadoop程序

一. Eclipse下载地址如下:

下面地址可以下载到各种eclipse的比较旧的版本

http://wiki.eclipse.org/Older_Versions_Of_Eclipse

Hadoop插件对特定eclipse的版本支持的版本比较好, 不是每个版本都能非常好的运行, 因此选择好的版本是重要的。 在版本不匹配时,可以自己编译eclipse插件, 插件源代码已经随同hadoop一同分发了。

wps_clip_image-9907

我们下载eclipse 3.5.2版本, 下载linux的32位版本, 读者根据您服务器环境选择合适的版本

wps_clip_image-30819

根据我们centos版本下载特定的linux的32位版本

二.下载hadoop的eclipse插件

下载地址如下:

https://code.google.com/p/hadoop-eclipse-plugin/downloads/list

wps_clip_image-26589

我们下载 0.20.3的版本

三.安装hadoop的eclipse插件

拷贝hadoop的eclipse插件到 /work/apps/eclipse/dropins目录中, 拷贝完成后情况如下:

wps_clip_image-14405

启动eclipse程序, 启动后, 选择window 菜单, 选择hadoop map/reduce菜单

wps_clip_image-17718

出现上面,说明我们安装插件基本完成。

然后选择, browse按钮, 然后选择如下目录(配置hadoop环境)

wps_clip_image-21457

四.用hadoop

阅读全文

Hadoop1.2.1 Pseudo-Distributed伪分布模式配置

  categories:hadoop  tags:  author:

原创文档,转载请将原文url地址标明

hadoop的伪分布式模式是hadoop的一个重要的模式, 在这个模式下, hadoop在本地服务器,启动多个jvm进程来模拟分布式情况,同时可以方便程序员调试相关程序。 本文我们一起来学习相关的配置

一. hadoop的Pseudo-Distributed伪分布模式

Pseudo-Distributed Operation 伪分布操作

Hadoop can also be run on a single-node in a pseudo-distributed mode where each Hadoop daemon runs in a separate Java process.

先进入您的相关hadoop的目录, 然后依次配置下面的文件

如下图是笔者的目录及文件形式

wps_clip_image-19784

Configuration

Use the following:
conf/core-site.xml:  … 阅读全文

hadoop 1.2.1本地安装入门

  categories:hadoop  tags:  author:

原创文档,转载请将原文url地址标明

1年多没接触hadoop了, 最近hadoop发展很快,最近有些时间, 准备重新开始研究一下hadoop的源代码了, 为熟悉最新的hadoop情况, 先从1.2.1版本hadoop研究一下工作情况, 包括:安装,调试等等情况,然后再开始研究hadoop的源代码。

若是您不了解hadoop是啥, 请参考 百度百科hadoop的介绍

Hadoop的安装一般可以分为, 本地安装, 本地集群安装(每个hadoop组件都运行单独的jvm进程中), 最后是分布式集群安装。

本次安装,我们也采用这个顺序来进行系列的研究。

一. 下载hadoop源代码到windows

下面是hadoop的官方网站

http://hadoop.apache.org/

显示如下:

wps_clip_image-4634

我们下载1.2.1版本的稳定版本

下载地址如下:

http://apache.fayea.com/apache-mirror/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz

下载完成后, 解压缩文件, 这里源代码解压缩到 c:\tmp目录

注意: 1. hadoop在linux系列下工作, 尽管windows下可以进行安装, 但是需要安装很多其他软件, 这里也在linux下安装运行。

2. 这里之所以下载安装文件到windows下,我们目的是方便查看里面的文档,查看里面的帮助文档可以了解更多的hadoop情况。

下面进入程序目录, 打开帮助文档

二.查看hadoop的文档

在浏览器地址栏中输入如下地址(请根据您的具体位置,调整相关地址,或者在资源管理里面直接打开 index.html文件)… 阅读全文

Hadoop源代码分析 之Datanode工作原理(5)—–拷贝文件过程总结

  categories:hadoop  tags:,   author:

原创文章,转载请指明出处并保留原文url地址

hadoop 相关视频下载地址: http://pan.baidu.com/share/link?shareid=223046310&uk=3073578852

前一文章中,我们重点讨论了hadoop shell脚本拷贝本地文件到hadoop文件系统(hdfs)的工作过程,我们重点针对拷贝的源代码进行了研究,主要研究了本地文件拷贝的初始化过程,文件拷贝过程。本篇文档我们通过汇总相关工作的序列图来从图形化方式分析相关工作过程。

引言,hadoop代表一种全新的编程思想,基于hadoop有很多衍生项目,充分利用他们

为我们服务是非常必要的,同时hadoop又是一个复杂系统,若能理解他的工作原理对

我们将有非常大的帮助,我们在这里以hadoop的0.1.0版本为基础逐步分析他的基本工作

原理、结构、思路等等,希望通过这个能帮助我们理解生产中的hadoop系统。 时间有限,

经验不足,疏漏难免,在这里仅仅分享一些心得,希望对大家能起到一个抛砖引玉的作用吧,

有问题请大家给我留言或者评论等,这样也能对我的工作有莫大的帮助。

感谢您阅读这篇文章!

 

一.文件拷贝总体过程

管理员在hadoop客户端机中,启动hadoop shell,拷贝本地文件到hadoop集群时,系统经历了大概下面几个阶段。

1. 系统初始化过程,这个过程中shell客户端根据本地配置文件初始化本次jvm进程的相关信息,从classpath中寻找到配置文件,获取namenode等具体信息,本地相关信息等,然后,启动main函数,调用里面功能创建一系列文件服务对象等。

2. 系统初始化完成后,读取文件系统数据,然后循环写入数据对象中,数据对象将数据先缓存在内存中,到达一定数据后将数据输出到本地临时文件中,当文件大小尺寸到达文件块尺寸时,启动dfsclient中的流输出对象,对象相同namenode沟通获取块信息(元信息)等,然后连接datanode节点通过网络将数据传输过去(datanode中相关流程在前一文章中已经研究过了),循环将全部数据传输完。

3. 最后文件结束后系统启动close功能,将内存中数据包括crc等数据刷新到网络上,同时清理本地相关临时文件等等。

二.初始化阶段

下图是hadoop shell在文件拷贝中初始化阶段的创建过程,图中内容比较多,为了绘图方便,大部分名称都采用简写,图中附上一个对照关系表供参考。

下图采用近似uml序列图方式绘制,但不是规范的uml序列图,同时也不完全拘泥于序列图的规范,核心就是让读者能看明白图中内容(uml相关可以参考http://www.iigrowing.cn/?s=uml)。

一)图示介绍

图中如下图示的含义如下:

1. wps_clip_image-29119[3][1]表示java中一个类的某个对象实例,一般用类名代表,但其实是实例对象。

2.  wps_clip_image-11684[3][1] 图中箭头表示一次调用,并且是一次阻塞式调用(被调用对象的相关函数若是没有返回,则调用者将一直等待返回)。图中箭头方向代表调用方向 ,例如A对象调用B的方法,就是 A—>B(A调用B)

3.  wps_clip_image-18733[3][1]图中虚线箭头代表调用的返回,箭头的方向表示从被调用者到调用者的返回。… 阅读全文

Hadoop源代码分析 之Datanode工作原理(4)—–拷贝本地文件到hadoop的过程

  categories:hadoop  tags:  author:

原创文档,转载请将原文url地址标明

hadoop 相关视频下载地址: http://pan.baidu.com/share/link?shareid=223046310&uk=3073578852

本篇文档我们重点研究一下通过hadoop的客户端的上传一个文件到hadoop的过程,通过这个过程我们了解hadoop的datanode及namenode的相关工作过程。本篇主要集中精力研究源代码,以及如何阅读这部分源代码,下篇文档我们将重点总结一下相关工作过程以及一个相关的五声音视频演示如何动态分析这个给过程的。

引言,hadoop代表一种全新的编程思想,基于hadoop有很多衍生项目,充分利用他们

为我们服务是非常必要的,同时hadoop又是一个复杂系统,若能理解他的工作原理对

我们将有非常大的帮助,我们在这里以hadoop的0.1.0版本为基础逐步分析他的基本工作

原理、结构、思路等等,希望通过这个能帮助我们理解生产中的hadoop系统。 时间有限,

经验不足,疏漏难免,在这里仅仅分享一些心得,希望对大家能起到一个抛砖引玉的作用吧,

有问题请大家给我留言或者评论等,这样也能对我的工作有莫大的帮助。

感谢您阅读这篇文章!

 

一.初始化过程

初始化过程重点分析从main函数启动到整个相关准备工作完成,准备发送数据前的一段过程的总体情况。

再次强调,我们的分析仅仅是一部分比较重要的源代码,没有分析全部源代码,具体情况读者要去阅读源代码,仔细体会才会有很大收获。

1. Main函数

源代码如下:

public static void main(String argv[]) {

try {

…..

Configuration conf = new Configuration();   // 创建一个默认的配置文件

int i … 阅读全文

Hadoop源代码分析 之Datanode工作原理(3)—–datanode工作过程总结

  categories:hadoop  tags:  author:

原创文档,转载请将原文url地址标明

前面两篇文档我们重点研究了datanode的启动及工作过程中的源代码,对源代码做了注释工作,本篇文档将总结前面两篇文档,我们将绘制整个工作过程的流程图,通过流程图大家可以较清楚的了解相关工作过程,结合前面的文档自己去实际研究一下代码能够更清楚的了解datanode的工作过程。

hadoop 相关视频下载地址: http://pan.baidu.com/share/link?shareid=223046310&uk=3073578852

引言,hadoop代表一种全新的编程思想,基于hadoop有很多衍生项目,充分利用他们

为我们服务是非常必要的,同时hadoop又是一个复杂系统,若能理解他的工作原理对

我们将有非常大的帮助,我们在这里以hadoop的0.1.0版本为基础逐步分析他的基本工作

原理、结构、思路等等,希望通过这个能帮助我们理解生产中的hadoop系统。 时间有限,

经验不足,疏漏难免,在这里仅仅分享一些心得,希望对大家能起到一个抛砖引玉的作用吧,

有问题请大家给我留言或者评论等,这样也能对我的工作有莫大的帮助。

感谢您阅读这篇文章!

一.Datanode的启动过程及总体工作流程

本部分我们重点研究datanode启动流程,以及功过过程中的线程关系,下一节我们研究具体工作线程的关系。

qq

上图是datanode启动及工作过程中的流程图,图中t带有阴影区域的地方是线程或者线程组。

从上图可以看出,主要分成为:

左侧主线程,系统启动等等代码均在这里

数据线程,负责数据接收等相关任务, 主线程中datanode对象构造函数内部创建的一个线程对象

任务线程,负责datanode工作过程中相关任务调度,namenode通信等,由主线程中runandwait函数中创建的线程对象

另外, 数据线程及任务线程共同共同构成一对,每个datanode中配置的dir目录均构成一对相关线程

下面我们重点介绍一下上图中重点的工作流程,大家可以先看图,然后再看描述,也可以先看描述,在看图,总之图要与描述相互参照,慢慢理解,重在一个“悟”。

1. 用户激发启动,main函数被调用

2. 创建匿名配置文件 (上一篇文章中代码注释中已经添加了必要的注释)

3. 运行runandwait函数

4. 取得用户的数据目录列表(以下步骤中大部分操作都是在runandwait函数进行的,我们这里仅仅给出示意的描述,没有严格遵循一下规范之类的)

5. 创建一个datanode节点对象(节点对象创建过程中发生了很多过程,我们先简单带过,稍后再介绍)

6. 给这datanode对象创建一个线程对象来同namenode等进行通信,状态维护等等,这个对象同上一步的datanode对象是相互关联的。… 阅读全文

Hadoop源代码分析 之Datanode工作原理(2)—–datanode基本工作过程

  categories:hadoop  author:

原创文章,转载请指明出处并保留原文url地址

引言,hadoop代表一种全新的编程思想,基于hadoop有很多衍生项目,充分利用他们

为我们服务是非常必要的,同时hadoop又是一个复杂系统,若能理解他的工作原理对

我们将有非常大的帮助,我们在这里以hadoop的0.1.0版本为基础逐步分析他的基本工作

原理、结构、思路等等,希望通过这个能帮助我们理解生产中的hadoop系统。 时间有限,

经验不足,疏漏难免,在这里仅仅分享一些心得,希望对大家能起到一个抛砖引玉的作用吧,

有问题请大家给我留言或者评论等,这样也能对我的工作有莫大的帮助。

感谢您阅读这篇文章!

hadoop 相关视频下载地址: http://pan.baidu.com/share/link?shareid=223046310&uk=3073578852

本篇文档是前一篇文档的延续,我们分析datanode节点启动完毕后的工作状况, 本篇文档着重点仍然是源代码的分析工作,后面我们会专门总结一下相关的工作过程,然后再逐步细化相关工作

一.数据读写功能(监听及用户请求接受)

1. 监控进程的启动

在上一篇文章中的构造函数中,如下图

wps_clip_image-3381

ss = new ServerSocket(tmpPort);

……

this.localName = machineName + “:” + tmpPort;

this.dataXceiveServer = new Daemon(new DataXceiveServer(ss));

this.dataXceiveServer.start();

2. DataXceiveServer类

阅读全文

Hadoop源代码分析 之Datanode工作原理(1)—–datanode启动过程代码分析

  categories:hadoop  tags:  author:

原创文章,转载请指明出处并保留原文url地址

引言,hadoop代表一种全新的编程思想,基于hadoop有很多衍生项目,充分利用他们

为我们服务是非常必要的,同时hadoop又是一个复杂系统,若能理解他的工作原理对

我们将有非常大的帮助,我们在这里以hadoop的0.1.0版本为基础逐步分析他的基本工作

原理、结构、思路等等,希望通过这个能帮助我们理解生产中的hadoop系统。 时间有限,

经验不足,疏漏难免,在这里仅仅分享一些心得,希望对大家能起到一个抛砖引玉的作用吧,

有问题请大家给我留言或者评论等,这样也能对我的工作有莫大的帮助。

感谢您阅读这篇文章!

hadoop 相关视频下载地址: http://pan.baidu.com/share/link?shareid=223046310&uk=3073578852

今天我们来个柿子专找软的捏(好吃),我们来共同研究一下hadoop中datanode的相关情况。 datanode在整个hadoop的启动过程中最先启动(见前面文章),同时也相对简单。但是其架构, 网络访问方式,多线程处理等等,都同hadoop的其他组件相同,但却功能较少,简单易于分析,因此我们今天拿他开刀。

本篇文章我们重点研究Datanode启动,稍后我们下一篇研究他的工作过程,之后研究他整体结构,最后我们在研究他的网络通信等过程。

Datanode是java编写的程序, 任何java编写的程序运行起始函数都是main函数,因此我们仅仅需要找到相关的起始函数,就可以了解datanode的启动过程,之后再研究工作过程,研究了工作过程自然了解他的功能了。

我们本次分析也是主要从大的方面入手,先在总体了解相关功能,然后逐步细化,甚至不细化, 彻底分析出0.1.0版本的hadoop不是我们的根本目的,我们根本目的是,由0.1.0入手研究0.20.0的hadoop源代码情况, 然后由hadoop研究到hbase研究, 最终通过hbase来解决海量数据相关问题等等。

1. hadoop的datanode节点Main函数

public static void main(String args[]) {

try {

LogFormatter.setShowThreadIDs(true); // 日志相关,我们在此忽略,以后也将忽略相关日志的情况

runAndWait(new Configuration());// 先创建一个默认的 … 阅读全文

Hadoop源代码分析 之hadoop配置及启动(4)—–启动过程汇总

  categories:hadoop  author:

原创文档,转载请将原文url地址标明

引言,hadoop代表一种全新的编程思想,基于hadoop有很多衍生项目,充分利用他们

为我们服务是非常必要的,同时hadoop又是一个复杂系统,若能理解他的工作原理对

我们将有非常大的帮助,我们在这里以hadoop的0.1.0版本为基础逐步分析他的基本工作

原理、结构、思路等等,希望通过这个能帮助我们理解生产中的hadoop系统。 时间有限,

经验不足,疏漏难免,在这里仅仅分享一些心得,希望对大家能起到一个抛砖引玉的作用吧,

有问题请大家给我留言或者评论等,这样也能对我的工作有莫大的帮助。

感谢您阅读这篇文章!

hadoop 相关视频下载地址: http://pan.baidu.com/share/link?shareid=223046310&uk=3073578852

前面几篇文章介绍了hadoop的启动过程,hadoop启动过程中涉及东西比较多,而且又是分布式的系统,启动过程中涉及多台机器的启动等,因此过程较为复杂,本篇文章主要对启动过程作了汇总整理。

一. Hadoop的主从结构

如下图, hadoop系统包括客户端程序,以及server端程序。

客户端程序包括:管理脚本,用户开发的mapreduce程序等。

Server端程序包括:主节点,由名称节点(Namenode),任务管理节点(jobtracter)等组成;server端程序另外一部分是从节点,包括:数据节点(datanode),任务节点(tasktracter)等构成。

整个集群的启动必须在主节点启动,同时主节点可以同时启动相应从节点, 从节点可以启动自己的程序,但是不能启动主节点(具体原因见后面启动的序列图,配置文件等等因素的影响)。

工作中管理员或者用户通过自己的工作机器,通过ssh等登陆主节点,启动整个集群,也可以一个个连接从节点进行相关工作。

image

二.Hadoop的主从结构与启动关系

Hadoop是一个主从结构的分布式系统, 他的逻辑结构如下图示。

image

用户通过客户端或者登陆服务器节点,启动服务器。服务器主节点通过ssh方式远程执行从节点上的脚本,从而可以管理从节点,以至于全部集群。

整个启动过程中,首先用户或者管理员首先登陆主节点系统

然后下达${hadoop_home}/bin/start-all.sh命令

脚本首先启动系统中全部的datanode节点,如图中①标记所示;然后启动namenode节点,如图②所示;之后启动jobtracter节点,如图中③所示;最后启动tasktracker节点,如图中④所示。

每个节点上相关工作模块已经表示到了图中,其中各个模块的启动先后顺序根据颜色由浅入深的顺序启动,颜色浅的先启动, 颜色深的后启动。

启动过程中需要调用本机及远程服务器上的不同脚本程序,最后将正确的系统配置文件传递给正在启动中的java进程,从而完成整个集群的启动过程。相对详细的java启动过程需要研究java的源代码,我们前面介绍过一些简单启动主要介绍classpath同启动的关系,大家可以参考。

三.Hadoop个主要部件的启动时间顺序

下图是hadoop各个组件模块在启动过程中时间上调用的次序。由于时间关系我们仅仅分析了启动过程。读者感兴趣可以去分析关闭过程。

图中包括:客户端,用户通过客户端或者自己的电脑登陆到服务器,进行相关的管理等工作。

Server端包括: 主节点,这里的主节点是namendoe及jobtracter都包括在一起的配置方式, 分离的方式不在我们这个系列的讨论范围,读者感兴趣可以研究一下。… 阅读全文



快乐成长 每天进步一点点