Windows下使用Eclipse基于Java的HBase客户端编程

1. 准备工作

  1. 下载后安装jdk包(1.6+)
  2. 下载eclipse
  3. 下载HBase包,这里使用的是hbase-0.98.2。

2. 搭建开发环境

  1. 运行Eclipse,创建一个新的Java工程“HBaseClient”,右键项目根目录,选择 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,将HBase解压后根目录下的lib子目录下所有jar 包添加到本工程的Classpath下。
  2. 按照步骤1中的操作,将自己所连接的HBase的配置文件hbase-site.xml添加到本工程的Classpath中,如下所示为配置文件的一个示例:
<configuration>  
<property>  
<name>hbase.rootdir</name>  
<value>hdfs://myhostname:8020/hbase</value>  
</property>  
<property>  
<name>hbase.cluster.distributed</name>  
<value>true</value>  
</property>  
<property>  
<name>hbase.zookeeper.quorum</name>  
<value>192.168.1.20</value> 
</property> 
<property> 
<name>hbase.zookeeper.property.clientPort</name> 
<value>2181</value> 
</property>  
</configuration>
Windows下HBase客户端操作HBase服务器端时,需要在%WINDOWS_HOME%\System32\drivers\etc\hosts下绑定HBase使用Zookeeper主机名称,比如
在http://cos2:60010/master.jsp页面看到了

Zookeeper Quorum cos2:2181

那么,Windows系统下的hosts文件中需要出现 
192.168.1.20 cos2

这行。其中cos2 为hbase运行的zookeeper服务器名称。

3. HBase基本操作代码示例


3.1 初始化配置
 
private static Configuration conf = null;  
/**  
 * 初始化配置  
 */  
static {  
    conf = HBaseConfiguration.create();  
}  


3.2 创建表
 
/**  
 * 创建表操作  
 * @throws IOException  
 */  
public void createTable(String tablename, String[] cfs) throws IOException {  
    HBaseAdmin admin = new HBaseAdmin(conf);  
    if (admin.tableExists(tablename)) {  
        System.out.println("表已经存在!");  
    }  
    else {  
        HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName));  
        for (int i = 0; i < cfs.length; i++) {  
            tableDesc.addFamily(new HColumnDescriptor(cfs[i]));  
        }  
        admin.createTable(tableDesc);  
        System.out.println("表创建成功!");  
    }  
}  


3.3 删除表

/**  
 * 删除表操作  
 * @param tablename  
 * @throws IOException  
 */  
public void deleteTable(String tablename) throws IOException {  
    try {  
        HBaseAdmin admin = new HBaseAdmin(conf);  
        admin.disableTable(tablename);  
        admin.deleteTable(tablename);  
        System.out.println("表删除成功!");  
    } catch (MasterNotRunningException e) {  
        e.printStackTrace();  
    } catch (ZooKeeperConnectionException e) {  
        e.printStackTrace();  
    }  
}  


3.4 插入一行记录
 
/**  
 * 插入一行记录  
 * @param tablename  
 * @param cfs  
 */  
