Hbase rest 舉例

寫(xiě)在前面:

啟動(dòng)rest服務(wù)挣磨,使用http請(qǐng)求操作hbase(設(shè)置端口為8080)牙肝。對(duì)于hbase rest的使用是對(duì)java內(nèi)容的屏蔽,如果你是java程序員請(qǐng)不要這么做断国!插入數(shù)據(jù)不推薦使用撕彤,對(duì)于查找get rowkey的結(jié)果較為方便鱼鸠,但是也不推薦使用。適用于對(duì)java不熟悉 或者針對(duì)項(xiàng)目演示的需求羹铅。


1.獲取版本及集群環(huán)境信息(粗略)


  • 1.1獲取表list(get請(qǐng)求)
    http://example.com:8080/

    結(jié)果返回:

    {"table":[{"name":"TSL_EvcRealTimeData"},{"name":"test"},{"name":"test2"}]}

程序代碼舉例:

public static String getTableList(String acceptInfo){
 String uriAPI = "http://example.com:8080/";
 String result = "";
 HttpGet httpRequst = new HttpGet(uriAPI);
   try {
     httpRequst.setHeader("accept", acceptInfo);
     HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);
     // 其中HttpGet是HttpUriRequst的子類(lèi)
     int statusCode = httpResponse.getStatusLine().getStatusCode();
       if (statusCode == 200 || statusCode == 403) {
         HttpEntity httpEntity = httpResponse.getEntity();
         result = EntityUtils.toString(httpEntity);// 取出應(yīng)答字符串
         // 一般來(lái)說(shuō)都要?jiǎng)h除多余的字符
         // 去掉返回結(jié)果中的"\r"字符蚀狰,否則會(huì)在結(jié)果字符串后面顯示一個(gè)小方格
         // result.replaceAll("\r", "");
       } else {
         httpRequst.abort();
         result = "異常的返回碼:"+statusCode;
       }
     } catch (ClientProtocolException e) {
       e.printStackTrace();
       result = e.getMessage().toString();
     } catch (IOException e) {
       e.printStackTrace();
       result = e.getMessage().toString();
 }
 return result;
}

  • 1.2獲取表結(jié)構(gòu)(get請(qǐng)求)
    "http://example.com:8080/tableName/schema"

    返回結(jié)果:

    {"name":"TSL_EvcRealTimeData","ColumnSchema":[{"name":"info","BLOOMFILTER":"ROW","VERSIONS":"1","IN_MEMORY":"false","KEEP_DELETED_CELLS":"FALSE","DATA_BLOCK_ENCODING":"NONE","TTL":"2147483647","COMPRESSION":"NONE","MIN_VERSIONS":"0","BLOCKCACHE":"true","BLOCKSIZE":"65536","REPLICATION_SCOPE":"0"}],"IS_META":"false"}

    程序代碼舉例:

public static String getSchemaInfo(String tableName, String acceptInfo) {
 String uriAPI = "http://example.com:8080/" + tableName + "/schema";
 String result = "";
 HttpGet httpRequst = new HttpGet(uriAPI);
   try {
     httpRequst.setHeader("accept", acceptInfo);
     HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);
     // 其中HttpGet是HttpUriRequst的子類(lèi)
     int statusCode = httpResponse.getStatusLine().getStatusCode();
     f (statusCode == 200 || statusCode == 403) {
       HttpEntity httpEntity = httpResponse.getEntity();
       result = EntityUtils.toString(httpEntity);// 取出應(yīng)答字符串
       // 一般來(lái)說(shuō)都要?jiǎng)h除多余的字符
       // 去掉返回結(jié)果中的"\r"字符,否則會(huì)在結(jié)果字符串后面顯示一個(gè)小方格
       // result.replaceAll("\r", "");
      } else {
       httpRequst.abort();
       result = "異常的返回碼:"+statusCode;
     }
   } catch (ClientProtocolException e) {
     e.printStackTrace();
     result = e.getMessage().toString();
   } catch (IOException e) {
     e.printStackTrace();
     result = e.getMessage().toString();
 }
 return result;
}

