温馨提示×

HBase如何在Ubuntu上运行

小樊
44
2025-12-12 19:04:15
栏目: 智能运维

在 Ubuntu 上运行 HBase 的完整步骤

一 环境准备与安装

  • 安装 Java(HBase 2.x 建议使用 Java 8;部分版本也支持 Java 11):
    • 安装示例:sudo apt update && sudo apt install openjdk-8-jdk
    • 验证:java -version
  • 安装 Hadoop(伪分布式/分布式模式需要 HDFS;单机本地模式可跳过):
    • 安装示例:sudo apt install hadoop
    • 验证:hdfs dfsadmin -reportjps 能看到 NameNode/DataNode
  • 下载并解压 HBase(以 2.4.10 为例):
    • 下载:wget https://archive.apache.org/dist/hbase/2.4.10/hbase-2.4.10-bin.tar.gz
    • 解压:tar -zxvf hbase-2.4.10-bin.tar.gz && mv hbase-2.4.10 hbase
  • 配置环境变量(~/.bashrc 或 /etc/profile):
    • 添加:export HBASE_HOME=/usr/local/hbase(路径按实际修改)
    • 追加:export PATH=$PATH:$HBASE_HOME/bin
    • 生效:source ~/.bashrc
  • 验证安装:hbase version 能输出版本信息即成功。

二 运行模式与核心配置

  • 单机本地模式(无需 Hadoop,数据存本地文件系统)
    • 配置 hbase-env.sh:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export HBASE_MANAGES_ZK=true
    • 配置 hbase-site.xml(示例):
      <configuration>
        <property>
          <name>hbase.rootdir</name>
          <value>file:///usr/local/hbase/hbase-tmp</value>
        </property>
      </configuration>
      
    • 说明:不依赖 HDFS,适合功能验证与入门练习。
  • 伪分布式模式(本机 HDFS + 内置 ZooKeeper)
    • 先启动 Hadoop(确保 HDFS 可用)
    • 配置 hbase-env.sh:export JAVA_HOME=...export HBASE_MANAGES_ZK=true
    • 配置 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.zookeeper.quorum</name>
          <value>localhost</value>
        </property>
      </configuration>
      
    • 说明:进程在同一台机器,便于学习分布式特性。
  • 完全分布式模式(多节点集群)
    • 配置 hbase-env.sh:export HBASE_MANAGES_ZK=false(使用独立 ZooKeeper 集群)
    • 配置 hbase-site.xml(示例):
      <configuration>
        <property>
          <name>hbase.rootdir</name>
          <value>hdfs://master:9000/hbase</value>
        </property>
        <property>
          <name>hbase.cluster.distributed</name>
          <value>true</value>
        </property>
        <property>
          <name>hbase.zookeeper.quorum</name>
          <value>master,node1,node2</value>
        </property>
        <property>
          <name>hbase.zookeeper.property.clientPort</name>
          <value>2181</value>
        </property>
        <property>
          <name>hbase.zookeeper.property.dataDir</name>
          <value>/usr/local/zookeeper/data</value>
        </property>
        <property>
          <name>hbase.master.info.bindAddress</name>
          <value>master</value>
        </property>
        <property>
          <name>hbase.master.info.port</name>
          <value>16010</value>
        </property>
        <property>
          <name>hbase.regionserver.info.bindAddress</name>
          <value>0.0.0.0</value>
        </property>
        <property>
          <name>hbase.regionserver.info.port</name>
          <value>16030</value>
        </property>
      </configuration>
      
    • 配置 conf/regionservers:每行一个 RegionServer 主机名(如 master、node1、node2)
    • 将 HBase 目录同步到各节点并修正各节点的 hbase-site.xml 与绑定地址。

三 启动与验证

  • 启动顺序(伪分布式/分布式):先启动 HDFSstart-dfs.shstart-all.sh),再启动 HBasestart-hbase.sh
  • 进程检查:
    • 单机/伪分布式常见进程:HMaster、HRegionServer(若使用内置 ZK,还会看到 HQuorumPeer
    • 完全分布式:各节点分别有 HRegionServer,主节点有 HMaster
    • 命令:jps
  • Web UI:
    • HMaster:16010
    • RegionServer:16030
  • HBase Shell 基本操作(验证可用性):
    • 进入 Shell:hbase shell
    • 常用命令:
      • 建表:create 'student','info'
      • 写入:put 'student','row1','info:name','Alice'
      • 查询:get 'student','row1'
      • 扫描:scan 'student'
      • 删除:delete 'student','row1','info:name'
  • 停止:stop-hbase.sh

四 常见问题与排查

  • Java 不匹配:HBase 2.4.x 建议使用 Java 8;若使用 Java 11,请选择与之兼容的 HBase 版本并充分测试。
  • 端口冲突:确保 16010/16030 未被占用;必要时在 hbase-site.xml 调整绑定地址与端口。
  • HDFS 未就绪:伪分布式/分布式必须先启动 HDFS,并确认 hbase.rootdirNameNode 地址与端口正确。
  • 权限与路径:HDFS 上目标目录(如 /hbase)需可写;本地模式请确保 hbase.rootdir 目录存在且可写。
  • 日志定位:异常时优先查看 $HBASE_HOME/logs/ 下的日志文件(如 hbase-*.log、master.log、regionserver.log)。

0