HBase(一)HBase v2.2 高可用多节点搭建

最近刚刚完成了HBase相关的一个项目,作为项目的技术负责人,完成了大部分的项目部署,特性调研工作,以此系列文章作为上一阶段工作的总结.

前言

其实目前就大多数做应用的情况来讲,我们并不需要去自己搭建一套HBase的集群,现有的很多云厂商提供的服务已经极大的方便日常的应用使用,不必像多年前一样刀耕火种似得从头开始部署这些底层的组件,大多数时候只需要开箱即用,遇到对应的问题时再去处理相关的问题即可.如果是本地开发呢,我们可以快速的使用docker去启动一个HBase,也能满足日常开发的需求.

但是对于该项目,需要对HBase的内核及实现原理进行调研梳理,就不得不从0搭建一个可以作为特性调研的集群.

搭建步骤

由于HBase依赖了HDFS,所以我们需要先搭建HDFS集群

搭建HDFS

参考文档:

搭建HDFS集群: Apache Hadoop 3.3.6 – Hadoop Cluster Setup

搭建HDFS HA集群: Apache Hadoop 3.3.6 – HDFS High Availability

节点规划

因为在大数据系统中,每台机器中搭建的组件比较多,搭建集群之前,需要做好节点规划的记录,防止忘记每个节点需要部署什么组件

节点

部署

172.36.176.238

namenode datanode

172.36.176.239

datanode

这里使用了两台机器,hdfs使用了两个datanode,因为我们主要想对hbase进行调试,所以能够实现HBase访问多个datanode的特性即可,如果是生产环境搭建的话,还需要搭建secordaryNamenode.

安装java

大数据组件集成的时候,由于组件众多,需要提起了解不同组件之间的兼容性问题,兼容性会出现在当前组件的文档,或源代码中,例如hadoop有针对jdk的兼容性文档,hbase会有针对hadoop和jdk的兼容性文档,后边文章中集成phoenix会有phoenix对于HBase的兼容性文档.

由于hadoop3.2版本只能支持1.8版本的java,所以我们需要先安装jdk.

根据机器CPU架构不同,可能需要使用不同的架构的安装包,如示例中使用的是arm架构的CPU,所以需要使用对应的版本.

在安装的过程中,因为步骤繁多,我们需要保证每一步都可验证,避免其他人按照步骤完成之后发现系统不能正常使用,增大排错难度.

# 不同的linux发行版对应的命令不同
yum install -y java-1.8.0-openjdk-devel.aarch64
which java
java -version

获取HDFS安装包

在Hadoop官网下载3.2.0版本的hadoop安装包

将hadoop安装包复制到/opt目录下

scp ./hadoop-3.2.0.tar.gz root@172.36.176.238:/opt

解压Hadoop安装包到当前目录

tar -xvf hadoop-3.2.0.tar.gz

修改集群host

在两个节点分别执行写入hosts的操作,

在自己的电脑上配置VPN使用的IP,在主机上配置内网ip,配置错误hdfs将无法启动

内网ip查看方式

使用ifconfig命令

echo  "10.208.216.211 master-node 

10.208.5.224 salve-node1 " >> /etc/hosts

修改hostname

172.36.176.238节点执行

hostnamectl set-hostname master-node

172.36.176.239节点执行

hostnamectl set-hostname salve-node1

重新ssh登录之后hostname已经修改

配置免密登录

生成rsa公钥

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

添加环境变量

echo "export HADOOP_HOME=/opt/hadoop-3.2.0" >> ~/.bash_profile
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.oe1.aarch64" >> ~/.bash_profile
source ~/.bash_profile

扩展PATH目录

echo "export PATH=${HADOOP_HOME}/bin:\$PATH" >> ~/.bash_profile
echo "export PATH=${HADOOP_HOME}/sbin:\$PATH" >> ~/.bash_profile
source ~/.bash_profile

创建HDFS数据目录

mkdir -p /data/hadoop

配置core-site.xml

