非结构化数据 java_上传非结构化数据到HBase

该博客展示了如何使用Java将非结构化数据(如图片和XML文件)编码为Base64字符串并存储到HBase数据库中。通过建立连接、定义列族和列名,将文件名作为RowKey,将Base64编码的内容存储到指定列,实现了数据的上传。
摘要由CSDN通过智能技术生成

import java.util.List;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.nio.ByteBuffer;

import java.util.ArrayList;

import org.apache.commons.codec.binary.Base64;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.TableName;

import org.apache.hadoop.hbase.client.Connection;

import org.apache.hadoop.hbase.client.ConnectionFactory;

import org.apache.hadoop.hbase.client.Put;

import org.apache.hadoop.hbase.client.Table;

import org.apache.hadoop.hbase.util.Bytes;

public class HBaseSample {

private final static Log LOG = LogFactory.getLog(HBaseSample.class.getName());

private TableName tableName = null;

private static Configuration conf = null;

private Connection conn = null;

public HBaseSample(Configuration conf) throws IOException {

this.conf = conf;

this.tableName = TableName.valueOf("testtable");

this.conn = ConnectionFactory.createConnection(conf);

}

public static String getImgStr(String imgFile) {

// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理

InputStream in = null;

byte[] data = null;

// 读取图片字节数组

try {

in = new FileInputStream(imgFile);

data = new byte[in.available()];

in.read(data);

in.close();

} catch (IOException e) {

e.printStackTrace();

}

return new String(Base64.encodeBase64(data));

}

获取目录下的所有文件(图片,xml等)

public static String[][] get() {

String imgbese = null;

File fileName = new File("/root/chj/");

File[] files = fileName.listFiles();

String[][] a = new String[files.length][2];

for (int i = 0; i < files.length; i++) {

File file1 = files[i];

String imgFile = "/root/chj/" + file1.getName();

imgbese = getImgStr(imgFile);

a[i][0] = imgFile;

a[i][1] = imgbese;

}

return a;

}

//为main函数调用,这块主函数涉及到安全认证

public void test() throws Exception {

try {

testPut();

} catch (Exception e) {

throw e;

} finally {

if (conn != null) {

try {

conn.close();

} catch (Exception e1) {

LOG.error("Failed to close the connection ", e1);

}

}

}

}

public void testPut() {

LOG.info("Entering testPut.");

//上传字节流到HBase

// Specify the column family name.

byte[] familyName = Bytes.toBytes("info");

// Specify the column name.

byte[][] qualifiers = { Bytes.toBytes("name"), Bytes.toBytes("image") };

Table table = null;

try {

table = conn.getTable(tableName);

List puts = new ArrayList();

String [][] a = get();

File fileName = new File("/root/chj/");

File[] files = fileName.listFiles();

//截取图片名为Hbase中图片的rowkey

for (int i = 0; i < a.length; i++) {

//  ByteBuffer imgFile = null;

// UUID uuid = UUID.randomUUID();

//  String rowKey = "0000" + i;

File file1 = files[i];

String imgFile = file1.getName();

//String fostfixname = imgFile.substring(imgFile.lastIndexOf(".")+1);

String po=imgFile.toString();

String fostfixname  =po.split("\\.")[0];

Put put = new Put(Bytes.toBytes(fostfixname));

put.addColumn(familyName, qualifiers[0], Bytes.toBytes(a[i][0]));

put.addColumn(familyName, qualifiers[1], Bytes.toBytes(a[i][1]));

puts.add(put);

table.put(puts);

puts.clear();

}

LOG.info("Put successfully.");

} catch (IOException e) {

LOG.error("Put failed ", e);

} finally {

if (table != null) {

try {

// Close the HTable object.

table.close();

} catch (IOException e) {

LOG.error("Close table failed ", e);

}

}

}

LOG.info("Exiting testPut.");

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值