java对zookeeper的增删改查功能

package com.zk.demo1;


import java.io.File;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooDefs.Ids;
import org.junit.Before;
import org.junit.Test;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

public class Demo1 {

    private ZooKeeper zk = null;
    
    /**
     * 创建zk的客户端连接
     * @throws Exception
     */
    @Before
    public void init() throws Exception {
        zk = new ZooKeeper("129.204.6.53:2181", 2000, new Watcher() {
            /**
             * 监听事件发生时的回调方法
             */
            @Override
            public void process(WatchedEvent event) {
                System.out.println(event.getType());
                System.out.println(event.getPath());
                System.out.println(event.getState());
                System.out.println("开始监听......");
            }
            
        });
    }
    
    /**
     * 创建一个节点
     * @throws Exception
     */
    @Test
    public void testCreateZnode() throws Exception{
        zk.create("/address/nanming", "南明区".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
        zk.create("/address/nanming", "云岩区".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
        zk.create("/address/nanming", "白云区".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
        zk.create("/address/nanming", "花溪区".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
        byte[] address = zk.getData("/address", true, null);
        System.out.println(address.toString()+"111111111");
    }
    
    /**
     * 删除节点  删除只能为空的数据
     */
    @Test
    public void testDeleteZnode() throws Exception{
        zk.delete("/a", -1);
        Stat exists = zk.exists("/a", false);
        System.out.println("查看节点数据:" + exists);
        
    }
    
    /**
     * 更改节点
     */
    @Test
    public void testUpdateZnode() throws Exception{
        zk.setData("/name", "赵云".getBytes("utf-8"), -1);
        byte[] data = zk.getData("/name", false, null);
        System.out.println(new String(data,"UTF-8"));
        System.out.println(data.toString().getBytes("UTF-8"));
    }
    
    /**
     * 查看子节点的数据
     */
    @Test
    public void testGetChildren() throws Exception{
        List<String> list = zk.getChildren("/address", false);
        for (String string : list) {
            System.out.println(string);
        }
    }
    
    /**
     * 监听机制
     * 1、事先定义好监听的回调函数
     * 2、在对znode进行各种数据操作时可以注册监听
     * 3、监听znode上发生相应事件时,客户端zk会接收到zookeeper集群的事件通知
     * 4、客户端zk根据事件调用我们事先定义好的回调函数
     */
    @Test
    public void testWatch() throws Exception{
        //监听是一次性的
        zk.getData("/address", new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                if(event.getType() != EventType.None) {
                    System.out.println("事件监听的节点:" + event.getPath());
                    System.out.println("事件监听的类型:" + event.getType());
                }
                
            }
            
        }, null);
        Thread.sleep(Long.MAX_VALUE);
    }
    
    /**
     * 上传一个配置文件到zookeeper
     * @throws Exception
     */
    @Test
    public void testUploadFile() throws Exception{
        String springMVC = FileUtils.readFileToString(new File("D:\\springMVC.xml"));
        zk.create("/spring", "spring的配置文件".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        zk.create("/spring/springMVC.xml", springMVC.getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        byte[] b = zk.getData("/spring/springMVC.xml", false, null);
        System.out.println(new String(b,"utf-8"));
    }
}
 

HBase是一个开源的、分布式的、面向列的NoSQL数据库,它基于Hadoop平台,具有高可靠性、高扩展性、高性能等特点。在Java中操作HBase需要使用HBase的Java API,下面是对HBase进行增删改查的实验总结: 1. 建立连接 在使用Java API操作HBase之前,需要先建立与HBase的连接。可以通过以下代码建立连接: ``` Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "localhost"); // Zookeeper地址 conf.set("hbase.zookeeper.property.clientPort", "2181"); // Zookeeper端口 Connection conn = ConnectionFactory.createConnection(conf); ``` 2. 创建表 HBase是面向列的数据库,所以在创建表时需要指定表的列族。以下是创建表的示例代码: ``` Admin admin = conn.getAdmin(); HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf("table_name")); HColumnDescriptor columnDescriptor = new HColumnDescriptor("column_family_name"); tableDescriptor.addFamily(columnDescriptor); admin.createTable(tableDescriptor); ``` 3. 插入数据 在插入数据时,需要指定行键、列族、列和值。以下是插入数据的示例代码: ``` Table table = conn.getTable(TableName.valueOf("table_name")); Put put = new Put(Bytes.toBytes("row_key")); put.addColumn(Bytes.toBytes("column_family_name"), Bytes.toBytes("column_name"), Bytes.toBytes("value")); table.put(put); ``` 4. 查询数据 在查询数据时,可以使用Get对象根据行键查询一条数据,也可以使用Scan对象查询多条数据。示例代码如下: - 根据行键查询一条数据: ``` Table table = conn.getTable(TableName.valueOf("table_name")); Get get = new Get(Bytes.toBytes("row_key")); Result result = table.get(get); byte[] value = result.getValue(Bytes.toBytes("column_family_name"), Bytes.toBytes("column_name")); ``` - 查询多条数据: ``` Table table = conn.getTable(TableName.valueOf("table_name")); Scan scan = new Scan(); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { byte[] value = result.getValue(Bytes.toBytes("column_family_name"), Bytes.toBytes("column_name")); } ``` 5. 更新数据 在更新数据时,需要先获取要更新的数据,然后再使用Put对象更新数据。示例代码如下: ``` Table table = conn.getTable(TableName.valueOf("table_name")); Get get = new Get(Bytes.toBytes("row_key")); Result result = table.get(get); Put put = new Put(Bytes.toBytes("row_key")); put.addColumn(Bytes.toBytes("column_family_name"), Bytes.toBytes("column_name"), Bytes.toBytes("new_value")); table.put(put); ``` 6. 删除数据 在删除数据时,需要先获取要删除的数据,然后再使用Delete对象删除数据。示例代码如下: ``` Table table = conn.getTable(TableName.valueOf("table_name")); Get get = new Get(Bytes.toBytes("row_key")); Result result = table.get(get); Delete delete = new Delete(Bytes.toBytes("row_key")); delete.addColumn(Bytes.toBytes("column_family_name"), Bytes.toBytes("column_name")); table.delete(delete); ``` 以上就是利用Java对HBase进行增删改查的实验总结。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值