public static String createHtable(String newTableName, String jsonOrXmlStr,String jsonOrXml) {
       String uriAPI = "http://example.com:8080/" + newTableName + "/schema";
       String result = "";
       HttpPost httpRequst = new HttpPost(uriAPI);
       try {
           StringEntity s = new StringEntity(jsonOrXmlStr.toString());
           httpRequst.setHeader("accept", jsonOrXml);
           httpRequst.setHeader("Content-Type", jsonOrXml);
           httpRequst.setEntity(s);
           HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);
           // 其中HttpGet是HttpUriRequst的子類(lèi)
           int statusCode = httpResponse.getStatusLine().getStatusCode();
           if (statusCode == 200||statusCode == 201) {
               HttpEntity httpEntity = httpResponse.getEntity();
               result = "code=>"+statusCode+":"+EntityUtils.toString(httpEntity);// 取出應(yīng)答字符串
               // 一般來(lái)說(shuō)都要?jiǎng)h除多余的字符
               // 去掉返回結(jié)果中的"\r"字符睦裳,否則會(huì)在結(jié)果字符串后面顯示一個(gè)小方格
               // result.replaceAll("\r", "");
           } else {
               httpRequst.abort();
               result = "沒(méi)有返回正確的狀態(tài)碼造锅,請(qǐng)仔細(xì)檢查請(qǐng)求表名";
           }
       } catch (ClientProtocolException e) {
           e.printStackTrace();
           result = e.getMessage().toString();
       } catch (IOException e) {
           e.printStackTrace();
           result = e.getMessage().toString();
       }
       return result;
   }

public static String deleteHtable(String deteleTableName,String jsonOrXml) {
       String uriAPI = "http://121.199.28.106:8080/" + deteleTableName + "/schema";
       String result = "";
       HttpDelete httpRequst = new HttpDelete(uriAPI);
       try {
           httpRequst.setHeader("accept", jsonOrXml);
           httpRequst.setHeader("Content-Type", jsonOrXml);
           HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);
           // 其中HttpGet是HttpUriRequst的子類(lèi)
           int statusCode = httpResponse.getStatusLine().getStatusCode();
           if (statusCode == 200) {
               HttpEntity httpEntity = httpResponse.getEntity();
               result = "code=>"+statusCode+":"+EntityUtils.toString(httpEntity);// 取出應(yīng)答字符串
               // 一般來(lái)說(shuō)都要?jiǎng)h除多余的字符
               // 去掉返回結(jié)果中的"\r"字符,否則會(huì)在結(jié)果字符串后面顯示一個(gè)小方格
               // result.replaceAll("\r", "");
           } else {
               httpRequst.abort();
               result = "沒(méi)有返回正確的狀態(tài)碼廉邑,請(qǐng)仔細(xì)檢查請(qǐng)求表名";
           }
       } catch (ClientProtocolException e) {
           e.printStackTrace();
           result = e.getMessage().toString();
       } catch (IOException e) {
           e.printStackTrace();
           result = e.getMessage().toString();
       }
       return result;
   }

2.寫(xiě)入數(shù)據(jù)


返回結(jié)果:

成功:200

程序代碼舉例:

public static String writeRowInTableByJson(String tableName, String jsonStr) {
      String uriAPI = "http://121.199.28.106:8080/" + tableName + "/fakerow";
      StringBuilder result = new StringBuilder();
      HttpPut put = new HttpPut(uriAPI);
      try {
          put.addHeader("Accept", "application/json");
          put.addHeader("Content-Type", "application/json");
          // JSONObject jsonObject = JSONObject.fromObject(jsonStr);
          StringEntity input = null;
          try {
              input = new StringEntity(jsonStr);
          } catch (UnsupportedEncodingException e) {
              e.printStackTrace();
          }
          put.setEntity(input);
          DefaultHttpClient httpClient = new DefaultHttpClient();
          HttpResponse httpResponse = httpClient.execute(put);
          int status = httpResponse.getStatusLine().getStatusCode();
          if ( status != 200) {
              throw new RuntimeException("Failed : HTTP error code : " + httpResponse.getStatusLine().getStatusCode());
          }
          BufferedReader br = new BufferedReader(new InputStreamReader((httpResponse.getEntity().getContent())));
          String output;
          while ((output = br.readLine()) != null) {
              result.append(output);
          }
          result.append("-code:"+status);
      } catch (Exception e) {
          e.printStackTrace();
      }

      return result.toString();
  }

3.獲取數(shù)據(jù)


返回結(jié)果:

成功:200 , 結(jié)果信息(xml/json)

程序代碼舉例:

public static String getRowKey(String tableName, String rowkey,String paramInfo, String xmlOrJson) {
      String uriAPI = "http://121.199.28.106:8080/" + tableName + "/" + rowkey+"/info:"+paramInfo;
      String result = "";
      HttpGet getR = new HttpGet(uriAPI);
      try {
          getR.setHeader("accept", xmlOrJson);
          HttpResponse httpResponse = new DefaultHttpClient().execute(getR);
          // 其中HttpGet是HttpUriRequst的子類(lèi)
          int statusCode = httpResponse.getStatusLine().getStatusCode();
          if (statusCode == 200 || statusCode == 403) {
              HttpEntity httpEntity = httpResponse.getEntity();
              result = EntityUtils.toString(httpEntity);// 取出應(yīng)答字符串
              // 一般來(lái)說(shuō)都要?jiǎng)h除多余的字符
              // 去掉返回結(jié)果中的"\r"字符倒谷,否則會(huì)在結(jié)果字符串后面顯示一個(gè)小方格
              // result.replaceAll("\r", "");
          } else {
              getR.abort();
              result = "沒(méi)有返回正確的狀態(tài)碼蛛蒙,請(qǐng)仔細(xì)檢查請(qǐng)求表名及參數(shù)格式!";
          }
      } catch (ClientProtocolException e) {
          e.printStackTrace();
          result = e.getMessage().toString();
      } catch (IOException e) {
          e.printStackTrace();
          result = e.getMessage().toString();
      }
      return result;
  }

