0


实验二 HBase编程实践(centos7)

链接:https://pan.baidu.com/s/1Pp7fgEEN3ABc4QXkCxGI6w?pwd=5566

提取码:5566

1.zookeeper环境搭建

1.1压缩文件

  1. tar -zxvf zookeeper-3.4.10.tar.gz
  2. sudo mkdir -p /usr/zookeeper #创建文件
  3. sudo cp -r zookeeper-3.4.10 /usr/zookeeper/

1.2修改配置文件

ZooKeeper的核心服务器属性配置文件是zoo.cfg。在主安装目录下的conf子目录内,系统为用户准备了一个模板文件zoo_sample.cfg,我们可以将这个文件拷贝一份,命名为zoo.cfg,然后修改配置文件。首先我们进入到conf子目录,执行以下命令:

  1. cd /usr/zookeeper/zookeeper-3.4.10/conf
  2. cp zoo_sample.cfg zoo.cfg
  3. vim zoo.cfg

然后,我们进入到zoo.cfg文件中修改配置信息,tickTime:这个时间是作为ZooKeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳;dataDir:顾名思义就是ZooKeeper保存数据的目录,默认情况下,ZooKeeper将数据的日志文件也保存在这个目录里;clientPort:这个端口就是客户端连接ZooKeeper服务器的端口,ZooKeeper会监听这个端口,接收客户端的请求。按如下配置修改tickTime、dataDate、clientPort的值(其余内容不做修改):

  1. tickTime=2000
  2. dataDir=/usr/zookeeper/zookeeper-3.4.10/tmp/zookeeper #自己创建tmp/zookeeper
  3. clientPort=2181

1.3配置环境变量

  1. vim ~/.bashrc

在文件末尾增加下面内容:

  1. export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10/
  2. export PATH=$ZOOKEEPER_HOME/bin:$PATH

使环境变量生效:

  1. source ~/.bashrc

1.4启动 zookeeper

  1. zkServer.sh start

2.Hbase环境配置

1.1压缩Hbase

  1. tar -zxvf hbase-1.2.6-bin.tar.gz
  2. sudo mkdir -p /usr/hbase#创建文件
  3. sudo cp -r hbase-1.2.6 /usr/hbase/

1.2配置环境变量

  1. vim ~/.bashrc

在打开文件的末尾添加以下两行代码,保存并退出。

  1. export HBASE_HOME=/usr/hbase/hbase-1.2.6/
  2. export PATH=$HBASE_HOME/bin:$PATH

使环境变量生效,执行下面命令:

  1. source ~/.bashrc

进入hbase文件后创建data目录

  1. mkdir zookeeper

进入hbase中的conf文件后修改配置文件hbase-env.sh

  1. cd /usr/hbase/hbase-1.2.6/conf
  2. vim hbase-env.sh

在打开的文件中,找到“# export JAVA_HOME”开头的文件,去掉前面的“#”,修改为:

  1. export JAVA_HOME=/usr/java/jdk1.8.0_212

另外,找到“# export HBASE_MANAGES_ZK”开头的文件,去掉前面的“#”,修改为:

  1. export HBASE_MANAGES_ZK=true

1.3修改配置文件hbase-site.xml

  1. cd /usr/hbase/hbase-1.2.6/conf
  2. vim hbase-site.xml

在打开的文件中编辑内容,如下:

  1. <configuration>
  2. <!--HBase的数据保存在HDFS对应目录-->
  3. <property>
  4. <name>hbase.rootdir</name>
  5. <value>hdfs://node1:9000/hbase</value>
  6. </property>
  7. <!--是否是分布式环境-->
  8. <property>
  9. <name>hbase.cluster.distributed</name>
  10. <value>true</value>
  11. </property>
  12. <!--配置ZK的地址-->
  13. <property>
  14. <name>hbase.zookeeper.quorum</name>
  15. <value>node1</value>
  16. </property>
  17. <!--冗余度-->
  18. <property>
  19. <name>dfs.replication</name>
  20. <value>1</value>
  21. </property>
  22. <!--zookeeper数据目录-->
  23. <property>
  24. <name>hbase.zookeeper.property.dataDir</name>
  25. <value>file:/usr/hbase/hbase-1.2.6/zookeeper</value>
  26. </property>
  27. </configuration>

1.4 修改配置文件regionservers

  1. vim regionservers

在打开的文件中,将里面的内容修改为(自己主机名):

  1. node1

1.5启动hbase

  1. cd /usr/hbase/hbase-1.2.6/conf
  2. start-hbase.sh

jps查看进程

访问http://192.168.159.128:16010 (换成自己的ip地址)

3.HBase Java API编程实践

1)createTable(String tableName, String[] fields)

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

2)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存储这三门课的成绩。

3)modifyData(String tableName, String row, String column)

修改表tableName,行row(可以用学生姓名S_Name表示),列column指定的单元格的数据。

4)deleteRow(String tableName, String row)

删除表tableName中row指定的行的记录。

本实例采用Eclipse开发工具。
启动Eclipse,启动以后,出现如下图所示界面,点击ok按钮。

添加hbase安装包下的所有jar包

在开始运行程序之前,需要启动HDFS和HBase。我的已经运行了

