這是我參與 8 月更文挑戰的第 6 天,活動詳情查看: 8月更文挑戰java
⚫ 操做系統:Linux(建議 Ubuntu18.04);shell
⚫ Hadoop 版本:3.1.3;apache
⚫ JDK 版本:1.8;編程
⚫ Java IDE:IDEA;markdown
⚫ Hadoop 僞分佈式配置分佈式
⚫ HBase1.1.5oop
利用Hbase Shell命令完成如下任務,截圖要求包含所執行的命令以及命令運行的結果: 表student_xxx: 表teacher_xxx (1) 建立Hbase數據表student_xxx和teacher_xxx(表名稱以姓名首字母結尾); post
(2) 向student_xxx表中插入數據; spa
(3) 分別查看student_xxx表全部數據、指定時間戳、指定時間戳範圍的數據; 全部數據 操作系統
指定時間戳
指定時間戳範圍
(4) 更改teacher_xxx表的username的VERSIONS>=6,並參考下面teacher表插入數據查看Hbase中全部表;
(5) 查看teacher_xxx表特定VERSIONS範圍內的數據;
(6) 使用除ValueFilter之外的任意一個過濾器查看teacher_xxx表的值; rowkey爲20開頭的值
(7) 刪除Hbase表中的數據;
(8) 刪除Hbase中的表; 經過hbase shell刪除一個表,首先須要將表禁用,而後再進行刪除,命令以下:
disable 'tablename'
drop 'tablename'
複製代碼
檢驗是否存在
利用Java API編程實現Hbase的相關操做,要求在實驗報告中附上完整的源代碼以及程序運行先後的Hbase表和數據的狀況的截圖: 導入所須要的jar包 callrecord_xxx表
(1) 建立Hbase中的數據表callrecord_xxx(表名稱以姓名拼音首字母結尾);
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.HBaseConfiguration;
import java.io.IOException;
public class Create {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//創建鏈接
public static void init(){
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
//關閉鏈接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void CreateTable(String tableName) throws IOException {
if (admin.tableExists(TableName.valueOf(tableName))) {
System.out.println("Table Exists!!!");
}
else{
HTableDescriptor tableDesc = new HTableDescriptor(tableName);
tableDesc.addFamily(new HColumnDescriptor("baseinfo"));
tableDesc.addFamily(new HColumnDescriptor("baseinfo.calltime"));
tableDesc.addFamily(new HColumnDescriptor("baseinfo.calltype"));
tableDesc.addFamily(new HColumnDescriptor("baseinfo.phonebrand"));
tableDesc.addFamily(new HColumnDescriptor("baseinfo.callplace"));
tableDesc.addFamily(new HColumnDescriptor("baseinfo.callsecond"));
admin.createTable(tableDesc);
System.out.println("Create Table Successfully .");
}
}
public static void main(String[] args) {
String tableName = "callrecord_zqc";
try {
init();
CreateTable(tableName);
close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製代碼
(2) 向Hbase表中插入以下數據;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
public class Insert {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//創建鏈接
public static void init(){
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
//關閉鏈接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void InsertRow(String tableName, String rowKey, String colFamily, String col, String val) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
Put put = new Put(rowKey.getBytes());
put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
System.out.println("Insert Data Successfully");
table.put(put);
table.close();
}
public static void main(String[] args) {
String tableName = "callrecord_zqc";
String[] RowKeys = {
"16920210616-20210616-1",
"18820210616-20210616-1",
"16920210616-20210616-2",
"16901236367-20210614-1",
"16920210616-20210614-1",
"16901236367-20210614-2",
"16920210616-20210614-2",
"17720210616-20210614-1",
};
String[] CallTimes = {
"2021-06-16 14:12:16",
"2021-06-16 14:13:16",
"2021-06-16 14:23:16",
"2021-06-14 09:13:16",
"2021-06-14 10:23:16",
"2021-06-14 11:13:16",
"2021-06-14 12:23:16",
"2021-06-14 16:23:16",
};
String[] CallTypes = {
"call",
"call",
"called",
"call",
"called",
"call",
"called",
"called",
};
String[] PhoneBrands = {
"vivo",
"Huawei",
"Vivo",
"Huawei",
"Vivo",
"Huawei",
"Vivo",
"Oppo",
};
String[] CallPlaces = {
"Fuzhou",
"Fuzhou",
"Fuzhou",
"Fuzhou",
"Fuzhou",
"Fuzhou",
"Fuzhou",
"Fuzhou",
};
String[] CallSeconds = {
"66",
"96",
"136",
"296",
"16",
"264",
"616",
"423",
};
try {
init();
int i = 0;
while (i < RowKeys.length){
InsertRow(tableName, RowKeys[i], "baseinfo", "calltime", CallTimes[i]);
InsertRow(tableName, RowKeys[i], "baseinfo", "calltype", CallTypes[i]);
InsertRow(tableName, RowKeys[i], "baseinfo", "phonebrand", PhoneBrands[i]);
InsertRow(tableName, RowKeys[i], "baseinfo", "callplace", CallPlaces[i]);
InsertRow(tableName, RowKeys[i], "baseinfo", "callsecond", CallSeconds[i]);
i++;
}
close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製代碼
(3) 獲取Hbase某張表的全部數據,並返回查詢結果;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
public class List {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//創建鏈接
public static void init(){
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
//關閉鏈接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void GetData(String tableName)throws IOException{
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
for(Result result:scanner)
{
ShowCell((result));
}
}
public static void ShowCell(Result result){
Cell[] cells = result.rawCells();
for(Cell cell:cells){
System.out.println("RowName:"+new String(CellUtil.cloneRow(cell))+" ");
System.out.println("Timetamp:"+cell.getTimestamp()+" ");
System.out.println("column Family:"+new String(CellUtil.cloneFamily(cell))+" ");
System.out.println("column Name:"+new String(CellUtil.cloneQualifier(cell))+" ");
System.out.println("value:"+new String(CellUtil.cloneValue(cell))+" ");
System.out.println();
}
}
public static void main(String[] args) {
String tableName = "callrecord_zqc";
try {
init();
GetData(tableName);
close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製代碼
(4) 刪除Hbase表中的某條或者某幾條數據,並查看刪除先後表中的數據狀況;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
public class DeleteData {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//創建鏈接
public static void init(){
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
//關閉鏈接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void DeleteRow(String tableName,String rowKey) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
table.delete(new Delete(rowKey.getBytes()));
System.out.println("Delete Data Successfully");
table.close();
}
public static void main(String[] args) {
String tableName = "callrecord_zqc";
try {
init();
DeleteRow(tableName, "17720210616-20210614-1 ");
close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製代碼
(5) 實現給現有的表增長一個列族(如family_xxx),在hbase shell使用describe命令查看先後表的信息;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.HColumnDescriptor;
import java.io.IOException;
public class Append {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//創建鏈接
public static void init(){
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
//關閉鏈接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void AddRow(String tableName, String rowName) throws IOException {
TableName table = TableName.valueOf(tableName);
admin.disableTable(table); // 關閉表
HTableDescriptor tableDesc = admin.getTableDescriptor(table);
HColumnDescriptor family = new HColumnDescriptor(rowName); //新增列族
tableDesc.addFamily(family);
admin.addColumn(table, family);
admin.enableTableAsync(table); //打開表
}
public static void main(String[] args) {
String tableName = "callrecord_zqc";
try {
init();
AddRow(tableName, "baseinfo.family_zqc");
System.out.println("Append Successfully");
close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製代碼
(6) 實現給新增長的列族按自增方式存放數據;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class AddItSelt {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//創建鏈接
public static void init(){
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
//關閉鏈接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void Incr(String tableName, String rowKey, String colFamily, String col, int step) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName));
//incrementColumnValue(行號,列族,列,步長)
table.incrementColumnValue(Bytes.toBytes(rowKey),Bytes.toBytes(colFamily), Bytes.toBytes(col),step);
System.out.println("Incr Successfully");
table.close();
}
public static void main(String[] args) {
String tableName = "callrecord_zqc";
try {
init();
Incr(tableName, "18820210616-20210616-1", "baseinfo", "family_zqc", 1);
close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製代碼
(7) 刪除表,並在Hbase Shell中使用命令查看刪除先後hbase中全部表; 數據表(callrecord_xxx):
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
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 java.io.IOException;
public class DeleteTable {
public static Configuration configuration;
public static Connection connection;
public static Admin admin;
//創建鏈接
public static void init(){
configuration = HBaseConfiguration.create();
configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");
try{
connection = ConnectionFactory.createConnection(configuration);
admin = connection.getAdmin();
}catch (IOException e){
e.printStackTrace();
}
}
//關閉鏈接
public static void close(){
try{
if(admin != null){
admin.close();
}
if(null != connection){
connection.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void DeleteTable(String tableName) throws IOException {
TableName t = TableName.valueOf(tableName);
if (admin.tableExists(t)) {
admin.disableTable(t);
admin.deleteTable(t); // 先關閉才能刪除
System.out.println("table:"+tableName+"was deleted successfully");
}
}
public static void main(String[] args) {
String tableName = "callrecord_zqc";
try {
init();
DeleteTable(tableName);
close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
複製代碼
但願讀者不要直接複製代碼,代碼能夠直接複製,知識不能。想學好仍是本身多推敲一下代碼的結構流程。
小生凡一,期待你的關注