为什么HBase Thrift API总是返回thrift客户端连接

时间:2013-03-30 13:00:59

标签: hbase thrift

对于每个thrift API调用(在Erlang中使用HBase Thrift),API返回一个thrift连接:

erlang示例:

% creating the initial connection

{ok, TFactory}          = thrift_socket_transport:new_transport_factory( "localhost", 9090, []),
{ok, PFactory}          = thrift_binary_protocol:new_protocol_factory(TFactory, []),
{ok, Protocol}          = PFactory(),
{ok, ThiftConnection1}  = thrift_client:new(Protocol, hbase_thrift),    

%calling a row mutation

{ThriftConnection2, Result} = thrift_client:call( ThriftConnection1, mutateRow, ["MYTABLE", Row1Id, MutationList1, dict:new()]),
{ThriftConnection3, Result} = thrift_client:call( ThriftConnection2, mutateRow, ["MYTABLE", Row2Id, MutationList2, dict:new()]),

这引发了以下相关问题:

  1. 我应该始终使用返回的连接还是只使用第一个连接?
  2. 这些连接是否相同?
  3. 这种传递连接方法是否会导致连接泄漏?
  4. 有没有办法关闭这些连接,或者他们有自己的连接 每种使用它们的API调用的生命周期?

1 个答案:

答案 0 :(得分:1)

我意识到这不是一个连接,而是一个节俭传输参考。我把它们相互比较,它们是相同的。在Erlang中,打印他们的内容(序列化)关于每个结果的事实表明他们是相同的

ThriftConnection2 :
{tclient,hbase_thrift,
 {protocol,thrift_binary_protocol,
    {binary_protocol,
        {transport,thrift_buffered_transport,
            {buffered_transport,
                {transport,thrift_socket_transport,
                    {data,#Port<0.25469>,infinity}},
                []}},
        true,true}},
    0}

ThriftConnection3 :
{tclient,hbase_thrift,
{protocol,thrift_binary_protocol,
    {binary_protocol,
        {transport,thrift_buffered_transport,
            {buffered_transport,
                {transport,thrift_socket_transport,
                    {data,#Port<0.25469>,infinity}},
                []}},
        true,true}},
    0}