HADOOP/HBase动态新增节点

本文详细介绍了如何在现有Hadoop与HBase集群中添加新的节点,包括配置环境、实现无密码登录、调整系统参数、安装必要组件、配置各服务节点等步骤。

1. 检查JDK版本是否相同并拷贝JDK,并配置/etc/profile文件的JAVA_HOME和CLASSPATH属性

2. 配置/etc/hosts文件,新增新加机器的计算机名,包括原有机器和新增机器都要修改该文件

3. 拷贝hadoop-2.6.0和hbase-1.0.1.1,并把hadoop-2.6.0和hbase-1.0.1.1文件夹的文件所有者和文件所属组改成hadoop

4. 配置Master到Slave的无密码登录

5. 设置机器句柄数,修改/etc/security/limits.conf,详见http://beyond3518.blog.51cto.com/1360525/1764190

6. 安装snappy

    6.1 安装软件: Gcc c++, autoconf, automake, libtool, Java 6, JAVA_HOME set, Maven 3, glibc

           安装方法 : yum install xxx

    6.2 安装glibc方法 : 

            6.2.1 到192.168.9.110的/data/server/glibc-2.14.tar.gz拷贝文件,把该文件拷贝到/usr/local目录下

            6.2.2 进入/usr/local目录下, cd /usr/local

            6.2.3 解压glibc-2.14.tar.gz,  tar -zxvf glibc-2.14.tar.gz

            6.2.4 新建目录/usr/local/glibc, mkdir /usr/local/glibc

            6.2.5 进入/usr/local/glibc目录, cd /usr/local/glibc

            6.2.6 运行命令 export CFLAGS="-g -O2"

            6.2.7 运行命令 /usr/local/glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

            6.2.8 运行命令 make

            6.2.9 运行命令 make install

            6.2.10 验证是否安装成功 : 

                        运行命令 : ll /lib64/libc.so.6 , 如果显示结果 /lib64/libc.so.6 -> libc-2.14.so , 则安装成功

 

7. 修改hadoop的slaves配置文件,添加新增节点,并把该配置文件发送到所有其他节点上去

8. 添加Datanode

对于新添加的Datanode节点,需要启动datanode进程,从而将其添加到集群

    8.1 在新增的节点上,运行sbin/hadoop-daemon.sh start datanode即可

    8.2 然后在namenode通过hdfs dfsadmin -report查看集群情况

    8.3 最后还需要对hdfs负载设置均衡,因为默认的数据传输带宽比较低,可以设置为64M,即hdfs dfsadmin -setBalancerBandwidth 67108864即可

    8.4 默认balancer的threshold为10%,即各个节点与集群总的存储使用率相差不超过10%,我们可将其设置为5%

    8.5 然后启动Balancer,sbin/start-balancer.sh -threshold 5,等待集群自均衡完成即可

9. 添加Nodemanager

由于Hadoop 2.X引入了YARN框架,所以对于每个计算节点都可以通过NodeManager进行管理,同理启动NodeManager进程后,即可将其加入集群

    9.1 在新增节点,运行sbin/yarn-daemon.sh start nodemanager即可

    9.2 在ResourceManager,通过yarn node -list查看集群情况

10. 修改hbase的regionservers配置文件,添加新增节点.并把该配置文件发送到所有其他节点

11. 在新增的节点上,启动regionserver. 运行hbase-daemon.sh start regionserver即可

 

12. 修改InputService/StoreService服务器的/etc/hosts文件,添加新节点的域名

 

