thirft hbase 연결 예
thrift 와
thrift2
공식 적 으로 thrift 2 를 추천 하 는 것 같 습 니 다.
다음은 두 가지 thrift 의 자바 클 라 이언 트 연결 방식 입 니 다.
그리고 cpp 가 thrift 2 로 hbase 를 연결 하 는 작업 입 니 다.
thrift 1 을 사용한다 면
hbase-daemon.sh start thrift
thrift 2 를 사용한다 면
hbase-daemon.sh start thrift2
공식 적 인 예 는
/data/hadoop/hbase/hbase-0.94.17/src/examples/thrift
thrift 파일
./src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
thrift 2 의 예 는
/data/hadoop/hbase/hbase-0.94.17/src/examples/thrift2
thrift 2 파일
./src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
(자바 와 python 만 있 는)
선생 성 문건
thrift -r --gen java Hbase.thrift
클 라 이언 트 코드
HaoClient.java
package org.apache.hadoop.hbase.thrift.generated;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
public class HaoClient {
public static String byteBufferToString(ByteBuffer buffer) {
CharBuffer charBuffer = null;
try {
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
charBuffer = decoder.decode(buffer);
buffer.flip();
return charBuffer.toString();
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public static ByteBuffer getByteBuffer(String str) {
return ByteBuffer.wrap(str.getBytes());
}
private void start() {
try {
TTransport socket = new TSocket("10.230.13.100", 9090);// , thrift2
TProtocol protocol = new TBinaryProtocol(socket, true, true);//
Hbase.Client client = new Hbase.Client(protocol);
socket.open();
System.out.println("open");
try {
System.out.println("scanning tables...");
for (ByteBuffer name : client.getTableNames()) {
System.out.println("find:" + byteBufferToString(name));
}
} catch (Exception e) {
e.printStackTrace();
}
socket.close();
System.out.println("close");
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HaoClient c = new HaoClient();
c.start();
}
}
thrift 2 라면
hbase-daemon.sh start thrift2
thrift -r --gen java hbase.thrift
HaoClient2.java
package org.apache.hadoop.hbase.thrift2.generated;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
public class HaoClient2 {
public static String byteBufferToString(ByteBuffer buffer) {
CharBuffer charBuffer = null;
try {
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
charBuffer = decoder.decode(buffer);
buffer.flip();
return charBuffer.toString();
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public static ByteBuffer getByteBuffer(String str) {
return ByteBuffer.wrap(str.getBytes());
}
private void start() {
try {
TTransport socket = new TSocket("10.230.13.100", 9090);
// TTransport socket = new TSocket("10.77.112.191",9090);
//TTransport transport = new TFramedTransport(socket);
// TProtocol protocol = new TCompactProtocol(socket);
TProtocol protocol = new TBinaryProtocol(socket, true, true);//
// THBaseService.Client client = new THBaseService.Client(protocol);
THBaseService.Iface client = new THBaseService.Client(protocol);
socket.open();
System.out.println("open");
ByteBuffer table = ByteBuffer.wrap("mytable".getBytes());
/* TPut put = new TPut();
put.setRow("first".getBytes());
TColumnValue columnValue = new TColumnValue();
columnValue.setFamily("cf".getBytes());
columnValue.setQualifier("fromjava".getBytes());
columnValue.setValue("java is ok".getBytes());
List<TColumnValue> columnValues = new ArrayList<TColumnValue>();
columnValues.add(columnValue);
put.setColumnValues(columnValues);
client.put(table, put);*/
// byte[] aa=Bytes.toBytesBinary("\\x00\\x00\\x15o");
TGet get = new TGet();
get.setRow("first".getBytes());
TResult result = client.get(table, get);
System.out.println("row = " + new String(result.getRow()));
for (TColumnValue resultColumnValue : result.getColumnValues()) {
System.out.println("family = " + new String(resultColumnValue.getFamily()));
System.out.println("qualifier = " + new String(resultColumnValue.getQualifier()));
System.out.println("value = " + new String((resultColumnValue.getValue())));
System.out.println("timestamp = " + resultColumnValue.getTimestamp());
System.out.println("");
}
socket.close();
System.out.println("close");
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
HaoClient2 c = new HaoClient2();
c.start();
}
}
필요 합 니 다. thrift 1 의 Hbase. thirft.
thrift 2 hbase. thirft
생 성 된 코드 와 hbase 모든 jar 가 필요 합 니 다.
hbase 의 thrift 1 과 thrift 2 가 생 성 하 는 클래스 가 다 릅 니 다.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
c + + 연결 이 라면
공식 적 으로 자바 와 py 의 예 만 주 었 습 니 다. 인터넷 에는 thrift 1 의 인터페이스 가 많 지만 thirft 2 의 인 터 페 이 스 를 찾 지 못 했 습 니 다.
클 라 이언 트 를 아래 와 같이 썼 습 니 다.
c + + 코드 는 다음 과 같 습 니 다.
thrift -r --gen cpp hbase.thrift
[root@mytest HbaseThrift]# cat HbaseClient.cpp
#include "THBaseService.h"
#include <config.h>
#include <vector>
#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>
using namespace std;
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using namespace apache::hadoop::hbase::thrift2;
using boost::shared_ptr;
int main(int argc, char **argv) {
boost::shared_ptr<TSocket> socket(new TSocket("10.230.13.100", 9090));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
transport->open();
printf("open
");
THBaseServiceClient client(protocol);
TResult tresult;
TGet get;
//const std::string table="mytable";
const std::string table("mytable");
const std::string thisrow="first";
get.__set_row(thisrow);
//get.__set_row("first");
client.get(tresult,table,get);
vector<TColumnValue> list=tresult.columnValues;
std::vector<TColumnValue>::const_iterator iter;
for(iter=list.begin();iter!=list.end();iter++) {
printf("list size: %d
",list.size());
printf("get : %s, %s,%s
",(*iter).family.c_str(),(*iter).qualifier.c_str(),(*iter).value.c_str());//,(*iter).timestamp
}
transport->close();
printf("close
");
return 0;
}
[root@mytest HbaseThrift]#
Makefile 은 다음 과 같 습 니 다.
[root@mytest HbaseThrift]# cat Makefile
BOOST_DIR = /usr/include/boost
THRIFT_DIR = /usr/local/thrift/include/thrift
#LIB_DIR = /usr/local/lib
LIB_DIR = /usr/local/thrift/lib/
GEN_SRC = ./gen-cpp/hbase_types.cpp ./gen-cpp/hbase_constants.cpp ./gen-cpp/THBaseService.cpp
default: client
client: HbaseClient.cpp
g++ -g -o HbaseClient -lm -pthread -lz -lrt -lssl -I${THRIFT_DIR} -I${BOOST_DIR} -I./gen-cpp -L${LIB_DIR} -lthrift HbaseClient.cpp ${GEN_SRC}
clean:
$(RM) -r HbaseClient
[root@mytest HbaseThrift]#
코드 디 렉 터 리
[root@mytest HbaseThrift]# tree
.
├── gen-cpp
│ ├── hbase_constants.cpp
│ ├── hbase_constants.h
│ ├── hbase_types.cpp
│ ├── hbase_types.h
│ ├── THBaseService.cpp
│ ├── THBaseService.h
│ └── THBaseService_server.skeleton.cpp
├── HbaseClient.cpp
├── hbase.thrift
└── Makefile
1 directory, 10 files
[root@mytest HbaseThrift]#
[root@mytest HbaseThrift]# ls
gen-cpp HbaseClient HbaseClient.cpp hbase.thrift Makefile
hbase 는 먼저 만들어 야 합 니 다:
hbase shell
create 'mytable','cf'
[root@mytest HbaseThrift]# ./HbaseClient
open
list size: 4
get : cf, cf,value1
list size: 4
get : cf, foo,7
list size: 4
get : cf, fromjava,java is ok
list size: 4
get : cf, message,hello haonings hbase
close
[root@mytest HbaseThrift]#
설정 주의
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/thrift/lib
thrift 를 찾 는 so.
삽 입 된 예
[root@mytest HbaseThrift]# cat HbaseClient.cpp
#include "THBaseService.h"
#include <config.h>
#include <vector>
#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>
using namespace std;
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using namespace apache::hadoop::hbase::thrift2;
using boost::shared_ptr;
int main(int argc, char **argv) {
// boost::shared_ptr<TSocket> socket(new TSocket("10.217.12.179", 9090));
boost::shared_ptr<TSocket> socket(new TSocket("10.77.112.191", 9090));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
transport->open();
TPut put;
THBaseServiceClient client(protocol);
const std::string table="mytable";
const std::string thisrow="second";
put.__set_row(thisrow);
TColumnValue columnValue;
const std::string thisfamily="cf";
columnValue.__set_family(thisfamily);
const std::string thisqualifier="fromcpp";
columnValue.__set_qualifier(thisqualifier);
const std::string thisvalue="vppisok";
columnValue.__set_value(thisvalue);
columnValue.__set_timestamp(1395036661654);
vector<TColumnValue> columnValues;
columnValues.push_back(columnValue);
put.__set_columnValues(columnValues);
// std::cout<<"Texception"<<std::endl;
/* try{
}catch(TException &e){
}*/
client.put(table,put);
/*printf("open
");
THBaseServiceClient client(protocol);
TResult tresult;
TGet get;
//const std::string table="mytable";
const std::string table("mytable");
const std::string thisrow="first";
get.__set_row(thisrow);
//get.__set_row("first");
client.get(tresult,table,get);
vector<TColumnValue> list=tresult.columnValues;
std::vector<TColumnValue>::const_iterator iter;
for(iter=list.begin();iter!=list.end();iter++) {
printf("list size: %d
",list.size());
printf("get : %s, %s,%s
",(*iter).family.c_str(),(*iter).qualifier.c_str(),(*iter).value.c_str());//,(*iter).timestamp
} */
transport->close();
printf("close
");
return 0;
}
[root@mytest HbaseThrift]#
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.