zoukankan      html  css  js  c++  java
  • hbase使用MapReduce操作1(基本增删改查)

    操作代码

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.*;
    import org.apache.hadoop.hbase.client.*;
    import org.apache.hadoop.hbase.util.Bytes;
    
    import java.io.*;
    import java.math.BigDecimal;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
        public static Configuration conf;
    
        static {
            //使用 HBaseConfiguration 的单例方法实例化
            conf = HBaseConfiguration.create();
            conf.set("hbase.zookeeper.quorum", "master,node1,node2");
            conf.set("hbase.zookeeper.property.clientPort", "2181");
            conf.set("hbase.master", "master:60000");
        }
    
        public static void dropTable(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
            HBaseAdmin admin = new HBaseAdmin(conf);
            if (isTableExist(tableName)) {
                admin.disableTable(tableName);
                admin.deleteTable(tableName);
                System.out.println("表" + tableName + "删除成功!");
            } else {
                System.out.println("表" + tableName + "不存在!");
            }
        }
    
        public static void addRowData(String tableName, String rowKey, String columnFamily, String column, String value) throws IOException {
            //创建 HTable 对象
            HTable hTable = new HTable(conf, tableName);
            //向表中插入数据
            Put put = new Put(Bytes.toBytes(rowKey));
            //向 Put 对象中组装数据
            put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
            hTable.put(put);
            hTable.close();
            System.out.println("插入数据成功");
        }
    
        public static void deleteMultiRow(String tableName, String... rows) throws IOException {
            HTable hTable = new HTable(conf, tableName);
            List<Delete> deleteList = new ArrayList<Delete>();
            for (String row : rows) {
                Delete delete = new Delete(Bytes.toBytes(row));
                deleteList.add(delete);
            }
    
            hTable.delete(deleteList);
            hTable.close();
        }
    
        public static void getAllRows(String tableName) throws IOException {
            HTable hTable = new HTable(conf, tableName);
            //得到用于扫描 region 的对象
            Scan scan = new Scan();
            //使用 HTable 得到 resultcanner 实现类的对象
            ResultScanner resultScanner = hTable.getScanner(scan);
            for (Result result : resultScanner) {
                Cell[] cells = result.rawCells();
                for (Cell cell : cells) {
                    //得到 rowkey
                    System.out.println("行键:" + Bytes.toString(CellUtil.cloneRow(cell)));
                    //得到列族
                    System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));
                    System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
                    System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
                }
            }
        }
    
        public static void getRow(String tableName, String rowKey) throws IOException {
            HTable table = new HTable(conf, tableName);
            Get get = new Get(Bytes.toBytes(rowKey));
            //get.setMaxVersions();显示所有版本
            //get.setTimeStamp();显示指定时间戳的版本
            Result result = table.get(get);
            for (Cell cell : result.rawCells()) {
                System.out.println("行键:" + Bytes.toString(result.getRow()));
                System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));
                System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
                System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
                System.out.println("时间戳:" + cell.getTimestamp());
            }
        }
    
        public static void getRowQualifier(String tableName, String rowKey, String family, String qualifier) throws IOException {
            HTable table = new HTable(conf, tableName);
            Get get = new Get(Bytes.toBytes(rowKey));
            get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
            Result result = table.get(get);
            for (Cell cell : result.rawCells()) {
                System.out.println("行键:" + Bytes.toString(result.getRow()));
                System.out.println("列族" + Bytes.toString(CellUtil.cloneFamily(cell)));
                System.out.println("列:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
                System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
            }
        }
    
        public void addAFamily(String tableName, String familyName, boolean isAdd) throws IOException {
            TableName tablename = TableName.valueOf(tableName);
            HBaseAdmin admin = new HBaseAdmin(conf);
            admin.disableTable(tablename);
            HTableDescriptor hDescriptor = admin.getTableDescriptor(tablename);
            HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(familyName);
            if (isAdd) {
                hDescriptor.addFamily(hColumnDescriptor);
            } else {
                hDescriptor.removeFamily(Bytes.toBytes(familyName));
            }
            admin.modifyTable(tablename, hDescriptor);
            admin.enableTable(tablename);
        }
    
        public ArrayList<String> readFile() throws Exception {
            ArrayList<String> users = new ArrayList<String>();
            File file = new File("F:/Hadoop/data_format/test1.csv");
            InputStreamReader isr = new InputStreamReader(new FileInputStream(file));
            BufferedReader br = new BufferedReader(isr);
            String s = "";
            //创建 HTable 对象
            HTable hTable = new HTable(conf, "test_data");
            while ((s = br.readLine()) != null) {
                String[] strs = s.split(",");
                //向表中插入数据
                Put put = new Put(Bytes.toBytes("rowKey"));
                //向 Put 对象中组装数据
                put.add(Bytes.toBytes("columnFamily"), Bytes.toBytes("column"), Bytes.toBytes("value"));
                hTable.put(put);
            }
            hTable.close();
            System.out.println("插入数据成功");
            return users;
        }
    
        public static void main(String args[]) throws IOException {
            //System.out.println(isTableExist("student"));
            //createTable("student2",new String[]{"info1","info2"});
            //dropTable("student2");
            //addRowData("student","1003","info","name","zhangy");
            //deleteMultiRow("student",new String[]{"1002","1003"});
            //getAllRows("student");
            //getRow("student","1002");
            getRowQualifier("student", "1001", "info", "name");
        }
    
        public static boolean isTableExist(String tableName) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
            //在 HBase 中管理、访问表需要先创建 HBaseAdmin 对象
            Connection connection = ConnectionFactory.createConnection(conf);
    
            //HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
            HBaseAdmin admin = new HBaseAdmin(conf);
            return admin.tableExists(tableName);
        }
    
        public static void createTable(String tableName, String... columnFamily) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
            HBaseAdmin admin;
            admin = new HBaseAdmin(conf);
            //判断表是否存在
            if (isTableExist(tableName)) {
                System.out.println("表" + tableName + "已存在");
                System.exit(0);
            } else {
                //创建表属性对象,表名需要转字节
                HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf(tableName));
                //创建多个列族
                for (String cf : columnFamily) {
                    descriptor.addFamily(new HColumnDescriptor(cf));
                }
                //根据对表的配置,创建表
                admin.createTable(descriptor);
                System.out.println("表" + tableName + "创建成功!");
            }
        }
    }
  • 相关阅读:
    C#中 类的多态
    字段与属性
    C# ASCII与字符串间相互转换
    TextBox控件常用方法总结
    使用hadoop mapreduce分析mongodb数据:(2)
    使用hadoop mapreduce分析mongodb数据:(1)
    Linux MPI集群配置
    VIM文本替换
    怎么解决python中TypeError: can't pickle instancemethod objects的这个错误
    LeetCode ZigZag problem
  • 原文地址:https://www.cnblogs.com/pursue339/p/10655433.html
Copyright © 2011-2022 走看看