返回結(jié)果:

成功:200 渤愁, 結(jié)果信息(xml/json)

程序代碼舉例:

public static String scan(String tableName,String startRowkey,String endRowkey,String[] params,String xmlOrJson){
      String uriAPI = "http://121.199.28.106:8080/" + tableName + "/*?startrow=" + startRowkey+"&endrow="+endRowkey;
      String result = "";
      HttpGet getR = new HttpGet(uriAPI);
      try {
          getR.setHeader("accept", xmlOrJson);
          HttpResponse httpResponse = new DefaultHttpClient().execute(getR);
          // 其中HttpGet是HttpUriRequst的子類(lèi)
          int statusCode = httpResponse.getStatusLine().getStatusCode();
          if (statusCode == 200 || statusCode == 403) {
              HttpEntity httpEntity = httpResponse.getEntity();
              result = EntityUtils.toString(httpEntity);// 取出應(yīng)答字符串
              // 一般來(lái)說(shuō)都要?jiǎng)h除多余的字符
              // 去掉返回結(jié)果中的"\r"字符牵祟,否則會(huì)在結(jié)果字符串后面顯示一個(gè)小方格
              // result.replaceAll("\r", "");
          } else {
              getR.abort();
              result = "沒(méi)有返回正確的狀態(tài)碼,請(qǐng)仔細(xì)檢查請(qǐng)求表名及參數(shù)格式抖格!";
          }
      } catch (ClientProtocolException e) {
          e.printStackTrace();
          result = e.getMessage().toString();
      } catch (IOException e) {
          e.printStackTrace();
          result = e.getMessage().toString();
      }
      return result;
  }

項(xiàng)目下載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诺苹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雹拄,更是在濱河造成了極大的恐慌收奔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滓玖,死亡現(xiàn)場(chǎng)離奇詭異坪哄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)翩肌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)模暗,“玉大人,你說(shuō)我怎么就攤上這事念祭《矣睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵粱坤,是天一觀的道長(zhǎng)顾孽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)比规,這世上最難降的妖魔是什么若厚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蜒什,結(jié)果婚禮上测秸,老公的妹妹穿的比我還像新娘。我一直安慰自己灾常,他們只是感情好霎冯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著钞瀑,像睡著了一般沈撞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雕什,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天缠俺,我揣著相機(jī)與錄音,去河邊找鬼贷岸。 笑死壹士,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偿警。 我是一名探鬼主播躏救,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼螟蒸!你這毒婦竟也來(lái)了盒使?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤七嫌,失蹤者是張志新(化名)和其女友劉穎少办,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體抄瑟,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凡泣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年枉疼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞋拟。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骂维,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贺纲,到底是詐尸還是另有隱情航闺,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布猴誊,位于F島的核電站潦刃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏懈叹。R本人自食惡果不足惜乖杠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澄成。 院中可真熱鬧胧洒,春花似錦、人聲如沸墨状。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肾砂。三九已至列赎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镐确,已是汗流浹背包吝。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辫塌,地道東北人漏策。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像臼氨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芭届,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • apache下的httpclient工具可大大簡(jiǎn)化開(kāi)發(fā)過(guò)程中的點(diǎn)對(duì)點(diǎn)通信储矩,本人將以微信多媒體接口為例,展示http...
    劃破的天空閱讀 5,297評(píng)論 0 32
  • 經(jīng)驗(yàn):1.在網(wǎng)絡(luò)端接收數(shù)據(jù)后寫(xiě)入本地時(shí)要用write(byte[],0,len),不要用write(byte[])...
    123yuan123閱讀 381評(píng)論 0 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理褂乍,服務(wù)發(fā)現(xiàn)持隧,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 該文僅對(duì)于中間這種支付方式有參考價(jià)值喲 一逃片、開(kāi)發(fā)背景 在微信公眾號(hào)中屡拨,需要進(jìn)行微信支付且為微信公眾號(hào)網(wǎng)頁(yè)支付。 二...
    英文名叫夏天閱讀 1,815評(píng)論 0 7
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法呀狼,內(nèi)部類(lèi)的語(yǔ)法裂允,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法哥艇,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,639評(píng)論 18 399