HBase & thrift & C++缂栫▼

鐩綍
鐩綍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::CThriftClientHelper //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 #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 { 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; } |

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

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

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

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

如何改变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(

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

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

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


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

Dreamweaver CS6
视觉化网页开发工具