public void writeRow(String tablename, String[] cfs) {  
    try {  
        HTable table = new HTable(conf, tablename);  
        Put put = new Put(Bytes.toBytes("rows1"));  
        for (int j = 0; j < cfs.length; j++) {  
            put.add(Bytes.toBytes(cfs[j]),  
                    Bytes.toBytes(String.valueOf(1)),  
                    Bytes.toBytes("value_1"));  
            table.put(put);  
        }  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}  

3.5 删除一行记录

 
/**  
 * 删除一行记录  
 * @param tablename  
 * @param rowkey  
 * @throws IOException  
 */  
public void deleteRow(String tablename, String rowkey) throws IOException {  
    HTable table = new HTable(conf, tablename);  
    List list = new ArrayList();  
    Delete d1 = new Delete(rowkey.getBytes());  
    list.add(d1);  
    table.delete(list);  
    System.out.println("删除行成功!");  

 
3.6 查找一行记录

/**  
 * 查找一行记录  
 * @param tablename  
 * @param rowkey  
 */  
public static void selectRow(String tablename, String rowKey)  
        throws IOException {  
    HTable table = new HTable(conf, tablename);  
    Get g = new Get(rowKey.getBytes());  
    Result rs = table.get(g);  
    for (KeyValue kv : rs.raw()) {  
        System.out.print(new String(kv.getRow()) + "  ");  
        System.out.print(new String(kv.getFamily()) + ":");  
        System.out.print(new String(kv.getQualifier()) + "  ");  
        System.out.print(kv.getTimestamp() + "  ");  
        System.out.println(new String(kv.getValue()));  
    }  

 
3.7 查询表中所有行

/**  
 * 查询表中所有行  
 * @param tablename  
 */  
public void scaner(String tablename) {  
    try {  
        HTable table = new HTable(conf, tablename);  
        Scan s = new Scan();  
        ResultScanner rs = table.getScanner(s);  
        for (Result r : rs) {  
            KeyValue[] kv = r.raw();  
            for (int i = 0; i < kv.length; i++) {  
                System.out.print(new String(kv[i].getRow()) + "  ");  
                System.out.print(new String(kv[i].getFamily()) + ":");  
                System.out.print(new String(kv[i].getQualifier()) + "  ");  
                System.out.print(kv[i].getTimestamp() + "  ");  
                System.out.println(new String(kv[i].getValue()));  
            }  
        }  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  
}  


转载于:https://my.oschina.net/u/1377774/blog/264653

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种流行的编程语言,而Spark是一种基于内存的大数据处理框架,支持并行处理。与此同时,HBase是一种分布式NoSQL数据库,通常用于存储大数据。在许多大数据应用程序中,需要将Spark与HBase集成,以便能够使用Spark的显式并行性来查询和分析HBase中的数据。 为了编写Spark程序并行查询HBase指定数据,我们需要按照以下步骤进行: 1. 通过Java API或者Scala API连接HBase: 2. 使用Spark Context对象创建一个Spark RDD,并将其分布式化(Parallelize),以便在分布式集群中并行处理数据。 3. 使用HBase API从HBase中读取指定的数据,并将其转换为Spark RDD对象。 4. 在Spark RDD对象上执行计算,并将结果保存到HDFS或者其他外部存储系统中。 具体的实现过程如下: 1. 连接HBase: 在Java中,我们可以使用HBase Configuration类来连接HBase。代码示例如下: Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "localhost:2181"); // ZooKeeper服务器地址 TableName table = TableName.valueOf("my_table"); // HTable名称 Connection conn = ConnectionFactory.createConnection(conf); // 创建HBase连接 Table hTable = conn.getTable(table); // 获取HTable实例 2. 创建Spark RDD并分布式化: 在Java中,我们可以使用JavaSparkContext类来创建一个Spark RDD。代码示例如下: JavaSparkContext sc = new JavaSparkContext(); List<String> list = Arrays.asList("data1", "data2", "data3"); JavaRDD<String> rdd = sc.parallelize(list); // 创建Spark RDD并分布式化 3. 读取HBase数据: 在Java中,我们可以使用HBase Table类来读取HBase中的数据。代码示例如下: Get get = new Get(Bytes.toBytes(rowKey)); // 指定行键 Result result = hTable.get(get); // 读取数据 List<Cell> cells = result.listCells(); // 获取所有的单元格 for (Cell cell : cells) { byte[] value = CellUtil.cloneValue(cell); String data = Bytes.toString(value); System.out.println(data); // 输出数据 } 4. 执行计算并保存结果: 在Java中,我们可以使用Spark RDD的操作来执行计算,并将结果保存到HDFS或其他外部存储系统中。代码示例如下: JavaRDD<String> result = rdd.filter(new Function<String, Boolean>() { public Boolean call(String s) { return s.startsWith("data"); } }); result.saveAsTextFile("hdfs://localhost:9000/result_folder"); // 将结果保存到HDFS中 综上所述,使用Java编写Spark程序并行查询HBase指定数据需要连接HBase、创建Spark RDD并分布式化、读取HBase数据和执行计算并保存结果等步骤。在实际应用中,我们需要根据具体的业务需求来调整程序逻辑以及执行效率等方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值