sh: ./xxx: not found

FROM golang:1.16.5 as builder
LABEL maintainer=YunweiGo

WORKDIR /app

COPY . .

RUN go env -w GO111MODULE=on; \
    go env -w GOPROXY=https://goproxy.cn,direct

RUN go build -o hello .

FROM alpine:latest

WORKDIR /app

COPY --from=builder /app/hello /app

ENTRYPOINT ["./hello"]

构建镜像:

docker build -t hello .
docker run hello
>> sh: ./hello: not found #输出如下错误

重新编译,进入容器进行调试

/app # ./hello
>> sh: ./hello: not found
/app # ldd hello
	/lib64/ld-linux-x86-64.so.2 (0x55a0a1807000)
	libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x55a0a1807000)
	libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x55a0a1807000)
/app # ls /lib64/ld-linux-x86-64.so.2
     /lib64/ld-linux-x86-64.so.2 No such file or directory 

我们将文件创建出来

mkdir /lib64
ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

重新执行正常运行

./hello
### 解决方案 在Hadoop启动过程中遇到`JAVA_HOME not set`、`hadoop-env.sh command not found`以及`logs directory does not exist`等问题时,这些问题通常是由于环境变量未正确配置或路径设置不一致引起的。以下是具体的解决方案: --- #### 1. 设置正确的`JAVA_HOME` 确保Java已安装并正确配置了`JAVA_HOME`环境变量。可以通过编辑系统的环境变量文件来完成这一操作。 对于Windows系统,可以修改`hadoop-env.cmd`文件,添加如下内容: ```cmd set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_XXX % 替换为实际的Java路径 ``` 对于Linux系统,可以修改`~/.bashrc`或`/etc/profile`文件,添加如下内容: ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 % 替换为实际的Java路径 export PATH=$PATH:$JAVA_HOME/bin ``` 执行以下命令使更改生效: ```bash source ~/.bashrc ``` 或者: ```bash source /etc/profile ``` 验证`JAVA_HOME`是否设置成功: ```bash echo $JAVA_HOME java -version ``` 如果以上命令返回正确的Java版本,则表示`JAVA_HOME`已正确设置[^1]。 --- #### 2. 修改`hadoop-env.sh`文件 即使设置了全局`JAVA_HOME`,有时仍需显式指定给Hadoop使用。可以在Hadoop的配置目录下到`hadoop-env.sh`文件,并对其进行修改。 定位到Hadoop安装目录下的`conf`或`etc/hadoop`文件夹,打开`hadoop-env.sh`文件,添加或更新以下行: ```bash export JAVA_HOME=/data/soft/jdk1.8 % 替换为实际的Java路径 export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop % 确保日志目录存在 ``` 保存文件后重新尝试启动Hadoop服务。 --- #### 3. 创建缺失的日志目录 如果提示`logs directory does not exist`,则需要手动创建相应的日志目录。例如: ```bash mkdir -p /data/hadoop_repo/logs/hadoop chmod 755 /data/hadoop_repo/logs/hadoop chown hadoop:hadoop /data/hadoop_repo/logs/hadoop ``` 确保日志目录权限正确,以便Hadoop能够写入日志文件。 --- #### 4. 检查`hadoop-env.sh`脚本是否存在 如果提示`hadoop-env.sh command not found`,可能是该文件不存在或路径错误。请检查以下几点: - 文件路径是否正确:默认情况下,`hadoop-env.sh`位于`$HADOOP_HOME/etc/hadoop/`目录下。 - 文件名称是否拼写正确:确保文件名为`hadoop-env.sh`而非其他变体。 如果没有发现该文件,可以从官方文档或其他正常安装实例中复制一份标准模板,并根据实际情况进行修改。 --- #### 5. 格式化NameNode 在解决问题后,重新格式化NameNode以初始化HDFS元数据: ```bash hdfs namenode -format ``` 如果此时仍然出现`Error: JAVA_HOME is incorrectly set`,请再次确认`JAVA_HOME`的值是否正确,并确保其指向有效的JDK安装路径[^1]。 --- #### 6. 启动Hadoop服务 最后,依次启动Hadoop的服务组件: ```bash start-dfs.sh start-yarn.sh ``` 观察日志输出,确认是否有任何剩余错误提示。如果一切正常,应该可以看到以下进程正在运行: ```bash jps ``` 预期输出包括但不限于以下进程: - NameNode - DataNode - SecondaryNameNode - ResourceManager - NodeManager --- ### 示例脚本 以下是一个简单的Shell脚本来批量校验多个节点上的`JAVA_HOME`设定情况: ```bash #!/bin/bash NODES=("node01" "node02" "node03") % 添加更多节点名至此数组中 for NODE in "${NODES[@]}" do echo "Checking ${NODE}..." ssh ${NODE} 'echo $JAVA_HOME && java -version' done ``` 运行该脚本即可快速获取目标服务器群组内的Java环境现状。 --- ### 总结 通过上述步骤,可以有效解决Hadoop启动时因`JAVA_HOME`未设置、`hadoop-env.sh`脚本错误以及日志目录缺失引起的问题。务必逐一排查每个环节,确保所有配置项均无误后再尝试启动服务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值