搜索
首页后端开发php教程HBase & thrift & C++缂栫▼_PHP教程

HBase & thrift & C++缂栫▼

HBase & thrift & C++缂栫▼_PHP教程HBase & thrift & C++缂栫▼.pdf

鐩綍

鐩綍1

1.鍓嶈█1

2.鍚姩鍜屽仠姝?span>thrift2 1

2.1.鍚姩thrift2 1

2.2.鍋滄thrift2 1

2.3.鍚姩鍙傛暟2

3.hbase.thrift2

3.1.缂栬瘧hbase.thrift 2

4.thrift_helper.h3

5.绀轰緥浠g爜4

1.鍓嶈█

鏈枃鐩殑鏄粙缁嶄娇鐢?span>C++濡備綍鎿嶄綔HBase銆備粠HBase0.94寮€濮嬶紝HBase鏂板thrift2锛屾湰鏂囧彧浠嬬粛鍜岃璁?/span>thrift2鐩稿叧鐨勩€?/span>hbase-1.1.2浣跨敤鐨?/span>thrift浼拌鏄?/span>thrift-0.9.0鐗堟湰銆?

2.鍚姩鍜屽仠姝?span>thrift2

2.1.鍚姩thrift2

鐧诲綍HBasemaster鏈哄櫒锛屾墽琛屼互涓嬪懡浠ゅ惎鍔?/span>thrift2锛?/span>hbase-daemon.shstartthrift2銆?

thrift榛樿鐨勭洃鍚鍙f槸9090锛屽彲浠ラ€氳繃鍙傛暟鈥?span>-p鈥濇寚瀹氬叾瀹冪鍙c€傞粯璁や娇鐢ㄧ殑Server鏄?/span>TThreadPoolServer銆傞粯璁や娇鐢ㄧ殑Protocol鏄?/span>TBinaryProtocol銆?/span>

娉ㄦ剰瀹㈡埛绔娇鐢ㄧ殑Protocol鍜?/span>Transport鍜屾湇鍔$鐨勮淇濇寔涓€鑷达紝鍚﹀垯瀹㈡埛绔湪璋冪敤鏃讹紝鍙兘閬囧埌鈥淓AGAIN(timedout)鈥濈瓑閿欒銆?

2.2.鍋滄thrift2

hbase-daemon.shstopthrift2

2.3.鍚姩鍙傛暟

浣跨敤鈥渉base-daemon.shstartthrift2鈥濇椂锛岃繕鍙互甯︿互涓嬪弬鏁帮細

鍙傛暟鍚?/span>

鏄惁榛樿

鍙傛暟璇存槑

-h,--help

鏄剧ず甯姪淇℃伅

-b,--bind

缁戝畾鎸囧畾鍦板潃锛屼絾涓嶆敮鎸?span>TNonblockingServer鍜?/span>THsHaServer锛屼袱鑰呮€绘槸浣跨敤鈥?/span>0.0.0.0鈥?/span>

-p,--port

9090

缁戝鎸囧畾绔彛锛岄粯璁や负9090

-f,--framed

浣跨敤TFramedTransport

-c,--compact

浣跨敤TCompactProtocol锛岄粯璁ゆ槸TBinaryProtocol

-threadpool

鏄?/span>

浣跨敤TThreadPoolServer锛屼负榛樿Server

-nonblocking

浣跨敤瀹炵幇浜?span>FramedTransport鐨?/span>TNonblockingServer

-hsha

浣跨敤瀹炵幇浜?span>FramedTransport鐨?/span>THsHaServer

瀹㈡埛绔拰hbasethrift2鐨?/span>Transport鍜?/span>Protocol闇€淇濇寔涓€鑷达紝姣斿瀹㈡埛绔负FramedTransport锛屽垯涔熼渶浠モ€?/span>-f鈥濆惎鍔?/span>hbasethrift2銆?/span>

鍚﹀垯瀹㈡埛绔湪璋冪敤鏃讹紝鍙兘浼氶亣鍒扳€淓AGAIN(timedout)鈥濈瓑閿欒銆?

