批量上传非结构化数据到HBase

package com.huawei.hadoop.hbase.example;

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.");
    }
}

你可能感兴趣的:(HBase)