首页 技术 正文
技术 2022年11月21日
0 收藏 531 点赞 3,011 浏览 6445 个字

目录


创建maven工程,导入jar包
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories> <dependencies> <dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0-mr1-cdh5.14.0</version>
</dependency> <dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.0-cdh5.14.0</version>
</dependency> <dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.2.0-cdh5.14.0</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!-- <verbal>true</verbal>-->
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*/RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

java代码实现创建hbase表
package cn.itcast.HBaseStudy;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.junit.jupiter.api.Test;import java.io.IOException;public class HBaseFirst {
/**
* 需求1:创建myuser表,包含f1和f2两个列族
*/
@Test
public void createTable() throws IOException {
//连接HBase服务端
Configuration configuration = HBaseConfiguration.create();
/*
通信三要素:IP地址、端口号、传输协议
设置HBase连接ZK的地址
*/
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181"); //获取HBase数据库连接对象
Connection connection = ConnectionFactory.createConnection(configuration);
//获取管理员对象,用于创建表、删除表等
Admin admin = connection.getAdmin();
//获取HTableDescriptor对象
HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf("myuser"));
//给表添加列族名需要创建HColumnDescriptor对象
HColumnDescriptor f1 = new HColumnDescriptor("f1");
HColumnDescriptor f2 = new HColumnDescriptor("f2");
//先给表添加列族名
hTableDescriptor.addFamily(f1);
hTableDescriptor.addFamily(f2);
//用管理员创建表
admin.createTable(hTableDescriptor); //关闭admin
admin.close();
//关闭connection
connection.close(); }
}

java代码实现向hbase表中插入数据
/**
* 创建连接HBase服务器的方法
*/
private Connection connection;
private Table table; @BeforeTest
public void init() throws IOException {
//获取连接
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");
connection = ConnectionFactory.createConnection(configuration);
//获取表
table = connection.getTable(TableName.valueOf("myuser"));
} /**
* 需求2:向表中添加数据
*/
@Test
public void addData() throws IOException { //创建put对象,并指定rowkey
Put put = new Put("0001".getBytes());
put.addColumn("f1".getBytes(),"id".getBytes(), Bytes.toBytes(1));
put.addColumn("f1".getBytes(),"name".getBytes(), Bytes.toBytes("张三"));
put.addColumn("f1".getBytes(),"age".getBytes(), Bytes.toBytes(18)); put.addColumn("f2".getBytes(),"address".getBytes(), Bytes.toBytes("地球人"));
put.addColumn("f2".getBytes(),"phone".getBytes(), Bytes.toBytes("15874102589"));
//插入数据
table.put(put);
} /**
* 关闭系统连接和表连接
*/
@AfterTest
public void close() throws IOException {
//关闭表
table.close();
connection.close();
}

java代码查询hbase数据
/**
* 查询rowKey为0003的数据
*/
@Test
public void searchData() throws IOException {
//获取get对象
Get get = new Get(Bytes.toBytes("0003"));
//通过get获取数据 result封装了所有结果数据
Result result = table.get(get); //打印结果数据,或者这条数据所有的cell
List<Cell> cells = result.listCells(); for (Cell cell : cells) {
//获取所在列族
byte[] family = cell.getFamily();
//获取所在列名
byte[] qualifier = cell.getQualifier();
//获取值
byte[] value = cell.getValue(); if ("f1".equals(Bytes.toString(family)) && "id".equals(Bytes.toString(qualifier)) || "age".equals(Bytes.toString(qualifier))) {
System.out.println("列族名称为" + Bytes.toString(family) + "列名称为" + Bytes.toString(qualifier) + "列值为" + Bytes.toInt(value));
} else {
System.out.println("列族名称为" + Bytes.toString(family) + "列名称为" + Bytes.toString(qualifier) + "列值为" + Bytes.toString(value));
}
}
}

使用rowKey查询指定列族指定列的值
/**
* 使用rowKey查询0003,f1列族,name列的值
**/@Test
public void getColumn() throws IOException {
//获取get对象
Get get = new Get("0003".getBytes());
//拿到f1列族和name列
get.addColumn("f1".getBytes(),"name".getBytes()); //拿到以上要求的所有数据
Result result = table.get(get);
//将数据值放到一个数组中
List<Cell> cells = result.listCells();
for (Cell cell : cells) {
byte[] family = cell.getFamily();
byte[] qualifier = cell.getQualifier();
byte[] value = cell.getValue(); System.out.println("rk为0003,在f1列族name列下的数据值为"+Bytes.toString(value));
}}

通过startRowKey和endRowKey进行扫描
/**
* 扫描rowKey为0004-0006的范围值
*/
@Test
public void rangeRowKey() throws IOException {
//创建Scan对象,获取到rk的范围,如果不指定范围就是全表扫描
Scan scan = new Scan("0004".getBytes(),"0006".getBytes()); //拿到了多条数据的结果
ResultScanner scanner = table.getScanner(scan);
//循环遍历ResultScanner,将多条数据分成一条条数据
for (Result result : scanner) {
byte[] row = result.getRow();
List<Cell> cells = result.listCells();
for (Cell cell : cells) {
byte[] family = cell.getFamily();
byte[] qualifier = cell.getQualifier();
byte[] value = cell.getValue(); /**
* 扫描rowKey为0004-0006的范围值
*/
@Test
public void rangeRowKey() throws IOException {
//创建Scan对象,获取到rk的范围,如果不指定范围就是全表扫描
Scan scan = new Scan("0004".getBytes(),"0006".getBytes()); //拿到了多条数据的结果
ResultScanner scanner = table.getScanner(scan);
//循环遍历ResultScanner,将多条数据分成一条条数据
for (Result result : scanner) {
byte[] row = result.getRow();
List<Cell> cells = result.listCells();
for (Cell cell : cells) {
byte[] family = cell.getFamily();
byte[] qualifier = cell.getQualifier();
byte[] value = cell.getValue(); if ("f1".equals(Bytes.toString(family)) && "id".equals(Bytes.toString(qualifier)) || "age".equals(Bytes.toString(qualifier))) {
System.out.println("列族名称为" + Bytes.toString(family) + "列名称为" + Bytes.toString(qualifier) + "列值为" + Bytes.toInt(value));
} else {
System.out.println("列族名称为" + Bytes.toString(family) + "列名称为" + Bytes.toString(qualifier) + "列值为" + Bytes.toString(value));
}
} }
}
} }
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,105
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,582
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,429
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,836
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,919