拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ambari 2.7.5 下 HBase 2.0.2.3.1.4.0 离线替换与重装实战

Ambari 2.7.5 下 HBase 2.0.2.3.1.4.0 离线替换与重装实战 简介本资源为 Ambari 2.7.5 编译部署场景下提前备好的 HBase 二进制安装包面向正在搭建 Hadoop 大数据平台、受困于官方源下载缓慢的运维与开发人员。包内以 hbase-2.0.2.3.1.4.0-315-bin.tar.gz 为核心配合 Hadoop、Grafana、Phoenix 等大包一并离线获取可有效规避编译阶段长时间等待与网络中断问题。压缩包共 412 个文件约 211.57MB以 194 个 jar 依赖库、158 个 rb 脚本、17 个 sh 启动脚本及少量 xml、properties 配置文件和 css、js 前端资源为主覆盖 HBase 运行所需的库、脚本与配置模块目录结构完整解压后可直接用于 Ambari 集成环境。目前已有 2194 人学习下载适合需要快速完成 HBase 组件离线部署、减少编译排错成本的中高级大数据从业者参考使用。1. 从 Ambari 2.7.5 里单独拎出 HBase 2.0.2.3.1.4.0这个 tarball 到底解决什么问题如果你正在维护一套 HDP 3.1.4 的 Ambari 2.7.5 集群大概率遇到过这种场景HBase 服务在 Ambari 界面上显示异常或者你想单独升级、替换、离线重装 HBase 组件却发现 Ambari 的包管理路径里找不到对应的二进制包。hbase-2.0.2.3.1.4.0-315-bin.tar.gz就是为这个场景准备的——它是 HDP 3.1.4 发行版中 HBase 组件的完整二进制分发包版本号里的2.0.2是上游 HBase 基线3.1.4.0-315是 Hortonworks 的构建号。这个包不是社区版 HBase而是经过 HDP 集成测试、与 Ambari 2.7.5 的 stack 定义严格对齐的发行版。适合谁正在做 HDP 集群离线部署、组件修复、版本对齐的运维和平台工程师。如果你只是想在单机上跑个 HBase 玩玩这个包反而偏重后面我会说清楚边界。2. 拆包前先搞懂目录结构HDP 版 HBase 和社区版差在哪2.1 解压后你会看到什么拿到 tarball 后先别急着往/usr/hdp下面塞。找个临时目录解开看清楚它的内部布局mkdir -p /tmp/hbase-inspect tar -xzf hbase-2.0.2.3.1.4.0-315-bin.tar.gz -C /tmp/hbase-inspect ls -la /tmp/hbase-inspect/解压后通常得到一个hbase-2.0.2.3.1.4.0-315/目录。进去之后核心子目录包括bin/、conf/、lib/、lib/client-facing-thirdparty/、hbase-webapps/。和 Apache 官方二进制包最大的区别在于lib/里塞了大量 HDP 特有的依赖 jar比如hbase-hadoop-compat、hadoop-auth的特定版本以及 Hortonworks 打的 patch 包。这些 jar 的版本号必须和你的 HDP 集群里其他组件HDFS、ZooKeeper、YARN严格匹配否则会出现类冲突或者 RPC 不兼容。conf/目录里预置的hbase-site.xml是空模板或者只有极少量默认值真正的配置由 Ambari 在部署时动态生成并下发。这一点很关键你手动解压后直接启动用的是一套“裸配置”连hbase.rootdir都没指向 HDFS会默认写到本地文件系统。所以这个包的正确用法是配合 Ambari 的 stack 目录结构而不是独立运行。2.2 版本号里的门道为什么不能随便换包2.0.2.3.1.4.0-315这个版本串拆开看2.0.2是 HBase 上游版本3.1.4.0是 HDP 3.1.4 的 stack 版本315是构建序号。Ambari 2.7.5 的 HDP 3.1.4 stack 定义里HBase 的版本属性写死了这个构建号。如果你拿一个-314或者-316的包替换进去Ambari 在心跳检查时可能会报版本不匹配导致服务无法启动或者被标记为“未知版本”。常见做法是先查 Ambari 的 stack 定义文件确认当前集群期望的 HBase 版本号。路径通常在/var/lib/ambari-server/resources/stacks/HDP/3.1.4/services/HBASE/metainfo.xml或者对应的role_command_order.json附近。找到version标签的值和你手头的 tarball 版本号比对一致再往下走。# 在 Ambari Server 节点上查找 HBase 版本定义 grep -r hbase /var/lib/ambari-server/resources/stacks/HDP/3.1.4/services/HBASE/ | grep -i version | head -20这个命令会输出 stack 里定义的版本字符串。如果输出里包含2.0.2.3.1.4.0-315说明包对得上。如果对不上要么换包要么改 stack 定义不推荐容易引发连锁问题。2.3 和社区版 HBase 2.0.2 的关键差异很多人会想不就是 HBase 2.0.2 吗我下个 Apache 官方包行不行血泪经验是在 HDP 集群里不行。差异集中在三块。第一HDFS 客户端版本。HDP 3.1.4 用的是 Hadoop 3.1.1 的某构建版社区 HBase 2.0.2 编译时依赖的 Hadoop 版本不同hadoop-common的 API 虽然兼容但hadoop-hdfs-client的某些内部类签名有变化运行时会抛NoSuchMethodError。第二ZooKeeper 客户端。HDP 版 HBase 的lib/里带的 zookeeper jar 是 Hortonworks 重新打包的和 Apache 版有包名冲突。第三安全模块。HDP 版集成了 Knox、Ranger 的插件社区版没有。所以这个 tarball 的价值不在于“HBase 本身”而在于“和 HDP 3.1.4 严丝合缝的那套依赖”。你买的是兼容性不是功能。3. 在 Ambari 2.7.5 集群里替换或重装 HBase 的完整操作3.1 前置检查停服务、备份配置、确认权限动手之前先把 HBase 服务在 Ambari 界面上停掉或者用 API 停# 通过 Ambari API 停止 HBase 服务替换 your-ambari-host 和集群名 curl -u admin:admin -H X-Requested-By: ambari -X PUT \ -d {RequestInfo:{context:Stop HBase},Body:{ServiceInfo:{state:INSTALLED}}} \ http://your-ambari-host:8080/api/v1/clusters/YourClusterName/services/HBASE这个 API 调用会把 HBase 服务状态置为INSTALLED相当于停止所有角色。参数说明admin:admin是 Ambari 的管理员凭据YourClusterName是集群名称HBASE是服务名。执行后可以用GET请求查状态确认所有 RegionServer 和 Master 都停了。然后备份现有 HBase 的配置目录。在每台 HBase 节点上配置通常在/usr/hdp/3.1.4.0-315/hbase/conf/。直接打包备份# 在所有 HBase 节点上执行备份 tar -czf /root/hbase-conf-backup-$(date %Y%m%d).tar.gz /usr/hdp/current/hbase-client/conf/ /usr/hdp/current/hbase-master/conf/ 2/dev/null注意/usr/hdp/current/下面通常是软链接指向具体的版本目录。备份的是软链接指向的实际文件。这一步是后悔药万一新包配置不兼容可以快速回滚。3.2 替换二进制包路径、软链接与权限HDP 集群里 HBase 的安装路径遵循/usr/hdp/stack-version/hbase/结构。stack-version就是3.1.4.0-315。你需要把新解压的包内容放到这个路径下。常见做法是# 假设新包解压到了 /tmp/hbase-new/ # 先移走旧目录重命名保留方便回滚 mv /usr/hdp/3.1.4.0-315/hbase /usr/hdp/3.1.4.0-315/hbase.old.$(date %s) # 把新包内容复制过去 cp -a /tmp/hbase-inspect/hbase-2.0.2.3.1.4.0-315 /usr/hdp/3.1.4.0-315/hbase # 修正属主和权限 chown -R hbase:hadoop /usr/hdp/3.1.4.0-315/hbase chmod -R 755 /usr/hdp/3.1.4.0-315/hbase参数说明cp -a保留符号链接和权限属性hbase:hadoop是 HBase 服务运行用户和组具体名称取决于你的集群配置可以用ps -ef | grep hbase确认。chmod 755保证可执行文件有执行权限但不要给 777安全合规不允许。替换完成后检查/usr/hdp/current/hbase-client、/usr/hdp/current/hbase-master、/usr/hdp/current/hbase-regionserver这些软链接是否还指向正确的位置。Ambari 通常用current软链接来屏蔽版本差异如果软链接断了需要重建# 重建软链接示例路径按实际调整 ln -sfn /usr/hdp/3.1.4.0-315/hbase /usr/hdp/current/hbase-client ln -sfn /usr/hdp/3.1.4.0-315/hbase /usr/hdp/current/hbase-master ln -sfn /usr/hdp/3.1.4.0-315/hbase /usr/hdp/current/hbase-regionserver3.3 通过 Ambari 重新下发配置并启动二进制替换完配置不能手动改要让 Ambari 重新生成。在 Ambari 界面上进入 HBase 服务点击 “Configs”随便改一个无关紧要的参数再改回来触发配置刷新。或者用 API 强制刷新# 触发 HBase 配置重新下发 curl -u admin:admin -H X-Requested-By: ambari -X POST \ http://your-ambari-host:8080/api/v1/clusters/YourClusterName/services/HBASE?run_configurationstrue这个调用会让 Ambari 根据当前 stack 定义和用户配置重新生成hbase-site.xml、hbase-env.sh等文件并推送到所有 HBase 节点。执行后观察 Ambari 的 “Background Operations” 进度等它完成。然后启动 HBase# 通过 Ambari API 启动 HBase curl -u admin:admin -H X-Requested-By: ambari -X PUT \ -d {RequestInfo:{context:Start HBase},Body:{ServiceInfo:{state:STARTED}}} \ http://your-ambari-host:8080/api/v1/clusters/YourClusterName/services/HBASE启动后检查 HBase Master 的 Web UI默认端口 16010和 RegionServer 的 Web UI默认 16030确认所有角色都正常注册。如果 Master 卡在Initializing先看日志/var/log/hbase/hbase-hbase-master-*.log常见原因是 HDFS 的hbase.rootdir权限不对或者 ZooKeeper 连接超时。4. 避坑与排查HBase 在 Ambari 下最容易翻车的五个点4.1 Master 一直卡在 Initializing现象Ambari 显示 HBase Master 启动中Web UI 打不开日志里反复出现Master initializing或者Waiting for RegionServers to check in。原因最常见的是hbase.rootdir指向的 HDFS 路径不存在或者权限不对。HBase 启动时会尝试在 HDFS 上创建根目录如果 hbase 用户没有写权限就会一直重试。另一个原因是 ZooKeeper 里残留了旧的集群状态新 Master 启动时试图恢复旧 RegionServer 的元数据但那些 RegionServer 已经不存在了。解决先确认 HDFS 路径权限。用hdfs dfs -ls /hbase查看如果不存在手动创建并赋权hdfs dfs -mkdir /hbase hdfs dfs -chown hbase:hadoop /hbase。如果是 ZooKeeper 残留用zkCli.sh连上 ZooKeeper删除/hbase节点谨慎操作确认集群确实没有在运行的 HBase 实例。删除后重启 Master。4.2 WAL 预写日志异常导致 RegionServer 挂掉现象RegionServer 日志里出现WAL preallocation failed或者hbase wals path相关的 IOExceptionRegionServer 进程退出。原因HBase 的 WAL 默认写在hbase.rootdir下的/hbase/WALs目录。如果 HDFS 磁盘满了或者 DataNode 有坏盘WAL 写入会失败。另一个常见原因是hbase.wal.dir被配置到了本地文件系统但本地磁盘空间不足。HDP 版 HBase 默认用 HDFS 存 WAL但有些运维会为了性能改到本地 SSD这时候要确保目录存在且权限正确。解决检查 HDFS 容量hdfs dfs -df -h清理无用数据。如果是本地 WAL 目录确认hbase.wal.dir配置的路径存在并且 hbase 用户有读写权限。临时恢复可以重启 RegionServer但根治要解决存储空间问题。4.3 端口冲突16000、16010、16020、16030 被占用现象HBase 启动时报BindException: Address already in useAmbari 显示角色启动失败。原因HBase 默认端口清单里Master 用 16000RPC和 16010Web UIRegionServer 用 16020RPC和 16030Web UI。如果之前有残留的 HBase 进程没杀干净或者别的服务占用了这些端口就会冲突。解决用netstat -tlnp | grep 160或者ss -tlnp | grep 160查看占用进程。如果是残留 HBase 进程kill -9掉。如果是其他服务要么改 HBase 端口在 Ambari 的 HBase 配置里搜hbase.master.port、hbase.regionserver.port等要么停掉冲突服务。改端口后需要重启 HBase。4.4 用 Sqoop 操作 HBase 时版本不兼容现象Sqoop 从关系库导入数据到 HBase 时报ClassNotFoundException或者NoSuchMethodError提示找不到 HBase 的某些类。原因Sqoop 的 lib 目录里带的 HBase jar 版本和集群里实际运行的 HBase 版本不一致。HDP 3.1.4 里 Sqoop 和 HBase 的版本是配套的但如果你手动替换了 HBase 包Sqoop 那边的 jar 没跟着换就会出问题。解决把新 HBase 包里的lib/下相关 jar 复制到 Sqoop 的 lib 目录或者更稳妥的做法是在 Sqoop 命令里用--hbase-client-jars参数显式指定 HBase 的 jar 路径。常见做法是保持 Sqoop 和 HBase 的版本同步不要单独升级其中一个。4.5 Ambari 心跳丢失导致服务被标记为 Unknown现象替换包并重启后Ambari 界面上 HBase 服务状态变成灰色 Unknown但进程其实在运行。原因Ambari 的 Agent 通过心跳上报角色状态。如果 HBase 的 PID 文件路径变了或者 Agent 找不到 HBase 的启动脚本就无法正确上报。HDP 版 HBase 的 PID 文件通常在/var/run/hbase/下替换包后如果权限不对Agent 写不进去。解决检查/var/run/hbase/目录是否存在属主是否是 hbase。手动创建并赋权mkdir -p /var/run/hbase chown hbase:hadoop /var/run/hbase。然后重启 Ambari Agentambari-agent restart。等一两分钟状态应该恢复。5. 验证替换是否成功三个必查项和一个进阶技巧替换完包、启动服务之后别只看 Ambari 的绿色对勾。我一般会强制走一遍下面三个检查确认不是“假活”。第一查 HBase 版本。在 HBase Shell 里执行version输出应该包含2.0.2.3.1.4.0-315。如果显示的是2.0.2但没有后面的构建号说明你连到了错误的客户端或者hbase-version文件没被正确读取。# 进入 HBase Shell 查版本 hbase shell # 在 shell 里执行 version第二查 HDFS 上的根目录。用hdfs dfs -ls /hbase确认目录结构完整特别是/hbase/WALs、/hbase/oldWALs、/hbase/data这几个子目录存在。如果/hbase/data是空的说明 Master 还没完成初始化或者配置指向了错误的 HDFS 路径。第三跑一个建表、插入、查询的闭环。这是最直接的验证# 在 HBase Shell 里执行 create test_table, cf put test_table, row1, cf:name, hbase-test get test_table, row1 disable test_table drop test_table如果get能返回hbase-test说明读写链路通了。如果put卡住或者报错回头看 RegionServer 日志通常是 WAL 或者 HDFS 权限问题。进阶技巧用hbck检查集群一致性。HDP 版 HBase 自带hbase hbck命令在替换包之后跑一次看有没有INCONSISTENCY或者HOLE_IN_REGION_CHAIN之类的告警。如果有先别急着上线用hbck -fix修复注意-fix有风险生产环境先备份。我一般会在低峰期做替换替换完跑一遍hbck确认没有新增问题才把服务重新纳入监控。从那以后我每次替换 HBase 包都强制走一遍“停服务 → 备份配置 → 替换二进制 → Ambari 刷新配置 → 启动 → 版本检查 → 读写闭环 → hbck 扫描”这个流程少一步都可能半夜被叫起来。希望帮到你。本文还有配套的精品资源点击获取
返回列表