hadoop集群搭建系列(step01:集群搭建准备)

本文详细介绍了在Linux环境下搭建Hadoop集群的前期准备工作,包括修改主机名、配置IP、主机映射、创建hadoop用户、关闭防火墙和Selinux、设置启动级别为3、安装JDK、克隆虚拟机、时间同步和SSH免密登录等关键步骤,适用于不同Linux技能水平的读者。

本系列文章,通用性较强。

不管略懂linux命令的,或者是忘记hadoop搭建细节的,都可以参考本文章。

环境准备:

电脑系统:Windows10

vmware虚拟机:

    操作系统:CentOS6.7

    linux用户:root用户

    JDK:jdk8.0,linux、windows系统JDK

 

1、修改各服务器的主机名

vi /etc/sysconfig/network

按一下i(进入编辑模式),然后写完按esc(进入命令模式),输入:wq(保存并退出)即可!


2、配置各服务器的IP(本文中相对最难)

Linux 服务器的 IP 修改方式有三种:1.桌面版,2.命令行,3.安装系统时。

命令行式修改IP    这位作者写的很详细。

 

我的IP修改为了192.168.110.111

当然,我们在修改IP之前还需要在VMware上进行这些操作:

1)点击编辑-->虚拟网络编辑器

2)会弹出下面的框。

3)再弹(查看windows的IP方法:win+R-->cmd-->ipconfig)


3、配置各服务器的主机映射

vi /etc/hosts

192.168.110.111   hadoop01
192.168.110.112   hadoop02
192.168.110.113   hadoop03
192.168.110.114   hadoop04


4、添加hadoop用户,并且添加sudoer权限

vim /etc/sudoers

找到 root ALL=(ALL) ALL 这一行    (可以在命令行模式中输入      :/ALL=     )能直接找到。

然后在他下面添加一行:

hadoop  ALL=(ALL)       ALL

如下图:

保存,退出!


5、关闭防火墙/关闭selinux

防火墙操作相关:

查看防火墙状态:service iptables status

关闭防火墙:service iptables stop

开启防火墙:service iptables start

重启防火墙:service iptables restart

关闭防火墙开机启动:chkconfig iptables off

开启防火墙开机启动:chkconfig iptables on

关闭防火墙自启动:

chkconfig iptables off

关闭 Selinux:

vim /etc/selinux/config

配置文件中的 SELINUX=disabled


6、更改系统启动级别为3

vim /etc/inittab

 按大写的G-->i-->id后面改为3(下次进入以后就没有图形化界面了(玩集群建议改为3),如果实在想要图形界面可以不改)


7、安装JDK

参见linuxJDK安装。最后的部分是关于linux安装JDK的,图文并茂的。

 

8.克隆虚拟机

1)在vmware上,先单击一下hadoop02

2)点击下一步

3)点击下一步

4)点击完成,静静等待……

5)克隆完成。接下来启动hadoop02/03/04

 

1)修改主机名称

vim /etc/sysconfig/network

2)修改硬件地址(网卡)

vim /etc/udev/rules.d/70-persistent-net.rules

删除eth0对应的网卡信息,修改eth1的名称为eth0
3)修改Ip地址

vim /etc/sysconfig/network-scripts/ifcfg-eth0

IPADDR修改为你想要的同网段的IP,例如我克隆出来的两台分别修改为:

192.168.110.113

192.168.110.114
UUID和HWADDR对应的信息删除。如:

保存退出,重启机器即可。

如果还需要更详细的过程和理解原理,请点这里:这里有更详细的过程,包括复制虚拟机文件

 

8、三台服务器做时间同步

ntpdate pool.ntp.org

可以在三台虚拟机一起设置下面的定时任务: 意思为:每十分钟执行一次,并将日志文件放到回收站中。

因为虚拟机中时间总是不对,免去手动更改时间的烦恼,适合强迫症患者,哈哈。。。

crontab -e
*/10 * * * * /usr/sbin/ntpdate hadoop01 >> /dev/null


