-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDockerfile1_5
91 lines (78 loc) · 3.77 KB
/
Dockerfile1_5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Formamos la imagen a partir de Ubuntu 20.04 LTS
FROM ubuntu:20.04
# Definimos las variables de entorno requeridas por Hadoop
ENV HADOOP_HOME "/usr/local/hadoop"
ENV HADOOP_STREAMING_HOME "$HADOOP_HOME/share/hadoop/tools/lib"
# Esta linea es necesaria sino no se puede usar el comando source
SHELL ["/bin/bash", "-c"]
# Instalacion y configuracion
RUN apt update \
# Instalamos Python 3.x, Java (OpenJDK), y algunas otras herramientas para que funcione todo
# Configuro SSH para que no arroje problemas con la conexion
&& apt install -y python3 python3-venv openjdk-8-jdk wget ssh openssh-server openssh-client net-tools nano iputils-ping \
&& echo 'ssh:ALL:allow' >> /etc/hosts.allow \
&& echo 'sshd:ALL:allow' >> /etc/hosts.allow \
&& ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa \
&& cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys \
&& echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config \
&& service ssh restart \
# Descargamos y extraemos Hadoop
&& wget http://apache.dattatec.com/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz \
# Configuramos Hadoop y despues borro el .tar.gz descargado
&& tar -xzvf hadoop-3.1.3.tar.gz \
&& mv hadoop-3.1.3 $HADOOP_HOME \
&& echo 'export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")' >> $HADOOP_HOME/etc/hadoop/hadoop-env.sh \
&& echo 'export PATH=$PATH:$HADOOP_HOME/bin' >> ~/.bashrc \
&& echo 'export PATH=$PATH:$HADOOP_HOME/sbin' >> ~/.bashrc \
&& rm hadoop-3.1.3.tar.gz
# Descargamos Apache Spark
RUN wget apache.dattatec.com/spark/spark-3.0.0/spark-3.0.0-bin-hadoop2.7.tgz \
# Descomprimimos, agregamos al path y despues eliminamos el tar de instalacion de Apache Spark
&& tar -xvzf spark-3.0.0-bin-hadoop2.7.tgz \
&& mv spark-3.0.0-bin-hadoop2.7 sbin/ \
&& echo 'export PATH=$PATH:/sbin/spark-3.0.0-bin-hadoop2.7/sbin/' >> ~/.bashrc \
&& echo 'export PATH=$PATH:/sbin/spark-3.0.0-bin-hadoop2.7/bin/' >> ~/.bashrc \
&& rm spark-3.0.0-bin-hadoop2.7.tgz
RUN mv ${HADOOP_STREAMING_HOME}/hadoop-streaming-3.1.3.jar ${HADOOP_STREAMING_HOME}/hadoop-streaming.jar \
&& source ~/.bashrc
# Algunas variables de entorno requeridas
ENV HDFS_NAMENODE_USER "root"
ENV HDFS_DATANODE_USER "root"
ENV HDFS_SECONDARYNAMENODE_USER "root"
ENV YARN_RESOURCEMANAGER_USER "root"
ENV YARN_NODEMANAGER_USER "root"
ENV PYSPARK_PYTHON "python3"
# Copio el entrypoint para reiniciar SSH
# Sino sale error 22 cannot connect
COPY ./config/entrypoint.sh .
RUN chmod 700 ./entrypoint.sh
# Reemplazo la configuracion de Hadoop para un correcto funcionamiento
WORKDIR /usr/local/hadoop/etc/hadoop
COPY ./config/core-site.xml .
COPY ./config/hdfs-site.xml .
COPY ./config/mapred-site.xml .
COPY ./config/yarn-site.xml .
# Copio el script de compilacion de Java y Python al directorio de ejecutables globales
WORKDIR /usr/bin/
COPY ./scripts/compilarJava.sh .
COPY ./scripts/ejecutarHadoopStreamingPython.sh .
COPY ./scripts/crearConexionStreaming.sh .
RUN chmod +x /usr/bin/compilarJava.sh /usr/bin/ejecutarHadoopStreamingPython.sh crearConexionStreaming.sh
# Pasamos la configuracion de Spark
WORKDIR /sbin/spark-3.0.0-bin-hadoop2.7/conf/
COPY ./config/spark-env.sh .
COPY ./config/log4j.properties .
# Pasamos el script para levantar haddop en el directorio principal
WORKDIR /home/big_data
COPY ./config/hadoopAction.sh .
# Pasamos los ejemplos al directorio principal
COPY ./ejemplos ./ejemplos
# Instalo algunas librerias extras
RUN apt-get update --fix-missing && apt-get install -y netcat software-properties-common build-essential cmake
RUN add-apt-repository universe
# Instalo algunas librerias de Python3
COPY ./config/requirements.txt ./requirements.txt
RUN apt-get install -y python3-pip
RUN pip3 install -r ./requirements.txt
# Inicia en el entrypoint para reiniciar SSH
ENTRYPOINT ["/entrypoint.sh"]