HBase远程访问配置(详细教程)

文章目录

一、配置虚拟机网络,实现宿主机访问虚拟机

由于本地客户端访问HBase服务器时需要服务器的IP地址,而虚拟机默认采用DHCP协议,每次启动虚拟机分配的IP地址可能不同,因此我们为虚拟机配置双网卡,一个IP地址用于供外网访问,另一个IP地址用于固定虚拟机IP。

  • 以VMware虚拟机为例进行配置

1.添加新的网络适配器,并且更改为仅主机模式

2.设置完成后点击高级

3.进入宿主机的控制面板,进入网络连接,右键VMnet1,点击属性

4.单击TCP/IPv4协议,输入你想要的IP地址(最后一位不要用1和255)

5.在虚拟机中配置此IP相关的信息,复制一份ens33的配置文件,命名为ens36,并修改ens36的内容。(这里需要使用ifconfig命令查看,系统为你分配的名称是什么!!!)

markdown 复制代码
# 进入网卡配置目录
cd /etc/sysconfig/network-scripts/
 
# 复制一份原有的网卡配置文件,并命名为新网卡的名字 ens36
cp ifcfg-ens33 ifcfg-ens36
 
# 编辑新网卡文件
vi ifcfg-ens36

修改如下:

markdown 复制代码
BOOTPROTO=static
NAME=ens36
DEVICE=ens36
IPADDR=192.168.73.102

(注意:这里的 192.168.73.102 假设你 Windows 里配的是 192.168.73.195。如果你 Windows 里用的别的网段,记得把 73 换成你自己的)

之后重启网络服务,让其生效:systemctl restart network

二、配置HBase参数,实现允许外网IP访问

1.打开 hbase-site.xml 在 CentOS 终端操作复制下面命令并回车:

markdown 复制代码
vi /usr/hbase/conf/hbase-site.xml

2.替换配置文件内容 按 i 进入编辑模式。清空原有内容(或者在原本的 和 标签内),直接把下面这段完整的 XML 复制粘贴进去:

markdown 复制代码
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/usr/hbase/zookeeper</value>
  </property>
  <property>
    <name>hbase.master.ipc.address</name>
    <value>0.0.0.0</value>
  </property>
  <property>
    <name>hbase.regionserver.ipc.address</name>
    <value>0.0.0.0</value>
  </property>
</configuration>

3.**关闭防火墙与修改主机名(在 CentOS 终端操作)**依次复制执行:

markdown 复制代码
# 停止防火墙
systemctl stop firewalld.service
 
# 禁用防火墙开机启动
systemctl disable firewalld.service
 
# 修改虚拟机主机名为 master
hostnamectl set-hostname master

4.修改 CentOS 的 hosts 映射

markdown 复制代码
vi /etc/hosts

按 i 进入编辑模式,在文件最下面新起一行,把下面的内容加进去:

markdown 复制代码
192.168.73.102 master

按 Esc,输入 :wq 保存退出。

5.修改 Windows 的 hosts 映射(在 Windows 中操作)

  1. 进入文件夹:C:\Windows\System32\drivers\etc
  2. 给权限: 右键 hosts 文件 -> 属性 -> 安全 -> 选中 Users -> 点击 编辑 -> 勾选 完全控制 -> 确定。
  3. 双击打开 hosts 文件(用记事本打开),在最末尾加上一行:192.168.73.102 master
  4. 保存并关闭文件。

三、请管家(配置自启动服务)

我们要写一个脚本,以后敲一句命令就能同时启动 Hadoop 和 HBase。

1.**创建并打开脚本文件(在 CentOS 终端操作)**依次执行:

markdown 复制代码
cd /etc/init.d
touch hbase
vi hbase

2.粘贴脚本内容

按 i 进入编辑模式,将下面这段代码原封不动粘贴进去:

(注:我在 sleep 后面加上了数字 2 代表停顿两秒,这样启动更稳定,防止报错)

markdown 复制代码
#!/bin/bash
#chkconfig: 2345 80 90
 
# 新增下面这一行,等号后面换成你自己的 Java 路径!
export JAVA_HOME=/usr/java/jdk
 
HADOOP_HOME=/usr/hadoop
HBASE_HOME=/usr/hbase
 
case "$1" in
  start)
    $HADOOP_HOME/sbin/start-all.sh
    sleep 2
    $HBASE_HOME/bin/start-hbase.sh
    ;;
  stop)
    $HBASE_HOME/bin/stop-hbase.sh
    sleep 2
    $HADOOP_HOME/sbin/stop-all.sh
    ;;
  restart)
    $HBASE_HOME/bin/stop-hbase.sh
    sleep 2
    $HADOOP_HOME/sbin/stop-all.sh
    sleep 2
    $HADOOP_HOME/sbin/start-all.sh
    sleep 2
    $HBASE_HOME/bin/start-hbase.sh
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    ;;
esac
exit

按 Esc,输入 :wq 保存退出。

3.赋予权限并启动 依次执行以下命令:

markdown 复制代码
# 注意!这里必须是 +x(原图写成了 -x,会导致脚本无法运行)
chmod +x hbase
 
# 设置开机自启
chkconfig hbase on
 