鍚姩鍙傛暟淇℃伅鏉ユ簮浜庡畼缃戠殑椤甸潰锛?

https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/thrift2/package-summary.html銆?

浠ヤ笂鍙傛暟涓嶆槸缁?span>hbase-daemon.sh浣跨敤锛岃€屾槸琚?/span>hbasethrift2浣跨敤锛屽彲浠ユ祻瑙堢浉鍏虫簮浠g爜浜嗚В缁嗚妭锛?/span>

hbase-thrift\src\main\java\org\apache\hadoop\hbase\thrift2\ThriftServer.java

hbase-thrift\src\main\java\org\apache\hadoop\hbase\thrift2\ThriftHBaseServiceHandler.java

?鍚姩绀轰緥锛?

hbase-daemon.shstartthrift2--framed-nonblocking

3.hbase.thrift

hbaser.thrift鏂囦欢鍦?/span>hbase婧愪唬鐮佸寘锛堜互hbase-1.1.2涓轰緥锛変腑鐨勪綅缃細

hbase-thrift\src\main\resources\org\apache\hadoop\hbase\thrift2\hbase.thrift

3.1.缂栬瘧hbase.thrift

淇濇寔鏈哄櫒涓婂凡瀹夎濂?span>thrift锛堢粡娴嬭瘯hbase-1.1.2鍜?/span>thrift-0.9.0鍏煎锛夛紝鐒跺悗浣跨敤涓嬪垪鍛戒护缂栬瘧锛?/span>thrift--gencpp-out.hbase.thrift锛岀紪璇戞垚鍔熷悗锛屼細鍦ㄢ€?span>-out鈥濇寚瀹氱殑鐩綍涓嬬敓鎴愪互涓嬩簲涓枃浠讹細

THBaseService.h

THBaseService.cpp

hbase_types.h

hbase_types.cpp

hbase_constants.h

hbase_constants.cpp

鍏朵腑渚涘鎴风浣跨敤鐨勬槸浣嶄簬鏂囦欢THBaseService.h涓殑绫?/span>THBaseServiceClient銆?

4.thrift_helper.h

涓轰簡绠€鍖?span>C++瀹㈡埛绔殑缂栫▼锛屽彲浠ヤ娇鐢?/span>thrift_helper.h锛?/span>

https://github.com/eyjian/mooon/blob/master/common_library/include/mooon/net/thrift_helper.h锛屽畠鍙互甯姪绠€鍖栧HBasethrift2鐨勮皟鐢細

//thrift瀹㈡埛绔緟鍔╃被

//

//浣跨敤绀轰緥锛?/span>

//mooon::net::CThriftClientHelperclient(rpc_server_ip,rpc_server_port);

//try

//{

//client.connect();

//client->foo();

//}

//catch(apache::thrift::transport::TTransportException&ex)

//{

//MYLOG_ERROR("thriftexception:(%d)%s\n",ex.getType(),ex.what());

//}

//catch(apache::thrift::transport::TApplicationException&ex)

//{

//MYLOG_ERROR("thriftexception:%s\n",ex.what());

//}

//catch(apache::thrift::TException&ex)

//{

//MYLOG_ERROR("thriftexception:%s\n",ex.what());

//}

//Transport闄ら粯璁ょ殑TFramedTransport(TBufferTransports.h)锛岃繕鍙€夋嫨锛?/span>

//TBufferedTransport(TBufferTransports.h)

//THttpTransport

//TZlibTransport

//TFDTransport(TSimpleFileTransport)

//

//Protocol闄ら粯璁ょ殑apache::thrift::protocol::TBinaryProtocol锛岃繕鍙€夋嫨锛?/span>

//TCompactProtocol

//TJSONProtocol

//TDebugProtocol

template

classProtocol=apache::thrift::protocol::TBinaryProtocol,

classTransport=apache::thrift::transport::TFramedTransport>

classCThriftClientHelper

5.绀轰緥浠g爜

//HBasethrift2C++缂栫▼绀轰緥

#include"THBaseService.h"

#include//PRIu64

#include

