ejemplo acens - Saul-R/hadoop_conf_utils GitHub Wiki
Guia para la conexión al cluster con el proyecto hadoop_conf_utils
para el entorno definido por envs/acens
.
Primero hemos de tener una consola (bash / zsh) sobre la que instalar hadoop_conf_utils
. Hay disponibles estas versiónes del proyecto : Releases.
Para instalar hadoop_conf_utils, en Windows es necesario contar con Babun, o un cygwin
con los paquetes de openssh instalados( en cualquier caso Babun es la opción recomendada al venir con todos los paquetes preinstalados).
Ahora habría que instalar el hadoop_conf_utils (descomprimir el zip con la release) y desplegar el entorno de acens (install/deploy.sh acens <usuario_en_acens>
en la carpeta de hadoop_conf_utils).
Este despliegue nos instalará una serie de utilidades que harán las conexiones más sencillas
Para acceder a los servicios web del cluster tendremos que setear un proxy SOCKS y configurar el navegador para que redirija el tráfico que nos interesa por este proxy.
Para levantar un proxy que se conecte al frontend
de acens y redirija nuestras conexiónes basta, una vez instalado hadoop_conf_utils, con lanzar:
proxy_up_acens
LEVANTANDO EL PROXY EN EL PUERTO: 1298
Este comando levanta este proxy, ahorrandonos el acordarnos del comando específico, que en este caso sería algo así (esto ya no es necesario si tenemos proxy_up_acens
):
ssh -f -NC -D 127.0.0.1:${PROXY_PORT} ${ENV} > /dev/null 2>&1
El comando proxy_up_acens
nos informa del puerto en el que estará escuchando el proxy (generalmente el 1298).
Para redirigir el tráfico del navegador por el proxy sólo para ciertas URLs recomiendo el uso de FoxyProxy (tiene extensión para Chrome y Firefox).
Una vez instalada esta extensión, hacemos click en el icono de foxyProxy y marcamos la opcion "Use proxies based on their predefined patterns and priorities".
Después hacemos click en "Options":
Dentro de Options debemos completar los detalles del proxy de forma manual. La IP será la 127.0.0.1 y el puerto el 1298, a menos que el proxy_up_acens
nos indique otro.
En la pestaña de "URL patterns" configuramos las URLs para las que se aplicará el proxy. Hacemos click en "Add new pattern" y seteamos las siguientes
- Pattern Name: frontend; URL Pattern:
*frontend*
- Pattern Name: Masters ; URL Pattern:
*cdh-master*
- Pattern Name: Workers ; URL Pattern:
*cdh-worker*
- Pattern Name: NoSQL ; URL Pattern:
*nosql1*
Ejemplo patrón Frontend:
Debería quedar algo así:
Servicio | URL | Notas |
---|---|---|
HUE | http://cdh-master3:8888 | |
Cloudera Manager | http://cdh-master3:7180 | |
StaticData (Nginx) | http://frontend:81 | Document_Root: /mnt/data1/nginx/data/ |
JupyterHub | https://frontend:8000 | |
Kibana (via Proxy + authorization) | http://frontend:5601 | issues_acens #15 |
Kibana (no authorization) | http://nosql1:5601 | issues_acens #15 |
Jenkins | http://frontend:8080 | |
YARN | http://cdh-master2:8088 |
Para conectarse por ssh; teniendo hadoop_conf_utils
instalado; basta con:
ssh acens
Que no deja de ser un alias para:
ssh [email protected] -p 2222
El proyecto hadoop_conf_utils
nos instala un wrapper sobre la conexión via HTTPFS al HDFS del cluster. Para subir un archivo (de momento no permite la subida de carpetas):
httpfs_put acens <fichero> /ruta/hdfs/<fichero>
Por ejemplo para subir una carpeta (con solo un nivel de profundidad):
REMOTE_PATH=/hdfs/folder/path
LOCAL_PATH=/path/local/folder
hdfs dfs -mkdir -p $REMOTE_PATH
for file in `ls $LOCAL_PATH`; do
httpfs_put acens $LOCAL_PATH/$file $REMOTE_PATH/$file
echo "Uploaded $file"
done
Es importante especificar la ruta completa en hdfs, incluyendo el nombre que va a tener el archivo que subiremos.
La opción de subir archivos vía HUE puede ser válida para archivos pequeños (< 20 MB). La de scp al frontend + put a hdfs no está recomendada en ningún caso si se quieren subir datos desde local.
La llamada a la api de HTTPFS si no se quiere utilizar el hadoop_conf_utils
es algo similar a:
HTTPFS_URL="http://${HTTPFS_IP}:${HTTPFS_PORT}/webhdfs/v1"
curl -L --socks5 127.0.0.1:${PROXY_PORT} -X PUT -T $FILE \
${HTTPFS_URL}${HDFS_PATH}"?op=CREATE&user.name="${REMOTE_USER_NAME} \
--header "Content-Type:application/octet-stream" \
--header "Transfer-Encoding:chunked"
Para utilizar esta llamada hace falta tener un proxy SOCKS corriendo. Queda pendiente evaluar si merece la pena exponer el puerto de HTTPFS por la IP pública (89.17.217.233).
El archivo envs/acens
del proyecto hadoop_conf_utils
se ha configurado con las siguientes variables:
Campo | Valor |
---|---|
IP Pública Servidor (SSH) | ENV_IP=89.17.217.233 |
Puerto SSH | SSH_PORT=2222 |
IP Maquina con HTTPFS Gateway | HTTPFS_IP=192.168.2.2 |
Puerto servicio HTTPFS Gateway | HTTPFS_PORT=14000 |