修改${HADOOP_HOME}/etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://$${HOSTNAME}:9000value>
    property> <property> <name>hadoop.tmp.dirname> <value>/data/hadoopvalue> property> configuration> 

初始化namenode

hdfs namenode -format

启动namenode

hdfs --daemon start namenode

使用jps命令验证是否启动成功

如果出现错误,根据$HADOOP_HOME/logs 目录下的日志进行排查

使用netstat命令能够发现监听的端口

netstat -ltnp |grep java

启动master节点上的datanode

hdfs --daemon start datanode

至此, master node启动成功

访问HDFS页面

需要关闭防火墙(不同的linux发行版对应的命令可能不同)

# 检查防火墙状态
systemctl status firewalld
# 停止防火墙
systemctl stop firewalld 
# 永久关闭防火墙
systemctl disable firewalld.service

修改selinux 文件 

vim /etc/selinux/config
修改为: SELINUX=disabled

本机访问: http://master-node:9870/

搭建其他datanode

重复 <安装java> 到 <配置core-site.xml> 之间的所有步骤在datanode上

跳过启动namenode的步骤

启动完成datanode之后

使用jps查看进程

验证多节点datanode搭建成功

http://master-node:9870/dfshealth.html#tab-datanode

至此,可以看到一个namenode,两个datanode的HDFS集群已经搭建起来了. 

搭建高可用HBase

集群规划

节点

原有部署

新增部署

172.36.176.238

namenode datanode

RegionServer

172.36.176.239

datanode

HMaster RegionServer zookeeper

参考文档

官方文档: Apache HBase ™ Reference Guide

下载HBase源码

下载地址:Index of /dist/hbase/2.2.3

这里需要额外注意,直接下载的源码包编译出来的代码会出现HRegionServer启动报错问题, 需要使用github的hbase代码仓库进行编译

git clone git@github.com:apache/hbase.git
git checkout 2.2.3
# 使用2.2.3分支编译的代码是可以正常部署的

本地编译HBase源码为Hadoop指定版本

● 不使用本地编译的版本会导致HBase在服务端启动时报错. 

● 由于HBase需要使用指定的hadoop版本,所以需要使用指定的hadoop版本编译

● 本地编译需要使用java 8,不能使用8以上的jdk,会报 package javax.annotation does not exist 错误

mvn -DskipTests clean install && mvn -Dhadoop.profile=3.0 -Dhadoop-three.version=3.2.0 -DskipTests package assembly:single

由于本地编译需要下载大量依赖及配置,这里直接放一个编译好的网盘文件

直接下载地址: 

链接: https://pan.baidu.com/s/1QKpw11HV7oA_0KJ7335gfA 提取码: 3qfi 

获取HBase安装包

将HBase安装包copy到/opt目录下

scp ./hbase-2.2.3-bin.tar.gz root@172.36.176.238:/opt
*从本地上传到服务端之后,服务端之间使用scp使用的内网带宽会更快

解压HBase安装包

cd /opt && tar -xvf hbase-2.2.3-bin.tar.gz

添加环境变量及修改PATH

echo "export HBASE_HOME=/opt/hbase-2.2.3" >> ~/.bash_profile
source ~/.bash_profile
echo "export PATH=${HBASE_HOME}/bin:\$PATH" >> ~/.bash_profile
source ~/.bash_profile

修改hbase-env.sh

此处不能省略,ssh远程执行命令会导致之前写入~/.bash_profile失效

echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-7.oe1.aarch64" >> ${HBASE_HOME}/conf/hbase-env.sh

创建zookeeper存储目录

mkdir -p /data/zookeeper

添加HBASE配置

在${HBASE_HOME}/conf/hbase-site.xml <configuration>中添加以下内容

<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property>
<property>
  <name>hbase.rootdir</name>
  <value>hdfs://master-node:9000/hbase</value>
</property>
<property>
  <name>hbase.zookeeper.quorum</name>
<value>salve-node1:2181</value>
</property>
<property>
  <name>hbase.zookeeper.property.dataDir</name>
  <value>/data/zookeeper</value>