#include

#include

//璇锋敞鎰忓鎴风浣跨敤鐨則hrift鐨凾ransport鍜孭rotocol瑕佸拰hbasethrift2鏈嶅姟绔繚鎸佷竴鑷达紝

//鍚﹀垯璋冪敤鏃讹紝鍙兘鎬绘槸鎶ヨ秴鏃讹紝鎴栧叾瀹冮敊璇紒锛侊紒

//

//杩愯涔嬪墠锛岃閫氳繃HBaseshell鍒涘缓濂借〃锛歝reate'test','cf1','cf2'

//鎴栨寚瀹氱増鏈暟锛歝reate'test',{NAME=>'cf1',VERSIONS=>2},{NAME=>'cf2',VERSIONS=>3}

//鍒犻櫎琛紝鎸夐『搴忔墽琛屼互涓嬩袱鏉Baseshell鍛戒护锛?/span>

//disable'test'

//drop'test'

STRING_ARG_DEFINE(hbase_ip,"192.168.0.1","hbasethriftip");

INTEGER_ARG_DEFINE(uint16_t,hbase_port,9090,1000,50000,"hbasethriftport");

intmain(intargc,char*argv[])

{

std::stringerrmsg;

if(!mooon::utils::parse_arguments(argc,argv,&errmsg))

{

fprintf(stderr,"parametererror:%s\n",errmsg.c_str());

exit(1);

}

usingnamespaceapache;

usingnamespaceapache::hadoop;

std::stringhbase_ip=mooon::argument::hbase_ip->value();

uint16_thbase_port=mooon::argument::hbase_port->value();

mooon::net::CThriftClientHelper<:thrift2::thbaseserviceclient>hbase_client(hbase_ip,hbase_port);

try

{

hbase_client.connect();//杩炴帴hbasethrift2server

fprintf(stdout,"connect%s:%dok\n",hbase_ip.c_str(),hbase_port);

std::stringtablename="test";//琛ㄥ悕锛岀‘淇濊繍琛屼箣鍓嶅凡鍒涘缓濂?/span>

std::stringrowkey="row1";//琛孠ey

std::stringfamily="cf1";//渚嬫棌鍚?/span>

std::stringcolumnname="f1";//渚嬪悕

std::stringcolumnvalue="value1";//渚嬪€?/span>

//鎻掑叆鍙傛暟璁剧疆

std::vector<:thrift2::tcolumnvalue>columns_value(1);

columns_value[0].__set_family(family);

columns_value[0].__set_qualifier(columnname);

columns_value[0].__set_value(columnvalue);

hbase::thrift2::TPutput;

put.__set_row(rowkey);

put.__set_columnValues(columns_value);

hbase_client->put(tablename,put);//鎻掑叆锛屽嚭閿欐姏寮傚父hbase::thrift2::TIOError

//鏌ヨ鍙傛暟璁剧疆

hbase::thrift2::TGetinput;

input.__set_row(rowkey);

hbase::thrift2::TResultresult;//鏌ヨ缁撴灉瀛樻斁鍦ㄨ繖閲?/span>

hbase_client->get(result,tablename,input);//鏌ヨ锛屽嚭閿欐姏寮傚父hbase::thrift2::TIOError

//鏄剧ず鏌ヨ缁撴灉

for(inti=0;i(result.columnValues.size());++i)

{

consthbase::thrift2::TColumnValue&column_value_ref=result.columnValues[i];

fprintf(stdout,"family[%s]/qualifier[%s]/timestamp[%"PRIu64"]:%s\n",column_value_ref.family.c_str(),

column_value_ref.qualifier.c_str(),

column_value_ref.timestamp,

column_value_ref.value.c_str());

}

}

catch(hbase::thrift2::TIOError&ex)

{

fprintf(stderr,"IOError:%s\n",ex.what());

}

catch(apache::thrift::transport::TTransportException&ex)

{

//濡傛灉鍜屾湇鍔$鐨凾ransport鍜孭rotocol涓嶅悓锛岃繖閲岀殑閿欒鏄€淓AGAIN(timedout)鈥?/span>

fprintf(stderr,"(%d)%s\n",ex.getType(),ex.what());

}

catch(apache::thrift::TApplicationException&ex)

{

fprintf(stderr,"%s\n",ex.what());

}

catch(thrift::TException&ex)

{

fprintf(stderr,"%s\n",ex.what());

}

return0;

}

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1096388.htmlTechArticleHBase C++缂栫▼ HBase thrift C++缂栫▼.pdf 鐩綍 鐩綍1 1.鍓嶈█1 2.鍚姩鍜屽仠姝?span>thrift2 1 2.1.鍚姩thrift2 1 2.2.鍋滄thrift2 1 2.3.鍚姩鍙...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何防止会话固定攻击?如何防止会话固定攻击?Apr 28, 2025 am 12:25 AM