# 启动服务!
service hbase start

4.启动

等大概一两分钟,让服务完全跑起来,然后输入:

markdown 复制代码
jps

如果你看到列表中出现了 NameNode, DataNode, HMaster, HRegionServer, HQuorumPeer 等名字,恭喜你,服务端的大工程完美收工!

四、宿主机上打开IDEA新建maven项目

1.配置"说明书"(填写 pom.xml)

pom.xml 是 Maven 项目的灵魂,它负责自动下载开发 HBase 所需的依赖包。

复制代码
a.找到文件: 在 IDEA 左侧的项目结构树中,双击打开最底部的 pom.xml。

b.替换内容: 请把文件里 <project> 标签内的内容全部替换为以下代码:
markdown 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>org.example</groupId>
    <artifactId>hbase-javaAPI</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <repositories>
        <repository>
            <id>aliyun</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases><enabled>true</enabled></releases>
            <snapshots><enabled>false</enabled><updatePolicy>never</updatePolicy></snapshots>
        </repository>
    </repositories>
 
    <dependencies>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</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.1</version>
                <configuration>
                    <target>1.8</target>
                    <source>1.8</source>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.放置"通行证"(配置资源文件)

我们需要在 src/main/resources 目录下创建三个文件,让 IDEA 知道去哪连服务器。

操作: 在左侧 src/main/resources 文件夹上右键 -> New -> File。

复制代码
a.创建 core-site.xml
markdown 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/hadoop/tmp</value>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.73.102:9000</value>
    </property>
</configuration>
复制代码
b.创建 hbase-site.xml
markdown 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.tmp.dir</name>
        <value>./tmp</value>
    </property>
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>192.168.73.102</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
    <property>
        <name>hbase.master.ipc.address</name>
        <value>0.0.0.0</value>
    </property>
</configuration>
复制代码
c.创建 log4j.properties
markdown 复制代码
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3.编写"测试程序"(MyTest.java)

操作: 在左侧 src/test/java 目录下,右键 -> New -> Java Class,命名为 MyTest。

把下面的代码原封不动粘贴进去:

java 复制代码
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 org.apache.hadoop.hbase.util.Bytes;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.io.IOException;
 
public class MyTest {
    private Configuration configuration;
    private Connection connection;
    private Admin admin;
 
    @BeforeTest
    public void beforeTest() throws IOException {
        // 1. 初始化配置
        configuration = HBaseConfiguration.create();
        // 2. 建立连接
        connection = ConnectionFactory.createConnection(configuration);
        // 3. 获取管理对象
        admin = connection.getAdmin();
    }
 
    @AfterTest
    public void afterTest() throws IOException {
        if (admin != null) admin.close();
        if (connection != null) connection.close();
    }
 
    @Test
    public void createTableTest() throws IOException {
        String TABLE_NAME = "TEST_TABLE";
        String COLUMN_FAMILY = "cf1";
        
        TableName tableName = TableName.valueOf(TABLE_NAME);
        
        // 构建表描述器
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);
        // 构建列族描述器
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(COLUMN_FAMILY));
        // 将列族添加到表描述器
        tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
        
        // 创建表
        admin.createTable(tableDescriptorBuilder.build());
        System.out.println("表创建成功!");
    }
 
    @Test
    public void deleteTableTest() throws IOException {
        TableName tableName = TableName.valueOf("TEST_TABLE");
        // 删除前必须先禁用表
        admin.disableTable(tableName);
        admin.deleteTable(tableName);
        System.out.println("表删除成功!");
    }
}

五、运行与验证

  1. 运行创建表: 在代码里找到 createTableTest() 方法,点击它左边的绿色小箭头,选择 Run 'createTableTest()'。
  2. 验证: 回到虚拟机的黑框框,输入命令进入 HBase 交互界面:
plain 复制代码
hbase shell

进去后输入 list,看有没有出现 TEST_TABLE。

  1. 运行删除表: 回到 IDEA,运行 deleteTableTest(),再回虚拟机里 list 一下,看表是否消失。
相关推荐
刘~浪地球2 小时前
数据库与缓存--Redis 集群架构与优化
数据库·redis·缓存
羊小蜜.2 小时前
Mysql 11: 存储过程全解——从创建到使用
android·数据库·mysql·存储过程
talen_hx2962 小时前
《零基础入门Spark》学习笔记 Day 15
大数据·笔记·学习·spark
A__tao2 小时前
一键实现 SQL 转 Elasticsearch Mapping(支持字段注释 + meta 描述)
数据库·sql·elasticsearch
努力努力再努力wz2 小时前
【C++高阶系列】外存查找的极致艺术:数据库偏爱的B+树底层架构剖析与C++完整实现!(附B+树实现的源码)
linux·运维·服务器·数据结构·数据库·c++·b树
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB 持久性完全指南(20)
数据库·学习·mongodb
何中应2 小时前
Doris部署&连接
大数据·数据库·时序数据库·doris
云边有个稻草人2 小时前
KES 表空间目录自动创建特性:简化存储管理、提升运维效率
数据库·国产数据库·kes
clear sky .2 小时前
[linux]buildroot什么用途
linux·运维·数据库