文章目录
一、配置虚拟机网络,实现宿主机访问虚拟机
由于本地客户端访问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 中操作)
- 进入文件夹:C:\Windows\System32\drivers\etc
- 给权限: 右键 hosts 文件 -> 属性 -> 安全 -> 选中 Users -> 点击 编辑 -> 勾选 完全控制 -> 确定。
- 双击打开 hosts 文件(用记事本打开),在最末尾加上一行:192.168.73.102 master
- 保存并关闭文件。
三、请管家(配置自启动服务)
我们要写一个脚本,以后敲一句命令就能同时启动 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("表删除成功!");
}
}
五、运行与验证
- 运行创建表: 在代码里找到 createTableTest() 方法,点击它左边的绿色小箭头,选择 Run 'createTableTest()'。
- 验证: 回到虚拟机的黑框框,输入命令进入 HBase 交互界面:
plain
hbase shell
进去后输入 list,看有没有出现 TEST_TABLE。
- 运行删除表: 回到 IDEA,运行 deleteTableTest(),再回虚拟机里 list 一下,看表是否消失。