</property>


修改regionservers

vim ${HBASE_HOME}/conf/regionservers

# 修改regionservers
master-node
salve-node1

部署其他节点

执行<解压HBase安装包> 到 <创建zookeeper存储目录>的所有步骤

MASTER节点启动

由于之前已经配置了远程登录,并且配置了regionservers所在的服务器,只需要在master节点执行start,即可启动其他机器上对应的节点

start-hbase.sh

使用hbase quick start中的hbase shell验证部署成功

Apache HBase ™ Reference Guide

执行quick中的命令,都可以正常执行,即为安装成功.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/41397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rce题目

<?php include "flag.php"; highlight_file(__FILE__); if(isset($_GET[HECTF])) { if (; preg_replace(/[^\W]\((?R)?\)/, NULL, $_GET[HECTF])) { if (!preg_match(/pos|high|op|na|info|dec|hex|oct|pi/i, $_GET[HECTF])) { eval(…

NSSCTF刷web(2)

[NISACTF 2022]bingdundun~ bingdundun处感觉像文件包含,改upload为index 发现确实,猜测会补一个后缀.php 那常规文件包含都不行了,这里还有一个文件上传的功能,考虑phar协议 <?php$phar new Phar("test.phar"); $phar->startBuffering(); $phar->setStu…

C++入门学习(2)

思维导图&#xff1a; 一&#xff0c;缺省参数 如何理解缺省参数呢&#xff1f;简单来说&#xff0c;缺省参数就是一个会找备胎的参数&#xff01;为什么这样子说呢&#xff1f;来看一个缺省参数就知道了&#xff01;代码如下&#xff1a; #include<iostream> using std…

算法与数据结构-排序

文章目录 一、如何分析一个排序算法1.1 排序算法的执行效率1.1.1 最好情况、最坏情况、平均情况时间复杂度1.1.1.1 最好、最坏情况分析1.1.1.2 平均情况分析 1.1.2 时间复杂度的系数、常数 、低阶1.1.3 比较次数和交换&#xff08;或移动&#xff09;次数 1.2 排序算法的内存消…

Go语言之重要数组类型map(映射)类型

通过切片&#xff0c;我们可以动态灵活存储管理学生姓名、年龄等信息&#xff0c;比如 names : []string{"张三","李四","王五"} ages : []int{23,24,25} fmt.Println(names) fmt.Println(ages)但是如果我想获取张三的年龄&#xff0c;这是一个…

C# 同构字符串

205 同构字符串 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字符…

详细介绍MATLAB中的图论算法

MATLAB是一种功能强大的编程语言和环境,提供了许多用于图论算法的工具和函数。图论是研究图及其属性和关系的数学分支,广泛应用于计算机科学、网络分析、社交网络分析等领域。在MATLAB中,我们可以使用图论算法来解决各种问题,如最短路径问题、最小生成树问题、最大流问题等…

国产MCU-CW32F030开发学习-BH1750模块

国产MCU-CW32F030开发学习-BH1750模块 硬件平台 CW32_48F大学计划板CW32_IOT_EVA物联网开发评估套件BH1750数字型光照强度传感器 BH1750 BH1750是一款数字型光照强度传感器&#xff0c;能够获取周围环境的光照强度。其测量范围在0~65535 lx。lx勒克斯&#xff0c;是光照强…

【电路效应】信号处理和通信系统模型中的模拟电路效应研究(SimulinkMatlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、Simulink仿真实现 &#x1f4a5;1 概述 在信号处理和通信系统模型中&#xff0c;模拟电路效应研究是指考虑到实际电路的特性对信号进行建模和分析的过程。模拟电路效应…

Kubernetes—集群故障排查

一、用 Kubectl 调试 Kubernetes 节点 准备开始 你必须拥有一个 Kubernetes 的集群&#xff0c;同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 你的 Kubernetes 服务器版本必须不低于版本 1.2. 要获知版…

C#基础--委托

C#基础–委托 C#基础–委托 简单说它就是一个能把方法当参数传递的对象&#xff0c;而且还知道怎么调用这个方法&#xff0c;同时也是粒度更小的“接口”&#xff08;约束了指向方法的签名&#xff09; 一、什么是委托&#xff0c;委托的本质是什么&#xff1f; 跟方法有点类似…

云迁移第二波热潮来袭,你准备好了吗?

最近&#xff0c;云迁移再次被频繁提及&#xff0c;企业对云迁移的需求量有回升趋势&#xff0c;究其根本&#xff0c;主要有以下原因&#xff1a; 企业数字化进程加速&#xff0c;本地上云需求强劲 根据《2021中国企业上云指数洞察报告》&#xff0c;我国实体经济上云渗透率…

深入理解Java虚拟机(二)Java内存区域与内存溢出异常

一、前言 对于Java程序员来说&#xff0c;在虚拟机自动内存管理机制的帮助下&#xff0c;不再需要为每一个new操作去写配对的delete/free代码&#xff0c;不容易出现内存泄漏和内存溢出问题&#xff0c;看起来由虚拟机管理内存一切都很美好。不过&#xff0c;也正是因为Java程序…

kafka接收外部接口的数据,并实现转发

目录 一、什么是kafka 二、kafka接收外部接口数据 三、kafka收到数据后转发 四、kafka总结 一、什么是kafka Kafka是一种分布式流式处理平台&#xff0c;最初由LinkedIn开发。它设计用于高吞吐量、低延迟的数据处理&#xff0c;能够处理大规模的实时数据流。Kafka采用发布…

关系型数据库设计规则

目录 1.1 表、记录、字段 1.2 表的关联关系 1.2.1 一对一关联&#xff08;one-to-one&#xff09; 1.2.2 一对多关系&#xff08;one-to-many&#xff09; 1.2.3 多对多&#xff08;many-to-many&#xff09; 1.2.4 自我引用&#xff08;Self reference&#xff09; 关系…

用Python采用Modbus-Tcp的方式读取485电子水尺数据

README.TXT 2023/6/15 V1.0 实现了单个点位数据通信、数据解析、数据存储 2023/6/17 V2.0 实现了多个点位数据通信、数据解析、数据存储 2023/6/19 V2.1 完善log存储&#xff0c;仅保留近3天的log记录&#xff0c;避免不必要的存储&#xff1b;限制log大小&#xff0c;2MB。架…

基于Redisson的Redis结合布隆过滤器使用

一、场景 缓存穿透问题 一般情况下&#xff0c;先查询Redis缓存&#xff0c;如果Redis中没有&#xff0c;再查询MySQL。当某一时刻访问redis的大量key都在redis中不存在时&#xff0c;所有查询都要访问数据库&#xff0c;造成数据库压力顿时上升&#xff0c;这就是缓存穿透。…

成为一个年薪30W+的DFT工程师是一种什么体验?

一直以来&#xff0c;DFT都是数字IC设计行业中相对神秘的一个岗位。 你说他重要吧&#xff0c;并不是所有芯片设计公司都有这个岗位&#xff0c;你说他不重要吧&#xff0c;但凡芯片产品达到一定规模后&#xff0c;就必须设置DFT部门。 一、什么是DFT&#xff1f; DFT&#x…

【分布式应用】ceph分布式存储

目录 一、存储基础1.1单机存储设备1.2单机存储的问题1.3分布式存储的类型 二、Ceph简介2.1Ceph 优势2.2Ceph 架构2.3Ceph核心组件OSD&#xff08;Object Storage Daemon&#xff0c;守护进程 ceph-osd&#xff09;PG&#xff08;Placement Group 归置组&#xff09;PoolMonitor…

SpringBoot错误: 找不到或无法加载主类

1.一般出现这种情况都是配置文件application.properties出现的问题 2.可以尝试 maven clean install 以及rebuild project 3.删除项目里.idea文件 重新导入至IDEA编辑器 选择Maven项目 配置好maven.xml 后重新导入