虚拟机环境
为了方便一些小朋友参考,把这部分内容整理了一下。
Ubuntu Server 24.04 LTS的一个 VirtualBox 虚拟机的下载链接:https://pan.baidu.com/s/1ggVI-_Cuab2ylcjvKRWRwg?pwd=z5m3 提取码:z5m3
用户名和密码都是hadoop。
Hadoop的安装
参考之前的一篇
HBase的安装
HBase 的安装过程通常包括以下前置步骤:
-
已经安装 Java:HBase 需要 Java 运行环境,因此首先需要在系统上安装 Java 8。
-
已经安装 Hadoop:HBase 需要在系统上安装 Hadoop。这一步上一单元已经完成了。。
以下是在已经安装好 Hadoop 的基础上,安装 HBase 的步骤:
- 下载 HBase:首先,从 Apache HBase 的官方网站下载最新稳定版的 HBase。你可以使用
wget
命令来下载:
wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/hbase-2.5.8-bin.tar.gz
请注意,上述链接可能会随着新版本的发布而改变。
- 解压 HBase:使用
tar
命令解压下载的文件:
tar xzf hbase-2.5.8-bin.tar.gz
sudo mv hbase-2.5.8 /usr/local/hbase
- 配置 HBase:编辑 HBase 的配置文件
hbase-site.xml
,设置 HBase 的运行模式和数据存储路径。你可以使用以下命令打开配置文件:
cp /usr/local/hbase/conf/hbase-site.xml /usr/local/hbase/conf/hbase-site.xml.back
nano /usr/local/hbase/conf/hbase-site.xml
然后,添加以下内容到配置文件:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>16010</value>
</property>
<property>
<name>hbase.regionserver.info.port</name>
<value>16020</value>
</property>
</configuration>
然后修改/usr/local/hbase/conf/hbase-env.sh
nano /usr/local/hbase/conf/hbase-env.sh
添加下面的内容:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true
- 配置 HBase 环境变量:编辑
~/.bashrc
文件,添加 HBase 的环境变量。你可以使用以下命令打开配置文件:
nano ~/.bashrc
然后,添加以下内容到文件末尾:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export PATH=/usr/local/hadoop/bin:$PATH
export PATH=/usr/local/hadoop/sbin:$PATH
export PATH=$PATH:/usr/local/hbase/bin
然后,运行以下命令使环境变量生效:
source ~/.bashrc
- 启动 HBase:最后,你可以使用以下命令启动 HBase:
start-hbase.sh
现在,你应该已经成功安装并启动了 HBase。你可以通过访问 http://localhost:16010
来查看 HBase 的状态。
4.5. HBase的使用
安装好的 HBase 有多种使用方式:
-
HBase Shell:HBase 提供了一个交互式的 shell,可以使用它来执行各种 HBase 命令,如创建表、插入数据、查询数据等。可以通过运行
./bin/hbase shell
来启动 HBase shell。 -
Java API:HBase 提供了一个丰富的 Java API,可以使用它来编写 Java 程序操作 HBase。例如,可以使用 HTable 类来操作 HBase 表,使用 Put 类来插入数据,使用 Get 类来查询数据等。
-
REST API:HBase 提供了一个 REST API,可以使用任何支持 HTTP 的编程语言通过 HTTP 请求来操作 HBase。
-
Thrift API:HBase 还提供了一个 Thrift API,可以使用任何支持 Thrift 的编程语言来操作 HBase。
-
JDBC:HBase 提供了一个 JDBC 驱动,可以使用 JDBC 来操作 HBase。这使得可以使用 SQL 语言来查询 HBase 数据,也可以使用任何支持 JDBC 的工具或框架来操作 HBase。
-
HBase Admin UI:HBase 提供了一个 Web UI,可以通过浏览器访问它来查看 HBase 的状态和性能指标,以及执行一些管理操作。
# 进入HBase shell
hbase shell
# 创建一个名为'test_table'的表,有一个名为'test_family'的列族
create 'test_table', 'test_family'
# 插入一些随机数据
put 'test_table', 'row1', 'test_family:col1', 'value1'
put 'test_table', 'row2', 'test_family:col2', 'value2'
put 'test_table', 'row3', 'test_family:col3', 'value3'
# 扫描并打印表中的所有数据
scan 'test_table'
4.6. HBase操作的Python演示
在HBase shell中,可以使用以下命令来删除所有的表:
hbase shell
list.each { |table| disable table; drop table }
这段代码首先列出所有的表,然后对每个表执行disable
和drop
操作。disable
操作是必要的,因为不能删除一个正在使用的表。
请注意,这将删除所有的表,包括任何重要的数据。在执行这个操作之前,请确保已经备份了所有重要的数据。
要在 Python 中使用 HBase,可以使用 happybase
库。以下是一个简单的示例,展示如何连接到 HBase,创建表,插入数据,然后查询数据:
首先,要启动thrift,然后确保已经安装了 happybase
。如果没有,可以使用 pip 安装:
start-all.sh
start-hbase.sh
nohup hbase thrift start > hbase_thrift.log 2>&1 &
pip install happybase hbase --break-system-packages
然后,可以使用以下 Python 代码来操作 HBase:
import os
import happybase
# 连接到 HBase
connection = happybase.Connection('localhost', 9090)
# 获取表名列表
table_names = connection.tables()
# 解码表名
table_names = [name.decode('utf-8') for name in table_names]
print(table_names)
# 从环境变量获取表名和列族
table_name = os.getenv('HBASE_TABLE_NAME', 'score_info')
families = {
'name': dict(max_versions=10),
'score': dict(max_versions=1, block_cache_enabled=False),
'date': dict(), # 使用默认值
}
# 检查表是否存在
if table_name in connection.tables():
print(f"Table {table_name} already exists.")
else:
connection.create_table(table_name, families)
print(f"Table {table_name} created.")
# 获取表
table = connection.table(table_name)
# 插入数据
table.put('student1', {
'name:full_name': "Fred",
'score:poltics': '74',
'score:english': '104',
'score:chinese': '117',
'date:created': '2024-01-09'
})
# 插入数据
table.put('student2', {
'name:full_name': "于同学",
'score:政治': '74',
'score:英语': '104',
'score:语文': '117',
'date:created': '2024-01-09'
})
# 查询数据
data = table.row('student2')
# 打印数据
for key, value in data.items():
print(f"{key.decode('utf-8')}: {value.decode('utf-8')}")
请注意,这个示例假设 HBase Thrift 服务正在本地运行,并且监听的是默认的端口(9090)。如果 HBase Thrift 服务在其他地方运行,或者使用的是其他端口,需要在创建 happybase.Connection
时提供正确的主机名和端口号。