Hbase 源码调试:Remote debug 模式

不愤不启,不悱不发;举一隅不以三隅反,则不复也。 

  解释:(教学生)不到他苦思冥想怎么也弄不明白的时候,不去开导他;不到他想说而又说不出来的时候,不去启发他。告诉他(四方形)的一个角,他不能由此推出另外三个角,就不再往下教他(新知识)了。

  学习Hbase的开端,就是要了解它的架构,以及HMaster,HRegionServer 的一个启动流程,明白了Hbase内部的基本流程,才能从大局上把握住。明白了Hbase的组成部分,才能在集群出现问题的时候,快速定位到模块,再从模块定位到具体的错误。

  下面记录下在搭建hbase源码阅读环境中的步骤:

    1、mvn 安装(Maven 3.0 or later)

    2、在命令行中cd 到hbase的源码目录中,执行 mvn eclipse:eclipse 慢慢等待啊

    3、在Eclipse中选择导入Existing Maven Project

    4、按照源码目录下的pom.xml的项目顺序对每个子项目进行 mavn install(Eclipse直接操作),这个过程中可能会提示jdk的 tools.jar找不到的问题,只需要在该项目  

       pom.xml文件中添加指定tools.jar的位置

<dependency>
      <groupId>jdk.tools</groupId>
      <artifactId>jdk.tools</artifactId>
      <version>1.7</version>
      <scope>system</scope>
      <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
 </dependency>

   

  使用Remote debug的方式对Hbase源码进行调试,Remote debug 顾名思义就是远程的程序调试,使用这种方法对代码调试不需要本地具有程序的运行环境,而且更直观的看到hbase在集群模式中的启动过程和运行状况。

  Remote debug 的配置方式:

    1、在远程集群的hbase的conf目录下找到hbase-env.sh文件,在jvm启动参数中添加

       -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8081,server=y,suspend=y

      如:export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xdebug -Xnoagent -Djava.compiler=NONE -

      Xrunjdwp:transport=dt_socket,address=8081,server=y,suspend=y"

    参数说明:

      server=y         目标应用程序作为服务监听将要连接的远程调试器(常用)

      suspend=y/n   目标VM是否暂停等待本地debug连接,推荐使用y

      address=8081  端口。

    2、配置Eclipse的Remote debug, 右键项目 debug As --》 debug configuration

点击Debug 就可以愉快的跟踪调试Hbase代码了。

      

    

时间: 2024-10-25 07:46:46

Hbase 源码调试:Remote debug 模式的相关文章

又是正版!Win下ffmpeg源码调试分析二(Step into ffmpeg from Opencv for bugs in debug mode with MSVC)

最近工作忙一直没时间写,但是看看网络上这方面的资源确实少,很多都是linux的(我更爱unix,哈哈),而且很多是直接引入上一篇文章的编译结果来做的.对于使用opencv但是又老是被ffmpeg库坑害的朋友们,可能又爱又恨,毕竟用它处理和分析视频是第一选择,不仅是因为俩者配合使用方便,而且ffmpeg几乎囊括了我所知道的所有解编码器,但是正是因为这个导致了一些bug很难定位,所以有必要考虑一下如何快速定位你的ffmpeg bug. sorry,废话多了.首先给个思路: 1.使opencv 的hi

Android源码开发利器——Java源码调试(基于4.1.2)

原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038 调试Android Java源码 草帽的后花园--Neo 写在之前的话:这里主要是以调试Java源码为主,应该说是在system_process之后的源码,这对于调试和修改frameworks层的人来说真是一个利器,但至于为什么在system_process之后,我还在分析,如果有结果我会更新此文章,并正在尝试调试C++的代码,就是native中的代码,如果这个可行那将会大大

Hbase源码分析:RPC概况

RPC是hbase中Master,RegionServer和Client三者之间通信交流的纽带.了解hbase的rpc机制能够为通过源码学习hbase奠定良好的基础.因为了解了hbase的rpc机制能够很快通过debug深入理解hbase各种机制(比方说flush,compaction,scan等请求)的流程.同时也便于碰到问题时,通过源码分析找到原因,毕竟源码面前了无秘密. 1,RPC简介 RPC(remote procedure call)即远程过程调用.对于本地调用,定义好一个函数以后,程

在eclipse中进行HotSpot的源码调试

本文地址:http://www.cnblogs.com/myresearch/p/ide-buildhotspot.html,转载请注明源地址. 在阅读OpenJDK源码的过程中,经常需要运行.调试程序来帮助理解.我们现在已经可以编译出一个调试版本HotSpot虚拟机,禁用优化,并带有符号信息,这样就可以使用GDB来进行调试了.许多对虚拟机了解比较深的开发人员确实就是直接使用GDB加VIM编辑器来开发.修改HotSpot的,不过相信大部分读者更倾向于在IDE环境而不是纯文本的GDB下阅读.跟踪H

hbase源码系列(七)Snapshot的过程

在看这一章之前,建议大家先去看一下snapshot的使用.可能有人会有疑问为什么要做Snapshot,hdfs不是自带了3个备份吗,这是个很大的误区,要知道hdfs的3个备份是用于防止网络传输中的失败或者别的异常情况导致数据块丢失或者不正确,它不能避免人为的删除数据导致的后果.它就想是给数据库做备份,尤其是做删除动作之前,不管是hbase还是hdfs,请经常做Snapshot,否则哪天手贱了... 直接进入主题吧,上代码. public void takeSnapshot(SnapshotDes

hbase源码系列(十三)缓存机制MemStore与Block Cache

这一章讲hbase的缓存机制,这里面涉及的内容也是比较多,呵呵,我理解中的缓存是保存在内存中的特定的便于检索的数据结构就是缓存. 之前在讲put的时候,put是被添加到Store里面,这个Store是个接口,实现是在HStore里面,MemStore其实是它底下的小子. 那它和Region Server.Region是什么关系? Region Server下面有若干个Region,每个Region下面有若干的列族,每个列族对应着一个HStore. HStore里面有三个很重要的类,在这章的内容都

hbase源码系列(十二)Get、Scan在服务端是如何处理?

继上一篇讲了Put和Delete之后,这一篇我们讲Get和Scan, 因为我发现这两个操作几乎是一样的过程,就像之前的Put和Delete一样,上一篇我本来只打算写Put的,结果发现Delete也可以走这个过程,所以就一起写了. Get 我们打开HRegionServer找到get方法.Get的方法处理分两种,设置了ClosestRowBefore和没有设置的,一般来讲,我们都是知道了明确的rowkey,不太会设置这个参数,它默认是false的. if (get.hasClosestRowBef

jdk源码调试功能

JDK源码重新编译——支持eclipse调试JDK源码--转载 最近在研究jdk源码,发现debug时无法查看源码里的变量值. 因为sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar. 下面这六步是编译jdk的具体步骤: Step 1:  Locate the JDK source First navigate to the JDK install directory, and locate the src.zip file. This file contains the

hbase源码系列(六)HMaster启动过程

这一章是server端开始的第一章,有兴趣的朋友先去看一下hbase的架构图,我专门从网上弄下来的. 按照HMaster的run方法的注释,我们可以了解到它的启动过程会去做以下的动作. * <li>阻塞直到变成ActiveMaster * <li>结束初始化操作 * <li>循环 * <li>停止服务并执行清理操作* </ol> HMaster是没有单点问题是,因为它可以同时启动多个HMaster,然后通过zk的选举算法选出一个HMaster来.