HBaseTest.java代码内容具体如下

  1. import java.io.IOException;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.hbase.HBaseConfiguration;
  6. import org.apache.hadoop.hbase.TableName;
  7. import org.apache.hadoop.hbase.client.Admin;
  8. import org.apache.hadoop.hbase.client.Connection;
  9. import org.apache.hadoop.hbase.client.ConnectionFactory;
  10. import org.apache.hadoop.hbase.client.Delete;
  11. import org.apache.hadoop.hbase.client.Put;
  12. import org.apache.hadoop.hbase.client.Table;
  13. import org.apache.hadoop.hbase.HColumnDescriptor;
  14. import org.apache.hadoop.hbase.HTableDescriptor;
  15. import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
  16. import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
  17. import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
  18. import org.apache.hadoop.hbase.util.Bytes;
  19. public class HBaseTest {
  20. private Configuration conf = null; // 用于配置 HBase 连接的配置对象
  21. private Connection conn = null; // 用于连接 HBase 的连接对象
  22. // 初始化连接
  23. public void init() throws Exception {
  24. conf = HBaseConfiguration.create();
  25. conf.set("hbase.zookeeper.quorum", "node1:2181");
  26. conn = ConnectionFactory.createConnection(conf);
  27. }
  28. // 创建表,若表已存在则先删除再创建
  29. public void createTable(String tableName, String[] fields) throws Exception {
  30. try (Admin admin = conn.getAdmin()) {
  31. TableName table = TableName.valueOf(tableName);
  32. if (admin.tableExists(table)) {
  33. admin.disableTable(table);
  34. admin.deleteTable(table);
  35. System.out.println("Old table deleted.");
  36. }
  37. // 创建列族
  38. Set<String> families = new HashSet<>();
  39. for (String field : fields) {
  40. String columnFamily = field.split(":")[0];
  41. families.add(columnFamily);
  42. }
  43. // 创建表描述符并添加列族
  44. TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(table);
  45. for (String family : families) {
  46. ColumnFamilyDescriptor cfDesc = ColumnFamilyDescriptorBuilder.of(family);
  47. builder.setColumnFamily(cfDesc);
  48. }
  49. admin.createTable(builder.build());
  50. System.out.println("Table created successfully.");
  51. } catch (Exception e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. // 添加记录
  56. public void addRecord(String tableName, String row, String[] fields, String[] values) throws Exception {
  57. try (Table table = conn.getTable(TableName.valueOf(tableName))) {
  58. Put put = new Put(Bytes.toBytes(row));
  59. for (int i = 0; i < fields.length; i++) {
  60. String[] parts = fields[i].split(":");
  61. String family = parts[0];
  62. String qualifier = parts.length > 1 ? parts[1] : "";
  63. put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(values[i]));
  64. }
  65. table.put(put);
  66. System.out.println("Data inserted successfully.");
  67. } catch (Exception e) {
  68. e.printStackTrace();
  69. }
  70. }
  71. // 修改数据
  72. public void modifyData(String tableName, String row, String column, String value) throws Exception {
  73. try (Table table = conn.getTable(TableName.valueOf(tableName))) {
  74. Put put = new Put(Bytes.toBytes(row));
  75. String[] parts = column.split(":");
  76. String family = parts[0];
  77. String qualifier = parts.length > 1 ? parts[1] : "";
  78. put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
  79. table.put(put);
  80. System.out.println("Data modified successfully.");
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. }
  84. }
  85. // 删除行
  86. public void deleteRow(String tableName, String row) throws Exception {
  87. try (Table table = conn.getTable(TableName.valueOf(tableName))) {
  88. Delete delete = new Delete(Bytes.toBytes(row));
  89. table.delete(delete);
  90. System.out.println("Row deleted successfully.");
  91. } catch (Exception e) {
  92. e.printStackTrace();
  93. }
  94. }
  95. // 主程序
  96. public static void main(String[] args) {
  97. HBaseTest demo = new HBaseTest();
  98. try {
  99. demo.init();
  100. // 创建表
  101. demo.createTable("student", new String[]{
  102. "Info:S_No", "Info:S_Name", "Info:S_Sex", "Info:S_Age",
  103. "Score:Math", "Score:Computer Science", "Score:English"
  104. });
  105. // 添加记录
  106. demo.addRecord("student", "2015001",
  107. new String[]{
  108. "Info:S_No", "Info:S_Name", "Info:S_Sex", "Info:S_Age",
  109. "Score:Math", "Score:Computer Science", "Score:English"
  110. },
  111. new String[]{"2015001", "ZhangQuanDe", "man", "21", "90", "92", "66"}
  112. );
  113. // 修改数据
  114. demo.modifyData("student", "2015001", "Score:Math", "60");
  115. // 删除行
  116. demo.deleteRow("student", "2015001");
  117. } catch (Exception e) {
  118. e.printStackTrace();
  119. }
  120. }
  121. }
标签: hbase 数据库 centos

本文转载自: https://blog.csdn.net/qq_73915074/article/details/143314555
版权归原作者 代码搬运工小覃 所有, 如有侵权,请联系我们删除。

“实验二 HBase编程实践(centos7)”的评论:

还没有评论