当前位置: 首页 > news >正文

《大数据技术原理与应用》实验报告三 熟悉HBase常用操作

目  录

一、实验目的

二、实验环境

三、实验内容与完成情况

3.1 用Hadoop提供的HBase Shell命令完成以下任务

3.2 现有以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:

四、问题和解决方法

五、心得体会


一、实验目的

        1. 理解HBase在Hadoop体系结构中的角色。

        2. 熟悉使用HBase操作常用的Shell命令。

        3. 数据HBase操作常用的Java API。


二、实验环境

        1. 硬件要求:笔记本电脑一台

        2. 软件要求:VMWare虚拟机、Ubuntu 18.04 64、JDK1.8、Hadoop-3.1.3、HBase-2.2.2、Windows11操作系统、Eclipse


三、实验内容与完成情况

3.1 用Hadoop提供的HBase Shell命令完成以下任务

        (1)列出HBase所有表的相关信息,如表名、创建时间等。

        ①使用以下Shell命令列出HBase所有的表的相关信息,如表名、创建时间等:

list

        ②利用Eclipse软件在HBase类中创建listTables方法列出HBase所有的表的相关信息,如表名、创建时间等:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
import java.util.List;public class HBaseExample {private static Configuration configuration;private static Connection connection;private static Admin admin;public static void main(String[] args) throws IOException {// 初始化连接init();// 列出所有表格listTables();// 关闭连接close();}// 列出所有表格public static void listTables() throws IOException {// 获取所有表格的描述符List<TableDescriptor> tableDescriptors = admin.listTableDescriptors();// 打印每个表的名称for (TableDescriptor tableDescriptor : tableDescriptors) {TableName tableName = tableDescriptor.getTableName();System.out.println("Table: " + tableName);}}// 初始化连接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) {System.err.println("Failed to initialize connection: " + e.getMessage());e.printStackTrace();}}// 关闭连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {System.err.println("Failed to close connection: " + e.getMessage());e.printStackTrace();}}
}

        (2)在终端输出指定表的所有记录数据。

        ①使用以下Shell命令在终端输出指定表的所有记录数据:

scan 's1'

        ②利用Eclipse软件在HBase类中创建getData和printRecoder方法实现输出指定表的所有记录数据:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import java.io.IOException;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.TableName;
import java.util.List;public class HBaseExample {private static Configuration configuration;private static Connection connection;private static Admin admin;public static void main(String[] args) throws IOException {// 初始化连接init();// 获取并打印指定表的数据getData("Student");// 关闭连接close();}// 获取并打印指定表的数据public static void getData(String tableName) throws IOException {// 使用 try-with-resources 来确保自动关闭资源try (Table table = connection.getTable(TableName.valueOf(tableName));ResultScanner scanner = table.getScanner(new Scan())) {for (Result result : scanner) {printRecord(result);}} catch (IOException e) {System.err.println("Error retrieving data from table: " + tableName);e.printStackTrace();}}// 打印一条记录的详细信息public static void printRecord(Result result) {for (Cell cell : result.rawCells()) {String row = Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());String family = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());String qualifier = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());long timestamp = cell.getTimestamp();System.out.println("Row: " + row);System.out.println("Column Family: " + family);System.out.println("Column: " + qualifier);System.out.println("Value: " + value);System.out.println("Timestamp: " + timestamp);System.out.println("---------------------------");}}// 初始化连接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) {System.err.println("Error initializing HBase connection.");e.printStackTrace();}}// 关闭连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {System.err.println("Error closing HBase connection.");e.printStackTrace();}}
}

        (3)向已经创建好的表添加和删除指定的列族或列。

        ①使用以下Shell命令创建表s1:

 create 's1','score'

        ②使用以下Shell命令在s1中添加数据:

put 's1','zhangsan','score:Math','69'

        ③使用以下Shell命令在s1中删除指定的列:

delete 's1','zhangsan','score:Math'

        ④利用Eclipse软件在HBase类中创建insterRow和deleRow方法实现添加和删除指定的列族或列:

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.IOException;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.TableName;public class HBaseExample {private static Configuration configuration;private static Connection connection;private static Admin admin;public static void main(String[] args) throws IOException {// 初始化连接init();// 向表插入数据insertRow("Student", "s1", "info", "name", "zhangsan");insertRow("Student", "s1", "score", "Math", "69");// 删除指定的数据deleteRow("Student", "s1", "score", "Math");// 关闭连接close();}// 向表中插入数据public static void insertRow(String tableName, String rowKey, String colFamily, String col, String val) throws IOException {try (Table table = connection.getTable(TableName.valueOf(tableName))) {Put put = new Put(rowKey.getBytes());put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());table.put(put);} catch (IOException e) {System.err.println("Error inserting row into table " + tableName);e.printStackTrace();}}// 删除指定的数据public static void deleteRow(String tableName, String rowKey, String colFamily, String col) throws IOException {try (Table table = connection.getTable(TableName.valueOf(tableName))) {Delete delete = new Delete(rowKey.getBytes());// 删除指定列族delete.addFamily(Bytes.toBytes(colFamily));// 删除指定列delete.addColumn(Bytes.toBytes(colFamily), Bytes.toBytes(col));table.delete(delete);} catch (IOException e) {System.err.println("Error deleting row from table " + tableName);e.printStackTrace();}}// 初始化连接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) {System.err.println("Error initializing HBase connection.");e.printStackTrace();}}// 关闭连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {System.err.println("Error closing HBase connection.");e.printStackTrace();}}
}

        (4)清空指定的表的所有记录数据。

        ①使用以下Shell命令清空指定的表的所有记录数据:

truncate 's1'

        ②利用Eclipse软件在HBase类中创建clearRows方法实现清空指定的表的所有记录数据:

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.IOException;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.TableName;public class HBaseExample {private static Configuration configuration;private static Connection connection;private static Admin admin;public static void main(String[] args) throws IOException {// 初始化连接init();// 清空指定表的数据clearRows("Student");// 关闭连接close();}// 清空指定表的数据public static void clearRows(String tableName) throws IOException {try (Table table = connection.getTable(TableName.valueOf(tableName))) {Scan scan = new Scan();ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {Delete delete = new Delete(result.getRow());table.delete(delete);}} catch (IOException e) {System.err.println("Error clearing rows in table: " + tableName);e.printStackTrace();}}// 初始化连接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) {System.err.println("Error initializing HBase connection.");e.printStackTrace();}}// 关闭连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {System.err.println("Error closing HBase connection.");e.printStackTrace();}}
}

        (5)统计表的行数。

        ①使用以下Shell命令统计表的行数:

count 's1'

        ②利用Eclipse软件在HBase类中创建countRows方法实现统计表的行数:

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.IOException;public class HBaseExample {private static Configuration configuration;private static Connection connection;private static Admin admin;public static void main(String[] args) throws IOException {// 初始化连接init();// 统计指定表的行数countRows("Student");// 关闭连接close();}// 统计表的行数public static void countRows(String tableName) throws IOException {try (Table table = connection.getTable(TableName.valueOf(tableName));ResultScanner scanner = table.getScanner(new Scan())) {int num = 0;for (Result result : scanner) {num++;}System.out.println("行数: " + num);} catch (IOException e) {System.err.println("Error counting rows in table: " + tableName);e.printStackTrace();}}// 初始化连接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) {System.err.println("Error initializing HBase connection.");e.printStackTrace();}}// 关闭连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {System.err.println("Error closing HBase connection.");e.printStackTrace();}}
}

3.2 现有以下关系型数据库中的表和数据,要求将其转换为适合于HBase存储的表并插入数据:

        (1)使用Shell命令将学生表、课程表、选课表的数据信息添加到对应的数据表中。

        ①使用以下Shell命令创建学生表:

create 'Student','S_No','S_Name','S_Sex','S_Age'

        ②使用以下Shell命令在学生表中插入对应的数据信息:

put 'Student','s001','S_No','2015001'

put 'Student','s001','S_Name','Zhangsan'

put 'Student','s001','S_Sex','male'

put 'Student','s001','S_Age','23'

put 'Student','s002','S_No','2015002'

put 'Student','s002','S_Name','Mary'

put 'Student','s002','S_Sex','female'

put 'Student','s002','S_Age','22'

put 'Student','s003','S_No','2015003'

put 'Student','s003','S_Name','Lisi'

put 'Student','s003','S_Sex','male'

put 'Student','s003','S_Age','24'

        ③使用以下Shell命令创建课程表:

create 'Course','C_No','C_Name','C_Credit'

        ④使用以下Shell命令在课程表中插入对应的数据信息:

put 'Course','c001','C_No','123001'

put 'Course','c001','C_Name','Math'

put 'Course','c001','C_Credit','2.0'

put 'Course','c002','C_No','123002'

put 'Course','c002','C_Name','Computer'

put 'Course','c002','C_Credit','5.0'

put 'Course','c003','C_No','123003'

put 'Course','c003','C_Name','English'

put 'Course','c003','C_Credit','3.0'

        ⑤使用以下Shell命令创建选课表:

create 'SC','SC_Sno','SC_Cno','SC_Score'

        ⑥使用以下Shell命令在选课表中插入对应的数据信息:

put 'SC','sc001','SC_Sno','2015001'

put 'SC','sc001','SC_Cno','123001'

put 'SC','sc001','SC_Score','86'

put 'SC','sc002','SC_Sno','2015001'

put 'SC','sc002','SC_Cno','123003'

put 'SC','sc002','SC_Score','69'

put 'SC','sc003','SC_Sno','2015002'

put 'SC','sc003','SC_Cno','123002'

put 'SC','sc003','SC_Score','77'

put 'SC','sc004','SC_Sno','2015002'

put 'SC','sc004','SC_Cno','123003'

put 'SC','sc004','SC_Score','99'

put 'SC','sc005','SC_Sno','2015003'

put 'SC','sc005','SC_Cno','123001'

put 'SC','sc005','SC_Score','98'

        (2)请编程实现 createTable(String tableName, String[] fields)

        创建表,参数 tableName 为表的名称,字符串数组 fields 为存储记录各个字段名称的数组。要求当 HBase 已经存在名为 tableName 的表的时候,先删除原有的表,然后再创建新的表。

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.IOException;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.TableName;
import java.util.List;public class HBaseExample {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void main(String[] args) throws IOException {init();String a = "score";createTable("s1", new String[]{a});close();}// 创建表,字段数组对应列族public static void createTable(String tableName, String[] fields) throws IOException {TableName tablename = TableName.valueOf(tableName);// 如果表已经存在,则删除原有表if (admin.tableExists(tablename)) {System.out.println("数据表已经存在!");admin.disableTable(tablename);admin.deleteTable(tablename); // 删除原来的表}// 构建表描述符TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tablename);// 设置列族for (String field : fields) {tableDescriptorBuilder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(field)).build());}// 创建表admin.createTable(tableDescriptorBuilder.build());System.out.println("表创建成功: " + tableName);}// 初始化连接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) {System.err.println("Error initializing HBase connection.");e.printStackTrace();}}// 关闭连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {System.err.println("Error closing HBase connection.");e.printStackTrace();}}
}

        (3)请编程实现 addRecord(String tableName, String row, String[] fields, String[] values)向表 tableName 、行 row (用 S_Name 表示)和字符串数组 fields 指定的单元格中添加 对应的数据 values 。其中, fields 中每个元素如果对应的列族下还有相应的列限定符的话, 用“ columnFamily:column ”表示。例如,同时向“ Math ”、“ Computer Science ”、“ English ” 三 列添 加 成 绩 时 , 字 符 串 数 组 fields 为 {“Score:Math”, ”Score:Computer Science”, ”Score:English”} ,数组 values 存储这三门课的成绩。

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.IOException;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.TableName;
import java.util.List;public class HBaseExample {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void main(String[] args) throws IOException {init();String[] fields = {"score:Math", "score:Chinese"};String[] values = {"58", "77"};addRecord("s1", "1", fields, values);close();}// 向表添加记录public static void addRecord(String tableName, String row, String[] fields, String[] values) throws IOException {Table table = connection.getTable(TableName.valueOf(tableName));try {for (int i = 0; i < fields.length; i++) {Put put = new Put(row.getBytes());String[] cols = fields[i].split(":");if (cols.length == 2) {put.addColumn(cols[0].getBytes(), cols[1].getBytes(), values[i].getBytes());table.put(put);} else {System.out.println("字段格式不正确,应该为列族:列名 格式。");}}} catch (IOException e) {System.err.println("Error while adding record: " + e.getMessage());throw e;  // Rethrow to allow the caller to handle it as needed} finally {table.close();}}// 初始化 HBase 连接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) {System.err.println("Error initializing HBase connection: " + e.getMessage());e.printStackTrace();}}// 关闭 HBase 连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {System.err.println("Error closing HBase connection: " + e.getMessage());e.printStackTrace();}}
}

(4)请编程实现 scanColumn(String tableName, String column)浏览表 tableName 某一列的数据,如果某一行记录中该列数据不存在,则返回 null 。要 求当参数 column 为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;当参数 column 为某一列具体名称(例如“ Score:Math ”)时,只需要列出该列的数据。

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 org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.TableName;import java.io.IOException;
import org.apache.hadoop.hbase.Cell;public class HBaseExample {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void main(String[] args) throws IOException {init();scanColumn("s1", "score");close();}// 扫描指定列族并打印结果public static void scanColumn(String tableName, String column) throws IOException {Table table = connection.getTable(TableName.valueOf(tableName));Scan scan = new Scan();scan.addFamily(Bytes.toBytes(column)); // 扫描指定列族try (ResultScanner scanner = table.getScanner(scan)) {for (Result result : scanner) {showCell(result); // 打印每一行的内容}}}// 格式化输出结果public static void showCell(Result result) {for (Cell cell : result.rawCells()) {String rowName = new String(Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength()));String columnFamily = new String(Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength()));String columnName = new String(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()));String value = new String(Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));long timestamp = cell.getTimestamp();System.out.println("Row Name: " + rowName);System.out.println("Timestamp: " + timestamp);System.out.println("Column Family: " + columnFamily);System.out.println("Column: " + columnName);System.out.println("Value: " + value);System.out.println("--------------------------------");}}// 初始化连接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) {System.err.println("Error initializing HBase connection: " + e.getMessage());e.printStackTrace();}}// 关闭连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {System.err.println("Error closing HBase connection: " + e.getMessage());e.printStackTrace();}}
}

        (5)请编程实现 modifyData(String tableName, String row, String column)修改表 tableName ,行 row (可以用学生姓名 S_Name 表示),列 column 指定的单元格的数据。

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.IOException;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.TableName;public class HBase {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void main(String[] args) throws IOException {init();modifyData("s1", "Math", "score", "1");close();}// 修改数据public static void modifyData(String tableName, String columnFamily, String column, String val) throws IOException {init();Table table = connection.getTable(TableName.valueOf(tableName));// 创建Put操作,指定row keyPut put = new Put("1".getBytes()); // 这里使用 "1" 作为row key// 将数据添加到指定的列族和列名put.addColumn(columnFamily.getBytes(), column.getBytes(), val.getBytes());// 执行Put操作table.put(put);table.close();}// 初始化连接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 (connection != null) {connection.close();}} catch (IOException e) {e.printStackTrace();}}
}

        (6)请编程实现 deleteRow(String tableName, String row)删除表 tableName 中 row 指定的行的记录。

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.IOException;
import org.apache.hadoop.hbase.client.TableDescriptor;
import org.apache.hadoop.hbase.TableName;public class HBase {public static Configuration configuration;public static Connection connection;public static Admin admin;public static void main(String[] args) throws IOException {init();deleteRow("s1", "1");  // 删除表 "s1" 中行键为 "1" 的数据close();}// 删除指定的行数据public static void deleteRow(String tableName, String row) throws IOException {init();Table table = connection.getTable(TableName.valueOf(tableName));// 创建一个Delete对象,传入要删除的rowKeyDelete delete = new Delete(row.getBytes());// 如果只想删除特定列的数据,可以使用以下方式:// delete.addColumn(Bytes.toBytes("score"), Bytes.toBytes("Math"));// 删除整行数据table.delete(delete);table.close();}// 初始化HBase连接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();}}// 关闭HBase连接public static void close() {try {if (admin != null) {admin.close();}if (connection != null) {connection.close();}} catch (IOException e) {e.printStackTrace();}}
}


四、问题和解决方法

        1. 实验问题:Hadoop无法启动或启动失败。

解决方法:检查Hadoop配置文件中的路径和参数设置,确保正确设置以及文件的可访问性,对配置文件进行修改后对应问题得到解决。

        2. 实验问题:Hadoop的任务无法运行或失败。

解决方法:检查任务配置文件中的输入输出路径是否正确,并确保输入数据存在,更改输入输出路径后问题得到解决。

        3. 实验问题:执行命令时提示"命令未找到"。

解决方法:确保命令拼写正确,并检查命令是否安装在系统路径中。可以使用which命令来确定命令的路径,并将其添加到系统路径中。

        4. 实验问题:没有足够的权限执行某个命令。

解决方法:尝试使用sudo命令以管理员权限运行命令,或者联系系统管理员赋予所需的权限。

        5. 实验问题:在连接 HBase 时,出现连接异常。

解决方法:检查 HBase 的配置文件是否正确,并确保 HBase 服务已启动。

        6. 实验问题:在创建表时,出现表已存在的错误。

解决方法:在创建表之前,先判断表是否已存在,如果存在则先删除表再创建。

        7. 实验问题:在创建表时,指定的列族不存在。

解决方法:在创建表时,需要指定表的列族,如果指定的列族不存在,则先创建列族。

        8. 实验问题:在插入数据时,出现数据格式错误。

解决方法:检查插入的数据是否符合 HBase 的数据类型要求,如字符串需要使用 Bytes.toBytes()方法转换为字节数组。

        9. 实验问题:在查询数据时,出现空指针异常。

解决方法:在查询数据之前,先判断表是否存在,如果不存在则先创建表。

        10. 实验问题:在删除表时,出现表不存在的错误。

解决方法:在删除表之前,先判断表是否存在,如果不存在则不进行删除操作。

        11. 实验问题:在删除表时,出现表被禁用的错误。

解决方法:在删除表之前,先判断表是否被禁用,如果被禁用则先启用表再删除。

        12. 实验问题:在清空表数据时,出现数据仍存在的错误。

解决方法:在清空表数据之前,先判断表是否存在,如果不存在则不进行清空操作。

        13. 实验问题:在统计表行数时,出现表不存在的错误。

解决方法:在统计表行数之前,先判断表是否存在,如果不存在则不进行统计操作。

        14. 实验问题:在创建表时,出现权限不足的错误。

解决方法:使用具有足够权限的用户执行创建表操作。

        15. 实验问题:在插入数据时,出现连接超时的错误。

解决方法:检查网络连接是否正常,并增加连接超时时间。

        16. 实验问题:在查询数据时,出现查询速度慢的问题。

解决方法:优化查询语句,尽量减少全表扫描的情况,可以使用过滤器或者二级索引来提高查询效率。

        17. 实验问题:在查询数据时,出现数据丢失的问题。

解决方法:检查数据是否正确插入,并确保查询语句正确。

        18. 实验问题:在创建表时,出现表名不合法的错误。

解决方法:检查表名是否符合 HBase 的命名规范,如只能包含字母、数字和下划线。

        19. 实验问题:在插入数据时,出现主键重复的错误。

解决方法:检查插入的数据是否已存在,如果存在则更新数据。

        20. 实验问题:压缩或解压缩文件。

解决方法:使用tar命令进行文件压缩和解压缩。例如,使用tar -czvf archive.tar.gz directory可以将一个目录压缩为.tar.gz文件。

        21. 实验问题:在删除表时,出现删除失败的错误。

解决方法:检查表是否已被其他操作占用,如禁用状态、正在进行的写操作等。

        22. 实验问题:快速访问最近使用的命令。

解决方法:使用命令历史和快捷键。按下上箭头键可以在命令历史中向上导航,并按下回车键执行选中的命令。使用Ctrl + R可以进行反向搜索并执行最近使用的命令。

        23. 实验问题:在清空表数据时,出现清空失败的错误。

解决方法:检查表是否已被其他操作占用,如禁用状态、正在进行的写操作等。

        24. 实验问题:应用程序崩溃或卡死。

解决方法:由于库依赖错误、磁盘空间不足、损坏的配置文件导致的。重装应用程序后问题得到解决。

        25. 实验问题:在Eclipse集成开发环境中编写代码时字体太小不利于观察。

解决方法:点击Window->Preferences->在搜索栏中输入font->General-> Appearance->Colors and Fonts->Basic->Text Font->点击Edit进行字体的设置->点击确认即完成了字体大小的设置。

        26. 实验问题:编写Java代码进行中文输出时出现了乱码现象。

解决方法:鼠标右击->Run As->Run Configurations->Common->在Other后填写gbk然后点击Run进行运行后中文可以正常输出。

        27. 实验问题:建立类后无法运行,显示没有主程序。

解决方法:填写主类运行信息语句public static void main(String[] args)或者继续在包内新建一个主类,通过类组合的形式进行类的运行。

        28. 实验问题:在调用一些类的成员变量的时候显示错误。

解决方法:所调用的类成员变量为私有类型,私有类型只能在类内访问,类外无法对其直接进行访问,在类内构造公有函数形成一个对外接口,在其他类内直接通过调用这个函数来访问其类内部的私有成员即可。

        29. 实验问题:在查询数据时,出现查询结果不准确的问题。

解决方法:检查查询语句是否正确,并确保数据已正确插入。


五、心得体会

        1、在操作HBase之前,应先判断表是否存在,避免空指针异常。

        2、删除表前应先判断表是否存在,避免表不存在的错误。

        3、合理使用权限管理命令,可以确保系统的安全性。

        4、通过使用>、>>和|等操作符,我可以将命令的输出导入到文件中,或者将多个命令连接起来以实现更复杂的数据流操作。

        5、删除表前应先判断表是否被禁用,避免表被禁用的错误。

        6、清空表数据前应先判断表是否存在,避免数据仍存在的错误。

        7、统计表行数前应先判断表是否存在,避免表不存在的错误。

        8、创建表时需使用具有足够权限的用户,避免权限不足的错误。

        9、在使用单引号和双引号的时候要特别注意,输出单个字符时可以使用单引号,如果同时输出多个字符时只能使用双引号进行输出,不然会报错。

        10、在使用一些标点符号的时候要特别注意,代码内的标点符号均为英文,所以在注释和写代码切换的时候要特别的注意。

        11、插入数据时需检查网络连接是否正常,避免连接超时的错误。

        12、查询数据时应优化查询语句,减少全表扫描,提高查询速度。

        13、查询数据时需确保数据正确插入,避免数据丢失的问题。

        14、创建表时需检查表名是否合法,符合HBase命名规范。

        15、插入数据时需检查数据是否已存在,避免主键重复的错误。

        16、删除表时需检查表是否被其他操作占用,避免删除失败的错误。

        17、清空表数据时需检查表是否被其他操作占用,避免清空失败的错误。

        18、统计表行数时需检查表是否被其他操作占用,避免统计失败的错误。

        19、查询数据时需确保查询语句正确,避免查询结果不准确的问题。

        20、HBase表名只能包含字母、数字和下划线,不合法的表名会导致创建失败。

        21、HBase支持使用过滤器和二级索引来提高查询效率,HBase使用Bytes()方法将数据转换为字节数组进行存储。

        22、在操作HBase时,应注意数据的正确插入和更新,避免数据不一致的问题。

http://www.lryc.cn/news/588555.html

相关文章:

  • 每天一个前端小知识 Day 31 - 前端国际化(i18n)与本地化(l10n)实战方案
  • html js express 连接数据库mysql
  • Java:继承和多态(必会知识点整理)
  • 为什么资深C++开发者大部分选vector?揭秘背后的硬核性能真相!
  • 9.服务容错:构建高可用微服务的核心防御
  • #Paper Reading# Apple Intelligence Foundation Language Models
  • 微服务初步入门
  • 量子计算新突破!阿里“太章3.0”实现512量子比特模拟(2025中国量子算力巅峰)
  • 【算法训练营Day12】二叉树part2
  • 《大数据技术原理与应用》实验报告二 熟悉常用的HDFS操作
  • 【小白量化智能体】应用5:编写通达信股票交易指标及生成QMT自动交易Python策略程序
  • UDP协议的端口161怎么检测连通性
  • 【PY32】如何使用 J-Link 和 MDK 开发调试 PY32 MCU
  • 【STM32】什么在使能寄存器或外设之前必须先打开时钟?
  • java基础-1 : 运算符
  • 使用dify生成测试用例
  • 13.计算 Python 字符串的字节大小
  • HTML 文本格式化标签
  • 工业新引擎:预测性维护在工业场景中的实战应用(流程制造业为例)
  • 具身智能零碎知识点(五):VAE中对使用KL散度的理解
  • JJ20 Final Lap演唱会纪念票根生成工具
  • HashMap的长度为什么要是2的n次幂以及HashMap的继承关系(元码解析)
  • C语言:20250714笔记
  • 文本预处理(四)
  • AI驱动编程范式革命:传统开发与智能开发的全维度对比分析
  • 【DataWhale】快乐学习大模型 | 202507,Task01笔记
  • js的局部变量和全局变量
  • Java面试总结(经典题)(Java多线程)(一)
  • kotlin学习笔记
  • 【日常技能】excel的vlookup 匹配#N/A