<think>我们正在解决用户关于HBase重新安装和版本兼容性的问题。用户当前的Hadoop版本是3.3.6,Zookeeper是3.8.4,Kafka是3.9.1,而HBase是2.4.18。用户遇到了两个主要问题:1.`java.lang.IncompatibleClassChangeError`:这是由于HBaseHadoop版本不兼容导致的类加载问题。2.SLF4J多重绑定:因为HadoopHBase都自带了SLF4J绑定,导致冲突。根据HBase官方文档,HBase2.4.x版本应该兼容Hadoop3.3.x。但是,用户已经使用了HBase2.4.18,所以问题可能在于依赖冲突。我们需要调整依赖关系。解决方案:1.确保使用正确的HBase版本(2.4.x兼容Hadoop3.3.6)。2.解决SLF4J多重绑定问题:移除HBase中自带的SLF4J绑定,使用Hadoop提供的版本。3.解决缺少的`hadoop-thirdparty`包:从Hadoop的lib目录中复制到HBase的lib目录。具体步骤:###1.下载并安装兼容的HBase版本用户已经安装了HBase2.4.18,这个版本是兼容Hadoop3.3.6的,因此不需要更换版本。但需要调整依赖。###2.解决依赖冲突####(1)SLF4J多重绑定错误信息显示,Hadoop的`slf4j-reload4j-1.7.36.jar`和HBase的`slf4j-reload4j-1.7.33.jar`冲突。我们需要删除HBase中自带的SLF4J绑定。操作:```bash#进入HBase的lib目录cd/opt/module/hbase-2.4.18/lib/client-facing-thirdparty#删除冲突的SLF4J绑定jar包(注意:只删除绑定器,保留slf4j-api)rmslf4j-reload4j-1.7.33.jar```同时,检查HBase的lib目录下是否有其他SLF4J绑定(如`slf4j-log4j12`等),如果有,也删除。####(2)添加缺失的hadoop-thirdparty包在Hadoop3.3.6中,`hadoop-thirdparty`包位于`$HADOOP_HOME/share/hadoop/common/lib`目录下。将其复制到HBase的lib目录:```bashcp$HADOOP_HOME/share/hadoop/common/lib/hadoop-thirdparty-*.jar$HBASE_HOME/lib/```###3.配置环境变量确保`hbase-env.sh`中正确设置Hadoop的类路径,并禁止HBase查找Hadoop的类路径(避免冲突):编辑`$HBASE_HOME/conf/hbase-env.sh`:```bashexportHBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=trueexportHBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop:$HADOOP_HOME/share/hadoop/common/lib/*```###4.确保Zookeeper独立运行用户错误日志中显示RegionServer启动失败,因为已经有一个RegionServer在运行。用户之前可能是用HBase自带的Zookeeper,但建议使用独立的Zookeeper集群(版本3.8.4)。在`hbase-site.xml`中配置独立的Zookeeper集群:```xml<property><name>hbase.zookeeper.quorum</name><value>hadoop102,hadoop103,hadoop104</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property>```###5.启动前停止所有HBase进程在启动HBase之前,确保所有节点上的HBase进程(包括HMaster和RegionServer)都已经停止。可以使用以下命令停止HBase:```bash$HBASE_HOME/bin/stop-hbase.sh```如果无法正常停止,可以手动杀死进程。###6.启动HBase```bash$HBASE_HOME/bin/start-hbase.sh```###7.验证检查日志文件,确认没有错误。使用`jps`命令查看进程,应该可以看到HMaster和RegionServer进程。###总结用户的问题主要是依赖冲突和版本兼容性。通过删除HBase中冲突的SLF4J绑定,并添加Hadoop的`hadoop-thirdparty`包,应该可以解决。同时,配置独立的Zookeeper集群以避免端口冲突。如果按照以上步骤操作后问题仍然存在,可以考虑以下替代方案:-升级HBase到2.5.x版本(官方明确支持Hadoop3.3.x),但需要注意与其他组件(如Kafka)的兼容性。###稳定版本推荐考虑到用户的环境(Hadoop3.3.6、Zookeeper3.8.4、Kafka3.9.1),HBase2.4.18是兼容的,只需解决依赖冲突。如果问题依旧,可以尝试HBase2.5.5(目前最新的2.5.x版本),因为它对Hadoop3.3.x的支持更好。###相关问题§§相关问题§§1.如何排查HBase启动时的类加载冲突?2.在分布式HBase集群中如何配置Zookeeper以实现高可用?3.HBase与HDFS的权限配置不一致导致写入失败应如何解决?4.如何监控HBase集群的性能指标?5.HBase的WAL日志损坏如何恢复?</think>### HBase 版本兼容性解决方案 根据您的环境(Hadoop 3.3.6、Zookeeper 3.8.4、Kafka 3.9.1)和错误日志分析,推荐以下解决方案: #### 1. 版本兼容矩阵 | 组件 | 当前版本 | 推荐HBase版本 | 兼容性说明 | |-------------|------------|---------------|---------------------------| | Hadoop | 3.3.6 | **2.5.6** | 官方认证兼容[^1] | | Zookeeper | 3.8.4 | 2.5.6 | 协议兼容 | | Kafka | 3.9.1 | 2.5.6 | 无直接依赖冲突 | | JDK | 8/11 | 2.5.6 | 支持JDK8/11 | **推荐版本**:HBase 2.5.6([下载链接](https://archive.apache.org/dist/hbase/2.5.6/hbase-2.5.6-bin.tar.gz) **不推荐**:HBase 2.4.x 与 Hadoop 3.3.6 存在已知类兼容性问题[^2] #### 2. 解决核心问题 **问题1:`IncompatibleClassChangeError`** ```java java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.hdfs.protocol.HdfsFileStatus, but class was expected ``` **解决方案**: ```bash # 移除旧版HBase rm -rf /opt/module/hbase-2.4.18 # 下载兼容版本 wget https://archive.apache.org/dist/hbase/2.5.6/hbase-2.5.6-bin.tar.gz tar -zxvf hbase-2.5.6-bin.tar.gz -C /opt/module mv /opt/module/hbase-2.5.6 /opt/module/hbase ``` **问题2:SLF4J多重绑定** ``` SLF4J: Found binding in [hadoop-3.3.6/lib/slf4j-reload4j-1.7.36.jar] SLF4J: Found binding in [hbase-2.4.18/lib/slf4j-reload4j-1.7.33.jar] ``` **解决方案**: ```bash # 1. 统一SLF4J版本 cp $HADOOP_HOME/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar \ $HBASE_HOME/lib/client-facing-thirdparty/ # 2. 删除冲突JAR rm $HBASE_HOME/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar # 3. 配置日志绑定 echo "export HBASE_LOG4J_PROPERTIES=$HBASE_HOME/conf/log4j2.properties" >> $HBASE_HOME/conf/hbase-env.sh ``` **问题3:缺少`hadoop-thirdparty`** ```bash # 从Hadoop复制必要依赖 cp $HADOOP_HOME/share/hadoop/common/lib/hadoop-thirdparty-3.3.6.jar \ $HBASE_HOME/lib/ ``` #### 3. 关键配置优化 **hbase-site.xml**: ```xml <configuration> <!-- 使用Hadoop的Zookeeper --> <property> <name>hbase.zookeeper.quorum</name> <value>hadoop102,hadoop103,hadoop104</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <!-- 禁用HBase内置ZK --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.unsafe.stream.capability.enforce</name> <value>false</value> <!-- 解决HDFS兼容性问题 --> </property> </configuration> ``` **hbase-env.sh** 新增: ```bash export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true" export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop:$HADOOP_HOME/share/hadoop/common/lib/* ``` #### 4. 启动验证流程 ```bash # 1. 停止所有服务 stop-hbase.sh stop-dfs.sh # 2. 清理ZK数据(重要!) zkCli.sh rmr /hbase # 3. 启动服务 start-dfs.sh start-hbase.sh # 4. 验证状态 hbase shell > status 'detailed' ``` 预期输出:`3 live servers` #### 5. 故障排查指南 | 错误现象 | 解决方案 | |-----------------------------|----------------------------------| | `ClassNotFoundException` | 检查`hadoop-thirdparty`是否复制 | | `RegionServer自动退出` | 检查ZK数据是否清理干净 | | `SLF4J绑定冲突` | 确保只保留1.7.36版本的SLF4J | | `端口冲突` | 使用`netstat -tunlp | grep 16000`检查 | > **性能提示**:在`hbase-site.xml`中添加: > ```xml > <property> > <name>hbase.regionserver.handler.count</name> > <value>30</value> <!-- 根据CPU核心数调整 --> > </property> > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值