

dockerコンテナ上にhadoopを実装しようとしています。

ディレクトリ構成としては以下のようにしています。

[code]

    /tmp/hadoop-3.3.5.tar.gz
    /tmp/base/Dockerfile
    
[/code]

実行コマンドは以下です。/tmpにいる状態で実行。

[code]

    docker build -t test-hadoop ./base
    
[/code]

エラーは以下です。

[code]

    failed to solve:process"/bin/sh -c tar -zxvf /tmp/hadoop-3.3.5.tar.gz"did not complete successfully:exit code:2
    
[/code]

Dockerfileの内容です。

[code]

    FROM openjdk:8
    FROM ubuntu:22.04
    
    ENV HADOOP_VERSION 3.3.5
    ENV HADOOP_HOME=/hadoop-${HADOOP_VERSION}
    ENV HADOOP_OPTS "-Djava.library.path=${HADOOP_HOME}/lib/native"
    ENV HADOOP_PREFIX ${HADOOP_HOME}
    ENV HADOOP_COMMON_HOME ${HADOOP_HOME}
    ENV HADOOP_HDFS_HOME ${HADOOP_HOME}
    ENV HADOOP_MAPRED_HOME ${HADOOP_HOME}
    ENV HADOOP_YARN_HOME ${HADOOP_HOME}
    ENV HADOOP_CONF_DIR ${HADOOP_HOME}/etc/hadoop
    ENV YARN_CONF_DIR $HADOOP_PREFIX/etc/hadoop
    ENV SPARK_HOME=/usr/local/lib/spark
    ENV PATH=${HADOOP_HOME}/bin:${SPARK_HOME}/bin:$PATH
    
    RUN apt-get update
    RUN apt-get install -y --no-install-recommends ssh
    RUN apt-get clean 
    RUN tar -xzvf /tmp/hadoop-3.3.5.tar.gz
    
    WORKDIR /hadoop-${HADOOP_VERSION}
    COPY config ./etc/hadoop/
    COPY start ./
    
    RUN mkdir -p /run/sshd /data
    RUN ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa 
    RUN cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 
    RUN chmod 0600 /root/.ssh/authorized_keys 
    RUN hdfs namenode -format
    
    CMD ["./start"]
    
[/code]

どうすれば上記エラーが解消されるか教えていただきたいです。また、擬似分散モードで構築しようとしていますが、configファイル等は以下のような構成にしています。  
/tmp/base/config/core-site.xml  
/tmp/base/config/yarn-site.xml  
/tmp/base/config/hadoop-env.sh  
/tmp/base/start.sh  
構成が正しくセットされているかも併せて教えていただけたら幸いです。  
よろしくお願いします。


CC BY-SA 4.0
2023-05-10T08:43:16.750
94802
2023-05-11T05:51:50.797
2023-05-11T05:51:50.797
58242
58242
question
docker hadoop
dockerコンテナ上にhadoopを実装する際のエラー解消


tar コマンドのオプション (の並び順) を確認してください。

**修正例:**

[code]

    tar -xzvf /tmp/hadoop-3.3.5.tar.gz
    
[/code]

一般的な Linux コマンドのオプションは順不同な場合が多いですが、tar コマンドで `-` 直後の一つ目に指定できるオプションは決まりがあって、ここに
`z` を指定するのは NG です。

* * *

(追記)  
対象の tar アーカイブはローカルにある状態なので、Dockerfile 中でコンテナ内に予めコピーする必要がありそうです。

[code]

    COPY hadoop-3.3.5.tar.gz /tmp
    RUN tar -xzvf /tmp/hadoop-3.3.5.tar.gz
    
[/code]

<https://docs.docker.jp/engine/userguide/eng-image/dockerfile_best-
practice.html#add-copy>


CC BY-SA 4.0
2023-05-10T09:18:42.763
94803
2023-05-10T12:37:17.007
2023-05-10T12:37:17.007
3060
3060
94802
answer


>
[code]

>     RUN tar -zxvf /tmp/hadoop-3.3.5.tar.gz
>  
[/code]

`tar`をフルパスで記述してください。

Dockerfileの内容が示されていなのでわかりませんが、それ以前の問題として`tar`は存在していますか？ 併せて`gzip`も存在していますか？


CC BY-SA 4.0
2023-05-10T09:44:05.417
94805
2023-05-10T09:44:05.417
4236
94802
answer