0


实验二 HBase编程实践(centos7)

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

提取码:5566

1.zookeeper环境搭建

1.1压缩文件

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

1.2修改配置文件

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

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

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

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

1.3配置环境变量

vim  ~/.bashrc 

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

export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10/

export PATH=$ZOOKEEPER_HOME/bin:$PATH

使环境变量生效:

source  ~/.bashrc

1.4启动 zookeeper

zkServer.sh start

2.Hbase环境配置

1.1压缩Hbase

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

1.2配置环境变量

vim  ~/.bashrc

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

export HBASE_HOME=/usr/hbase/hbase-1.2.6/

export PATH=$HBASE_HOME/bin:$PATH

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

source ~/.bashrc

进入hbase文件后创建data目录

mkdir zookeeper

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

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

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

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

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

export HBASE_MANAGES_ZK=true

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

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

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

<configuration>
<!--HBase的数据保存在HDFS对应目录-->
<property>
  <name>hbase.rootdir</name>
  <value>hdfs://node1:9000/hbase</value>
</property>    
 
<!--是否是分布式环境-->
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>            
 
<!--配置ZK的地址-->
<property>
  <name>hbase.zookeeper.quorum</name>
  <value>node1</value>
</property>                
 
<!--冗余度-->
<property>
  <name>dfs.replication</name>
  <value>1</value>
</property>
 
<!--zookeeper数据目录-->
<property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>file:/usr/hbase/hbase-1.2.6/zookeeper</value>
</property>
 
</configuration>

1.4 修改配置文件regionservers

vim regionservers

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

node1

1.5启动hbase

cd /usr/hbase/hbase-1.2.6/conf
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代码内容具体如下

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

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.Delete;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.util.Bytes;

public class HBaseTest {
    private Configuration conf = null; // 用于配置 HBase 连接的配置对象
    private Connection conn = null;    // 用于连接 HBase 的连接对象

    // 初始化连接
    public void init() throws Exception {
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "node1:2181");
        conn = ConnectionFactory.createConnection(conf);
    }

    // 创建表,若表已存在则先删除再创建
    public void createTable(String tableName, String[] fields) throws Exception {
        try (Admin admin = conn.getAdmin()) {
            TableName table = TableName.valueOf(tableName);
            if (admin.tableExists(table)) {
                admin.disableTable(table);
                admin.deleteTable(table);
                System.out.println("Old table deleted.");
            }

            // 创建列族
            Set<String> families = new HashSet<>();
            for (String field : fields) {
                String columnFamily = field.split(":")[0];
                families.add(columnFamily);
            }

            // 创建表描述符并添加列族
            TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(table);
            for (String family : families) {
                ColumnFamilyDescriptor cfDesc = ColumnFamilyDescriptorBuilder.of(family);
                builder.setColumnFamily(cfDesc);
            }
            admin.createTable(builder.build());
            System.out.println("Table created successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 添加记录
    public void addRecord(String tableName, String row, String[] fields, String[] values) throws Exception {
        try (Table table = conn.getTable(TableName.valueOf(tableName))) {
            Put put = new Put(Bytes.toBytes(row));
            for (int i = 0; i < fields.length; i++) {
                String[] parts = fields[i].split(":");
                String family = parts[0];
                String qualifier = parts.length > 1 ? parts[1] : "";
                put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(values[i]));
            }
            table.put(put);
            System.out.println("Data inserted successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 修改数据
    public void modifyData(String tableName, String row, String column, String value) throws Exception {
        try (Table table = conn.getTable(TableName.valueOf(tableName))) {
            Put put = new Put(Bytes.toBytes(row));
            String[] parts = column.split(":");
            String family = parts[0];
            String qualifier = parts.length > 1 ? parts[1] : "";
            put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
            table.put(put);
            System.out.println("Data modified successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 删除行
    public void deleteRow(String tableName, String row) throws Exception {
        try (Table table = conn.getTable(TableName.valueOf(tableName))) {
            Delete delete = new Delete(Bytes.toBytes(row));
            table.delete(delete);
            System.out.println("Row deleted successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 主程序
    public static void main(String[] args) {
        HBaseTest demo = new HBaseTest();
        try {
            demo.init();

            // 创建表
            demo.createTable("student", new String[]{
                "Info:S_No", "Info:S_Name", "Info:S_Sex", "Info:S_Age", 
                "Score:Math", "Score:Computer Science", "Score:English"
            });

            // 添加记录
            demo.addRecord("student", "2015001",
                new String[]{
                    "Info:S_No", "Info:S_Name", "Info:S_Sex", "Info:S_Age", 
                    "Score:Math", "Score:Computer Science", "Score:English"
                },
                new String[]{"2015001", "ZhangQuanDe", "man", "21", "90", "92", "66"}
            );

            // 修改数据
            demo.modifyData("student", "2015001", "Score:Math", "60");

            // 删除行
            demo.deleteRow("student", "2015001");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
标签: hbase 数据库 centos

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

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

还没有评论