防止会话固定攻击的有效方法包括:1.在用户登录后重新生成会话ID;2.使用安全的会话ID生成算法;3.实施会话超时机制;4.使用HTTPS加密会话数据,这些措施能确保应用在面对会话固定攻击时坚不可摧。

您如何实施无会话身份验证?您如何实施无会话身份验证?Apr 28, 2025 am 12:24 AM

实现无会话身份验证可以通过使用JSONWebTokens(JWT)来实现,这是一种基于令牌的认证系统,所有的必要信息都存储在令牌中,无需服务器端会话存储。1)使用JWT生成和验证令牌,2)确保使用HTTPS防止令牌被截获,3)在客户端安全存储令牌,4)在服务器端验证令牌以防篡改,5)实现令牌撤销机制,如使用短期访问令牌和长期刷新令牌。

PHP会议有哪些常见的安全风险?PHP会议有哪些常见的安全风险?Apr 28, 2025 am 12:24 AM

PHP会话的安全风险主要包括会话劫持、会话固定、会话预测和会话中毒。1.会话劫持可以通过使用HTTPS和保护cookie来防范。2.会话固定可以通过在用户登录前重新生成会话ID来避免。3.会话预测需要确保会话ID的随机性和不可预测性。4.会话中毒可以通过对会话数据进行验证和过滤来预防。

您如何销毁PHP会议?您如何销毁PHP会议?Apr 28, 2025 am 12:16 AM

销毁PHP会话需要先启动会话,然后清除数据并销毁会话文件。1.使用session_start()启动会话。2.用session_unset()清除会话数据。3.最后用session_destroy()销毁会话文件,确保数据安全和资源释放。

如何更改PHP中的默认会话保存路径?如何更改PHP中的默认会话保存路径?Apr 28, 2025 am 12:12 AM

如何改变PHP的默认会话保存路径?可以通过以下步骤实现:在PHP脚本中使用session_save_path('/var/www/sessions');session_start();设置会话保存路径。在php.ini文件中设置session.save_path="/var/www/sessions"来全局改变会话保存路径。使用Memcached或Redis存储会话数据,如ini_set('session.save_handler','memcached');ini_set(

您如何修改PHP会话中存储的数据?您如何修改PHP会话中存储的数据?Apr 27, 2025 am 12:23 AM

tomodifyDataNaphPsession,startTheSessionWithSession_start(),然后使用$ _sessionToset,修改,orremovevariables.1)startThesession.2)setthesession.2)使用$ _session.3)setormodifysessessvariables.3)emovervariableswithunset()

举一个在PHP会话中存储数组的示例。举一个在PHP会话中存储数组的示例。Apr 27, 2025 am 12:20 AM

在PHP会话中可以存储数组。1.启动会话,使用session_start()。2.创建数组并存储在$_SESSION中。3.通过$_SESSION检索数组。4.优化会话数据以提升性能。

垃圾收集如何用于PHP会议?垃圾收集如何用于PHP会议?Apr 27, 2025 am 12:19 AM

PHP会话垃圾回收通过概率机制触发,清理过期会话数据。1)配置文件中设置触发概率和会话生命周期;2)可使用cron任务优化高负载应用;3)需平衡垃圾回收频率与性能,避免数据丢失。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具