1. 程式人生 > >hbase客戶端原始碼分析--deletetable

hbase客戶端原始碼分析--deletetable

–hbase 刪除表

HBaseAdmin admin = new HBaseAdmin(conf);

可以檢視原始碼,其實低層也是呼叫建立 HConnectionImplementation 物件進行連線管理的

admin.disableTable(tableName);

然後失效一個表,
裡面類似於delete操作一下,建立一個回撥臨時物件

DisableTableResponse response = executeCallable(
  new MasterCallable<DisableTableResponse>(getConnection()) {
    @Override
    public DisableTableResponse call(int callTimeout) throws ServiceException {
      PayloadCarryingRpcController controller = rpcControllerFactory.newController();
      controller.setCallTimeout(callTimeout);
      controller.setPriority(tableName);

      LOG.info("Started disable of " + tableName);
      DisableTableRequest req =
          RequestConverter.buildDisableTableRequest(
            tableName, ng.getNonceGroup(), ng.newNonce());
      return master.disableTable(controller, req);
    }
  });

在MasterCallable 中的 prepare 方法中

 this.master = this.connection.getKeepAliveMasterService();

拿到hmaster的地址 ,建立如下物件,建立到hmaster的查詢過程

 MasterServiceStubMaker stubMaker = new MasterServiceStubMaker();
  try {
this.masterServiceState.stub = stubMaker.makeStub();

在makeStub方法中呼叫makeStubNoRetries() 方法
建立連線到 zk的物件

 keepAliveZookeeper = new ZooKeeperKeepAliveConnection(conf, this.toString(), this);

然後通過 下面方法進行連線到zk當中

this.recoverableZooKeeper = ZKUtil.connect(conf, quorum, this, identifier);

然後去請請求hmaster的地址
ServerName sn = MasterAddressTracker.getMasterAddress(zkw);

在hmaster拿到hmaster的地址

data = ZKUtil.getData(zkw, zkw.getMasterAddressZNode())

;

最好就可以建立rpc的channel物件了

   BlockingRpcChannel channel = rpcClient.createBlockingRpcChannel(sn, user, rpcTimeout);
  stub = makeStub(channel);

其實是建立了 BlockingRpcChannelImplementation,物件,裡面又呼叫了 rpcClient物件
然後每次建立 連線時,都會進行了 isMasterRunning(); 方法的呼叫進行測試master是否在運行當中
在hmaster的rpc服務中 MasterRpcServices.isMasterRunning 就可以接到請求的方法呼叫。

現在回到最開始的業務,就是 傳送 DisableTableRequest 請求到hmaster中。
接著

admin.deleteTable(tableName);

過程和上面的過程一樣,只是現在請求的物件是DeleteTableRequest 而已

  private Future<Void> deleteTableAsyncV2(final TableName tableName) throws IOException {
DeleteTableResponse response = executeCallable(
  new MasterCallable<DeleteTableResponse>(getConnection()) {
@Override
public DeleteTableResponse call(int callTimeout) throws ServiceException {
  PayloadCarryingRpcController controller = rpcControllerFactory.newController();
  controller.setCallTimeout(callTimeout);
  controller.setPriority(tableName);
  DeleteTableRequest req =
  RequestConverter.buildDeleteTableRequest(tableName, ng.getNonceGroup(),ng.newNonce());
  return master.deleteTable(controller,req);
}
  });
return new DeleteTableFuture(this, tableName, response);
  }

其中 deleteTable是 client 和hmaster的rpc介面方法

大家可能也注意到,像上面也用到了 rpcClient

this.rpcClient = RpcClientFactory.createClient(this.conf, this.clusterId);

這個類是對服務端呼叫的公共rpc類。
所以在之前曾經說到的在傳送RpcClientImpl.call之時,會建立到遠端的連線

  final Call call = new Call(this.callIdCnt.getAndIncrement(), md, param, cells, returnType,
pcrc.getCallTimeout());
   final Connection connection = getConnection(ticket, call, addr);

在這裡建立連線,在連線裡會建立 ConnectionHeader header 類,在發起連線建立時,會上傳客戶端的使用者資訊的

connection.tracedWriteRequest(call, pcrc.getPriority(), Trace.currentSpan());

相關推薦

hbase客戶原始碼分析--deletetable

–hbase 刪除表 HBaseAdmin admin = new HBaseAdmin(conf); 可以檢視原始碼,其實低層也是呼叫建立 HConnectionImplementation 物件進行連線管理的 admin.disableTable(t

hbase客戶原始碼分析--put流程

—client 的呼叫流程 table.put(put); 操作 HTable table = new HTable(conf, Bytes.toBytes(tableName)); 呼叫流程如上面的delete流程一樣 首先建立一個muti的操作物件

MQTT再學習 -- MQTT 客戶原始碼分析

MQTT 原始碼分析,搜尋了一下發現網路上講的很少,多是逍遙子的那幾篇。 參看:逍遙子_mosquitto原始碼分析系列 參看:MQTT libmosquitto原始碼分析 參看:Mosquitto學習筆記 一、目錄結構首先我們還是來看一下 mosquitto-1.4.14 的原始碼目錄結構

RabbitMQ客戶原始碼分析之BlockingCell.md

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 BlockingCell BlockingCell,程式碼文件註釋描述為”簡單的一次性IPC機制“,

RabbitMQ客戶原始碼分析(三)之Command

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 Command Command介面是AMQP方法-引數的容器介面,帶有可選的內容頭(content

RabbitMQ客戶原始碼分析(五)之ConsumerWorkSerivce與WorkPool

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 WorkPool WorkPool可以認

RabbitMQ客戶原始碼分析(六)之IntAllocator

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 IntAllocator 用於分配給定範

RabbitMQ客戶原始碼分析(七)之Channel與ChannelManager

RabbitMQ-java-client版本 com.rabbitmq:amqp-client:4.3.0 RabbitMQ版本宣告: 3.6.15 Channel uml圖 tran

RabbitMQ客戶原始碼分析(九)之RPC請求響應

宣告 Queue宣告、exchange宣告、bind等,這些都是通過同步RPC呼叫 channel.queueDeclare(queueName, durable

Zookeeper客戶原始碼分析

1. 從ZooKeeper構造方法開始:     public ZooKeeper(String connectString, intsessionTimeout, Watcher watcher,             long sessionId, byte[]ses

Zookeeper客戶原始碼分析(一)建立連線

本文基於zookeeper-3.4.14,由於zookeeper的很多構造方法都是呼叫的另一個構造方法,所以分析程式碼的時候直接分

原始碼走讀-Yarn-ResourceManager04-MR任務提交-客戶分析

0x05 RM排程-MR任務提交-客戶端側分析 5.1 mapreduce.job org.apache.hadoop.mapreduce.Job 我們都知道,MR任務的一般結尾會有一句話是job.waitForCompletion(true),這行程式碼

BeeGFS原始碼分析2-客戶概要分析

註冊檔案系統型別 init_fhgfs_client 核心模組初始化: // fhgfs_client_module\source\program\Main.c #define BEEGFS_LICENSE "GPL v2" static int __init init_fhgf

Zookeeper 原始碼(三)Zookeeper 客戶原始碼

Zookeeper 原始碼(三)Zookeeper 客戶端原始碼 Zookeeper 客戶端由以下幾個核心元件組成: 類 說明 Zookeeper Zookeeper 客戶端入口 ClientWatch

C++ TCP多客戶通訊《客戶原始碼

顯示效果已將在上一篇中介紹,上一篇連線:https://blog.csdn.net/yangfahe1/article/details/84027628 客戶端標頭檔案 class TCPClient     : public ITCPClient {

支付寶客戶架構分析:自動化日誌收集及分析

前言 《支付寶客戶端架構解析》系列將從支付寶客戶端的架構設計方案入手,細分拆解客戶端在“容器化框架設計”、“網路優化”、“效能啟動優化”、“自動化日誌收集”、“RPC 元件設計”、“移動應用監控、診斷、定位”等具體實現,帶領大家進一步瞭解支付寶在客戶端架構上的迭代與優化歷程。 本節將結合禾兮

關於Hbase客戶和regionserver之間的單連線

  2013年02月17日 17:45:27 楊步濤的部落格 閱讀數:4417更多 所屬專欄: 大資料 HBase儲存 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/yangbutao/

開源中國APP Android原始碼分析系列(一)

簡述 這篇文章是基於OSCHINA Android客戶端4.1.7版本的分析,之前很多人都分析過原始碼,但是都是幾年前的程式碼分析,隨著時間的推移,開源中國的原始碼也在變化,接下來的一段時間我將分享我通過學習開源中國的程式碼所獲得東西。 啟動頁面 研究一個A

【微信小程式控制硬體②】 開始微信小程式之旅,匯入小程式Mqtt客戶原始碼,實現簡單的驗證和通訊於伺服器!(附帶原始碼

本博文由熱愛分享熱愛技術的半顆心臟原創,非官方人員、非組織名義編寫,博文如有不對或侵犯您的權益,請及時留言,第一時間糾正! 一、前言; 繼續我們的小程式控制智慧硬體(包括esp8266)學

軟體工程第4次作業------石墨文件Android客戶案例分析

作業要求的部落格連結:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2505 分析產品:石墨文件Android客戶端     第一部分 調研和評測 1.下載並使用,按照描述的bug定義,找3~5個功能性的比較嚴重的bu