9、三台服务器配置SSH 

注意:以下操作请到普通用户下执行

1)在/home/hadoop/.ssh 目录下生成公钥文件:

ssh-keygen

 然后按三下回车。出来类似下图的即可。

2)建立 hadoop01 到 hadoop02 的免密登录:

ssh-copy-id hadoop02

然后输入yes-->输入密码。 

分别在三台机器,每一台执行一次ssh-keygen。

然后到每一台机器分别执行ssh-copy-id hadoop01 / 02 / 03三个。

即可实现三台机器相互免密登录。

验证免密登录:

ssh hadoop02

退出ssh登录:

exit

 

至此------恭喜你啦。

集群搭建的基础工作----完成。

当启动 Hadoop 集群后,**DataNode 没有起来**是一个非常常见的问题,尤其是在初次搭建或重新格式化 NameNode 后。下面我们将从 **根本原因、排查步骤、解决方案到验证方法** 进行系统性分析,并提供可直接执行的代码和配置建议。 --- ### ✅ 一、典型现象 - 执行 `jps` 命令看不到 `DataNode` 进程 - HDFS Web UI(`http://<namenode>:9870`)中看不到该节点 - 日志报错:`Incompatible clusterID`、`Cannot bind address`、`shutdown` 等关键词 --- ### ✅ 二、完整排查流程与解决方案 #### 🔍 步骤1:确认是否真的没启动 ```bash # 查看当前 Java 进程 jps # 正常应看到(在 DataNode 节点上): # DataNode # NodeManager(如果是 YARN 节点) ``` 👉 如果没有 `DataNode`,说明未启动或启动失败。 --- #### 🔍 步骤2:查看 DataNode 日志定位错误 日志路径一般为: ```bash $HADOOP_HOME/logs/hadoop-*-datanode-*.log ``` 使用命令查看最近错误: ```bash tail -n 200 $HADOOP_HOME/logs/hadoop-*-datanode-*.log | grep -i "error\|exception\|fatal" ``` 重点关注以下几类常见错误: --- ## 🚨 常见原因及解决方案 --- ### ❌ 原因1:NameNode 格式化过,但 DataNode 的 clusterID 不匹配(最常见) > **错误日志示例**: ``` FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> java.io.IOException: Incompatible clusterIDs in /data/hadoop/dfs/data: namenode clusterID = CID-xxx; datanode clusterID = CID-yyy ``` 📌 **原因**:你执行了 `hdfs namenode -format`,生成了一个新的 `clusterID`,但 DataNode 目录里还保留着旧的元数据信息,导致不兼容。 🔧 **解决方法**: ```bash # 1. 停止集群 stop-dfs.sh # 2. 删除 DataNode 的数据目录(根据 hdfs-site.xml 中 dfs.datanode.data.dir 配置) rm -rf /data/hadoop/dfs/data # 替换为你自己的路径 # 3. 重新创建目录并赋权 mkdir -p /data/hadoop/dfs/data chown -R hadoop:hadoop /data/hadoop/dfs/data chmod -R 755 /data/hadoop/dfs/data # 4. 重启集群 start-dfs.sh ``` ✅ 注意:只要 format 过 NameNode,所有 DataNode 的数据目录都必须清空! --- ### ❌ 原因2:DataNode 数据目录权限不足 > **错误日志**: ``` Permission denied: user=root, access=WRITE ``` 🔧 **解决方案**: 确保运行 Hadoop 的用户对数据目录有读写权限: ```bash sudo chown -R hadoop:hadoop /data/hadoop/dfs/data sudo chmod -R 755 /data/hadoop/dfs/data ``` 并在 `$HADOOP_CONF_DIR/hdfs-site.xml` 中确认配置正确: ```xml <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/dfs/data</value> </property> ``` --- ### ❌ 原因3:防火墙阻止通信或端口被占用 DataNode 使用的关键端口: | 端口 | 协议 | 用途 | |------|------|------| | 50010 | TCP | DataNode 数据传输 | | 50020 | TCP | DataNode IPC/RPC 通信 | | 50075 | HTTP | DataNode Web UI | 🔍 检查端口是否被占用: ```bash lsof -i :50010 netstat -tulnp | grep :50010 ``` 关闭防火墙(测试环境): ```bash # CentOS/RHEL sudo systemctl stop firewalld sudo systemctl disable firewalld # 或开放特定端口 sudo firewall-cmd --permanent --add-port=50010/tcp sudo firewall-cmd --reload ``` --- ### ❌ 原因4:hostname 或 `/etc/hosts` 配置错误 Hadoop 依赖主机名进行节点间通信。 ✅ 检查 `/etc/hosts` 是否配置正确: ```bash # 在每台机器上添加 192.168.1.10 namenode 192.168.1.11 datanode1 192.168.1.12 datanode2 ``` 检查本机 hostname: ```bash hostname # 应输出 datanode1 cat /etc/hostname ``` 如果修改了 hostname,需重启或执行: ```bash hostname datanode1 ``` --- ### ❌ 原因5:NameNode 没有启动或网络不通 DataNode 启动时需要向 NameNode 注册。如果 NameNode 没起或网络不通,注册失败。 ✅ 检查 NameNode 是否运行: ```bash # 在 NameNode 节点执行 jps # 应看到 NameNode ``` 访问 Web 页面: ``` http://namenode-ip:9870 ``` 测试网络连通性: ```bash ping namenode telnet namenode 9870 ``` --- ### ❌ 原因6:Java 环境异常或内存不足 > **错误日志**: ``` Could not reserve enough space for object heap ``` 🔧 修改 `$HADOOP_CONF_DIR/hadoop-env.sh`: ```bash export HADOOP_HEAPSIZE=1024 # 设置堆大小为 1GB,避免过大 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 确保 JAVA_HOME 正确 ``` --- ### ❌ 原因7:多次 format 导致元数据混乱(深层问题) 即使删除 data 目录,有时 metadata 缓存仍残留。 ✅ 彻底清理整个 HDFS 元数据: ```bash # 清理 NameNode 元数据目录 rm -rf /data/hadoop/dfs/name/* # 清理所有 DataNode 数据目录 rm -rf /data/hadoop/dfs/data/* ``` 然后重新 format 并启动: ```bash hdfs namenode -format start-dfs.sh ``` --- ## ✅ 三、完整启动流程(推荐) ```bash # Step 1: 清理元数据(仅首次或调试) rm -rf /data/hadoop/dfs/name/* rm -rf /data/hadoop/dfs/data/* # Step 2: 格式化 NameNode hdfs namenode -format # Step 3: 启动 DFS start-dfs.sh # Step 4: 检查各节点 jps jps # 确认出现 DataNode ``` --- ## ✅ 四、验证 DataNode 是否成功加入 ### 方法1:使用命令行查看报告 ```bash hdfs dfsadmin -report ``` 输出中应包含你的 DataNode IP 和存储信息。 ### 方法2:访问 HDFS Web UI 打开浏览器: ``` http://<namenode-host>:9870 → 左侧点击 "Datanodes" → 查看是否有新节点上线 ``` ### 方法3:检查日志是否正常注册 ```bash tail $HADOOP_HOME/logs/hadoop-*-datanode-*.log | grep "register" ``` 正常输出: ``` Registration succeeded by connecting to localhost/127.0.0.1:9867 ``` --- ## ✅ 五、预防措施总结 | 措施 | 说明 | |------|------| | ❌ 不要随意 `format` NameNode | 生产环境绝对禁止 | | ✅ 使用固定数据目录 | 避免用 `/tmp`(重启清除) | | ✅ 统一 hosts 和 hostname | 防止 DNS 解析失败 | | ✅ 定期监控日志 | 提前发现异常 | | ✅ 设置合理权限 | 防止 Permission Denied | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值