国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 基于HBase Thrift接口的一些使用問題及相關(guān)注意事項的詳解

基于HBase Thrift接口的一些使用問題及相關(guān)注意事項的詳解

2020-03-28 12:39PHP教程網(wǎng) PHP教程

本篇文章是對HBase Thrift接口的一些使用問題及相關(guān)注意事項進行了詳細的分析介紹,需要的朋友參考下

HBase對于非Java語言提供了Thrift接口支持,這里結(jié)合對HBase Thrift接口(HBase版本為0.92.1)的使用經(jīng)驗,總結(jié)其中遇到的一些問題及其相關(guān)注意事項。
1. 字節(jié)的存放順序
HBase中,由于row(row key和column family、column qualifier、time stamp)是按照字典序進行排序的,因此,對于short、int、long等類型的數(shù)據(jù),通過Bytes.toBytes(…)轉(zhuǎn)換成byte數(shù)組后,必須按照大端模式(高字節(jié)在低地址,低字節(jié)在高地址)存放。對于value,也是同樣的道理。因此,在使用Thrift API(C++、Php、Python等)方式時,最好對于row和value都統(tǒng)一按照大端進行pack和unpack處理。
舉個例子,C++中,對于int型變量,經(jīng)過以下方式轉(zhuǎn)換為字典序:

復制代碼 代碼如下:


string key;
  int32_t timestamp = 1352563200;
  const char* pTs =(const char*) ×tamp;
  size_t n = sizeof(int32_t);
  key.append(pTs, n);


通過以下方式將字典序轉(zhuǎn)換為int:

復制代碼 代碼如下:


const char * ts = key.c_str();
int32_t timestamp = *((int32_t*)(ts));


Php中則提供了pack和unpack方法進行轉(zhuǎn)換:

復制代碼 代碼如下:


  $key = pack("N", $num);
  $num = unpack("N", $key);


2. TScan的使用陷阱
HBase的PHP Thrift接口中,TScan可以直接通過設置startRow、stopRow、columns、filter等屬性,默認這些屬性均為null,設置后變?yōu)榉莕ull(通過TScan的構(gòu)造函數(shù)或直接對TScan的成員變量進行賦值)。通過write()方法和Thrift Server進行RPC操作時,直接判斷的依據(jù)是這些屬性不為null,則通過Thrift協(xié)議傳輸?shù)絋hrift Server端。
但是在C++的Thrift接口中,TScan中有一個_TScan__isset __isset類型的變量,其內(nèi)部結(jié)構(gòu)如下:

復制代碼 代碼如下:


typedef struct _TScan__isset {
  _TScan__isset() : startRow(false), stopRow(false), timestamp(false), columns(false), caching(false), filterString(false) {}
  bool startRow;
  bool stopRow;
  bool timestamp;
  bool columns;
  bool caching;
  bool filterString;
} _TScan__isset;


TScan的write()方法則是通過判斷_TScan__isset下的各個bool變量標記是否設置了startRow、stopRow、columns、filter等屬性,決定是否將這些屬性通過Thrift協(xié)議傳輸?shù)絋hrift Server端,而這些屬性必須通過__set_xxx()方法進行設置才能生效!在TScan的默認構(gòu)造函數(shù)中,并不會對這些屬性對應的__isset標記設置為true!
因此,如果直接通過TScan的構(gòu)造函數(shù)初始化startRow、stopRow、columns、filter等屬性會導致從頭遍歷該表,只有調(diào)用了__set_xxx()方法才會將對應的bool標識設置為true,這樣服務端才會從Thrift Server獲取startRow、stopRow、columns、filter等屬性進行掃描。
3. 并發(fā)訪問線程數(shù)
首先,為了盡可能減少由于網(wǎng)絡傳輸帶來的時間開銷,HBase的Thrift Server最好和應用客戶端部署在同一臺機器上。Thrift Server啟動時可以通過參數(shù)配置并發(fā)線程數(shù),否則很容易導致Thrift Server線程滿了不響應客戶端的讀寫請求,具體命令:bin/hbase-daemon.sh start thrift --threadpool -m 200 -w 500(更多參數(shù)參考這里:bin/hbase-daemon.sh start thrift -h)。
4. 最大堆內(nèi)存配置
如果客戶端與Thrift Server進行scan操作順序讀取數(shù)據(jù),而且設置了一定的cache記錄條數(shù)(通過TScan的int32_t caching變量設置),那么這些被caching的記錄數(shù)可能會占用Thrift Server相當部分的堆內(nèi)存,尤其在多客戶端并發(fā)訪問時更明顯。
因此,在Thrift Server啟動前,可以調(diào)大最大堆內(nèi)存,否則可能由于java.lang.OutOfMemoryError異常而導致進程被殺掉,尤其是當Scan時設置了較大的caching記錄條數(shù)的情況(默認為export HBASE_HEAPSIZE=1000MB,可以在conf/hbase-env.sh中設置)。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 一区二区三区四区在线视频 | 日本天堂在线 | 欧美精品在线一区二区三区 | 亚洲精品一区二区三区在线播放 | 色噜噜狠狠一区二区三区狼国成人 | 伊人久久综合 | 伊人精品影院 | 国产激情精品视频 | 99国产精品99久久久久久 | 精品国产一区三区 | 中文字幕亚洲一区二区va在线 | 激情五月婷 | 亚洲一区二区三区 | 亚洲精品综合 | 久久久国际精品 | 伦理午夜电影免费观看 | 亚洲久久 | 激情国产 | 国产精品久久久久久吹潮 | 日韩精品一区二区三区丰满 | 国产噜噜噜噜噜久久久久久久久 | 久久99精品国产 | 久久久免费视频播放 | 欧美激情一区二区 | 青青久在线视频 | 国内外成人激情免费视频 | 国产电影一区二区三区图片 | 天堂中文视频在线观看 | 亚洲精品视频免费在线观看 | 亚洲成人久久久 | 精品国产免费人成在线观看 | 国产欧美在线观看 | 一区二区三区免费在线观看 | 欧美一级在线视频 | 久久亚洲国产 | jizzzz中国| 日韩成人免费电影 | 久久逼逼| 国产51人人成人人人人爽色哟哟 | 日韩一区二区在线播放 | 成av在线|