FROM ubuntu:20.04

# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ENV HADOOP_VERSION=3.3.6
ENV HIVE_VERSION=3.1.3
ENV HADOOP_HOME=/opt/hadoop
ENV HIVE_HOME=/opt/hive
ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

# 切换APT源为清华镜像以提升下载稳定性（适配 archive 与 ports 域名）
RUN sed -ri 's|http://(archive|ports)\.ubuntu\.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list || true

# 安装必要的软件包（添加重试机制，分批安装减少失败风险）
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    ca-certificates wget curl && \
    rm -rf /var/lib/apt/lists/*

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    openjdk-8-jdk \
    ssh \
    rsync \
    vim \
    net-tools \
    netcat \
    || (apt-get update && apt-get install -y --fix-missing \
    openjdk-8-jdk \
    ssh \
    rsync \
    vim \
    net-tools \
    netcat) && \
    rm -rf /var/lib/apt/lists/*

# 配置SSH免密登录
RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa && \
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && \
    chmod 0600 ~/.ssh/authorized_keys

RUN echo "Host *\n\tStrictHostKeyChecking no\n\tUserKnownHostsFile=/dev/null" >> /etc/ssh/ssh_config

# 下载并安装Hadoop（多镜像+更高超时与重试，含 curl 回退）
RUN (wget -O hadoop-${HADOOP_VERSION}.tar.gz --timeout=600 --tries=5 \
          https://downloads.apache.org/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz \
      || wget -O hadoop-${HADOOP_VERSION}.tar.gz --timeout=600 --tries=5 \
          https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz \
      || wget -O hadoop-${HADOOP_VERSION}.tar.gz --timeout=600 --tries=5 \
          https://archive.apache.org/dist/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz \
      || curl -fSL --retry 5 --retry-delay 5 -o hadoop-${HADOOP_VERSION}.tar.gz \
          https://archive.apache.org/dist/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz) && \
     tar -xzf hadoop-${HADOOP_VERSION}.tar.gz && \
     mv hadoop-${HADOOP_VERSION} ${HADOOP_HOME} && \
     rm hadoop-${HADOOP_VERSION}.tar.gz

# 下载并安装Hive（多镜像+更高超时与重试，含 curl 回退）
RUN (wget -O apache-hive-${HIVE_VERSION}-bin.tar.gz --timeout=600 --tries=5 \
          https://downloads.apache.org/hive/hive-${HIVE_VERSION}/apache-hive-${HIVE_VERSION}-bin.tar.gz \
      || wget -O apache-hive-${HIVE_VERSION}-bin.tar.gz --timeout=600 --tries=5 \
          https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-${HIVE_VERSION}/apache-hive-${HIVE_VERSION}-bin.tar.gz \
      || wget -O apache-hive-${HIVE_VERSION}-bin.tar.gz --timeout=600 --tries=5 \
          https://archive.apache.org/dist/hive/hive-${HIVE_VERSION}/apache-hive-${HIVE_VERSION}-bin.tar.gz \
      || curl -fSL --retry 5 --retry-delay 5 -o apache-hive-${HIVE_VERSION}-bin.tar.gz \
          https://archive.apache.org/dist/hive/hive-${HIVE_VERSION}/apache-hive-${HIVE_VERSION}-bin.tar.gz) && \
     tar -xzf apache-hive-${HIVE_VERSION}-bin.tar.gz && \
     mv apache-hive-${HIVE_VERSION}-bin ${HIVE_HOME} && \
     rm apache-hive-${HIVE_VERSION}-bin.tar.gz

# 下载MySQL连接驱动 (使用阿里云镜像)
RUN wget --timeout=60 --tries=3 -q https://maven.aliyun.com/repository/public/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar -P ${HIVE_HOME}/lib/ \
    || wget --timeout=60 --tries=3 -q https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar -P ${HIVE_HOME}/lib/

# 删除Hive自带的guava包，避免版本冲突
RUN rm ${HIVE_HOME}/lib/guava-*.jar && \
    cp ${HADOOP_HOME}/share/hadoop/common/lib/guava-*.jar ${HIVE_HOME}/lib/

# 创建必要的目录
RUN mkdir -p /hadoop/dfs/name /hadoop/dfs/data /tmp/hadoop-root

# 设置工作目录
WORKDIR /opt

# 暴露端口
EXPOSE 9870 9864 8088 8042 10000 10002 9083

# 复制启动脚本
COPY scripts/start-hadoop.sh /scripts/start-hadoop.sh
RUN chmod +x /scripts/start-hadoop.sh

# 启动SSH服务并执行启动脚本（使用 bash 调用以规避可执行位/换行符问题）
CMD service ssh start && bash /scripts/start-hadoop.sh && tail -f /dev/null
