批量把文本文件数据导入到HBase

批量把文本文件数据导入到HBase,第1张

格式:hbase [类] [分隔符] [行键,列族:列1,列族:列2...] [表名] [导入文件]

--导入的data.csv数据如下:

--把数据文件上传到hdfs

hadoop fs -put data.csv /tmp/hbase-input

--在hbase shell终端里创建表

create 'hbase-tb1-001','cf'

--执行命令导入

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,cf:name hbase-tb1-001 /tmp/hbase-input/data.csv

--在hbase shell终端里检查表数据是否导入

能够单条导入就能够批量导入

配置 thrift

python使用的包 thrift

个人使用的python 编译器是pycharm community edition. 在工程中设置中,找到project interpreter, 在相应的工程下,找到package,然后选择 “+” 添加, 搜索 hbase-thrift (Python client for HBase Thrift interface),然后安装包。

安装服务器端thrift。

参考官网,同时也可以在本机上安装以终端使用。

thrift Getting Started

也可以参考安装方法 python 调用HBase 范例

首先,安装thrift

下载thrift,这里,我用的是thrift-0.7.0-dev.tar.gz 这个版本

tar xzf thrift-0.7.0-dev.tar.gz

cd thrift-0.7.0-dev

sudo ./configure –with-cpp=no –with-ruby=no

sudo make

sudo make install

然后,到HBase的源码包里,找到

src/main/resources/org/apache/hadoop/hbase/thrift/

执行

thrift –gen py Hbase.thrift

mv gen-py/hbase/ /usr/lib/python2.4/site-packages/ (根据python版本可能有不同)

获取数据示例 1

# coding:utf-8

from thrift import Thrift

from thrift.transport import TSocket

from thrift.transport import TTransport

from thrift.protocol import TBinaryProtocol

from hbase import Hbase

# from hbase.ttypes import ColumnDescriptor, Mutation, BatchMutation

from hbase.ttypes import *

import csv

def client_conn():

# Make socket

transport = TSocket.TSocket('hostname,like:localhost', port)

# Buffering is critical. Raw sockets are very slow

transport = TTransport.TBufferedTransport(transport)

# Wrap in a protocol

protocol = TBinaryProtocol.TBinaryProtocol(transport)

# Create a client to use the protocol encoder

client = Hbase.Client(protocol)

# Connect!

transport.open()

return client

if __name__ == "__main__":

client = client_conn()

# r = client.getRowWithColumns('table name', 'row name', ['column name'])

# print(r[0].columns.get('column name')), type((r[0].columns.get('column name')))

result = client.getRow("table name","row name")

data_simple =[]

# print result[0].columns.items()

for k, v in result[0].columns.items(): #.keys()

#data.append((k,v))

# print type(k),type(v),v.value,,v.timestamp

data_simple.append((v.timestamp, v.value))

writer.writerows(data)

csvfile.close()

csvfile_simple = open("data_xy_simple.csv", "wb")

writer_simple = csv.writer(csvfile_simple)

writer_simple.writerow(["timestamp", "value"])

writer_simple.writerows(data_simple)

csvfile_simple.close()

print "finished"

会基础的python应该知道result是个list,result[0].columns.items()是一个dict 的键值对。可以查询相关资料。或者通过输出变量,观察变量的值与类型。

说明:上面程序中 transport.open()进行链接,在执行完后,还需要断开transport.close()

目前只涉及到读数据,之后还会继续更新其他dbase *** 作。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6801064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存