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<Put> puts = new ArrayList<Put>();
String [][] a = get();
File fileName = new File("/root/chj/");
File[] files = fileName.listFiles();
//截取图片名为中图片的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.");
}
}