hadoop:DataXceiver error processing WRITE_BLOCK operation

datanode 宕机报错

2021-04-13 12:08:18,072 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: 192-168-72-68:50010:DataXceiver error processing WRITE_BLOCK operation  src: /192.168.72.118:19956 dst: /192.168.72.68:50010
java.io.IOException: Not ready to serve the block pool, BP-282140548-192.168.72.11-1494406423231.
	at org.apache.hadoop.hdfs.server.datanode.DataXceiver.checkAndWaitForBP(DataXceiver.java:1277)
	at org.apache.hadoop.hdfs.server.datanode.DataXceiver.checkAccess(DataXceiver.java:1285)
	at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:631)
	at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:137)
	at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:74)
	at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:253)
	at java.lang.Thread.run(Thread.java:748)

字面理解为文件操作超租期,实际上就是data stream操作过程中文件被删掉了。之前也遇到过,通常是因为Mapred多个task操作同一个文件,一个task完成后删掉文件导致。

修改
1、datanode所在的linux服务器提高文件句柄参数;
2、增加HDFS的datanode句柄参数:dfs.datanode.max.transfer.threads。

修改hdfs-site.xml

<property>
        <name>dfs.datanode.max.transfer.threads</name>           
        <value>8192</value>
    </property>
### 解决 Hadoop 中因 `HADOOP_HDFS_HOME` 配置无效导致的错误 当遇到 `ERROR: Invalid HADOOP_COMMON_HOME` 或者类似的 `Invalid HADOOP_HDFS_HOME` 错误时,通常是因为环境变量未正确设置或者路径不存在。以下是针对该问题的具体解决方案: #### 1. 确认 Hadoop 安装目录 确保 Hadoop 已经成功安装并解压到指定位置。例如,在引用中提到的 `$HOME/bigdata/hadoop-3.1.2` 路径下是否存在有效的 Hadoop 文件夹[^2]。 如果路径不一致,则需要更新实际的 Hadoop 安装路径。 #### 2. 设置正确的环境变量 在 `.bashrc` 或其他 shell 的配置文件中添加如下内容以定义必要的环境变量: ```bash export HADOOP_HOME=/path/to/your/hadoop-installation export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ``` 上述命令中的 `/path/to/your/hadoop-installation` 应替换为真实的 Hadoop 安装路径。完成修改后执行以下命令使更改生效: ```bash source ~/.bashrc ``` #### 3. 检查权限和路径有效性 确认 `${HADOOP_HOME}` 下存在合法的子目录结构以及所需的二进制文件。可以通过以下方式验证: ```bash ls ${HADOOP_HOME}/etc/hadoop/ ``` 此操作应返回一系列配置文件(如 `core-site.xml`, `hdfs-site.xml`)。如果没有找到这些文件,可能需要重新下载或修复 Hadoop 安装包[^3]。 #### 4. 同步配置至所有节点 对于分布式部署场景,需将本地配置同步到集群内的每一台机器上。可以利用 SCP 命令实现这一目标: ```bash scp $HADOOP_HOME/etc/hadoop/* nodeX:/same/path/as/local/hadoop/etc/hadoop/ ``` 其中 `nodeX` 表示远程主机名或 IP 地址;`/same/path/as/local/hadoop/etc/hadoop/` 是目标服务器上的对应存储路径。 #### 5. 初始化 NameNode 并启动服务 初始化完成后尝试通过脚本统一开启全部组件: ```bash sbin/hdfs namenode -format sbin/start-dfs.sh sbin/start-yarn.sh ``` 以上步骤能够有效处理由 `HADOOP_HDFS_HOME` 不正确定义引发的相关异常情况。 --- ### 示例代码片段 下面是一个简单的 Shell 脚本来自动化部分流程: ```bash #!/bin/bash # Define variables HADOOP_INSTALL_PATH="/opt/hadoop" NODES=("bigdata1" "bigdata2") # Set environment vars echo "Setting up env..." export HADOOP_HOME=${HADOOP_INSTALL_PATH} export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # Sync configs across nodes for NODE in "${NODES[@]}"; do echo "Syncing config to ${NODE}..." scp ${HADOOP_HOME}/etc/hadoop/* ${NODE}:${HADOOP_HOME}/etc/hadoop/ done # Start services echo "Starting DFS and YARN..." ${HADOOP_HOME}/sbin/start-dfs.sh ${HADOOP_HOME}/sbin/start-yarn.sh ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值