HDFS 설정

Driverless AI를 통해 Driverless AI 애플리케이션 내에서 HDFS 데이터 소스를 탐색할 수 있습니다. 이 섹션에서는 HDFS와 함께 작동할 수 있도록 Driverless AI를 구성하기 위한 지침을 제공합니다.

Note: Docker 설치 버전에 따라, Driverless AI Docker 이미지를 시작할 때는 docker run --runtime=nvidia (Docker 19.03 이후) 또는 nvidia-docker (Docker 19.03 이전) 명령을 사용하십시오. 사용 중인 Docker 버전을 확인하려면 docker version 을 사용하십시오.

구성 속성에 관한 설명

  • Hdfs_config_path (필수): HDFS 구성 폴더 경로의 위치입니다. 이 폴더에는 여러 구성 파일이 포함될 수 있습니다.

  • hdfs_auth_type (필수): HDFS 인증을 지정하십시오. 사용 가능한 값은 다음과 같습니다.

    • principal: 주 사용자로 HDFS로 인증하십시오.

    • keytab: 키탭으로 인증하십시오(권장 사항). DAI를 서비스로 실행하는 경우 Kerberos 키탭을 DAI 사용자가 소유해야 합니다.

    • keytabimpersonation: 키탭을 사용하여 가장으로 로그인하십시오.

    • noauth: 인증이 불필요합니다.

  • key_tab_path: 주 키탭 파일의 경로입니다. hdfs_auth_type='principal' 일 때 필요합니다.

  • hdfs_app_principal_user: Kerberos 애플리케이션의 주 사용자입니다. hdfs_auth_type='keytab' 일 때 필요합니다.

  • hdfs_app_jvm_args: HDFS 배포용 JVM arg. 각 arg는 공백으로 구분하십시오.

    • -Djava.security.krb5.conf

    • -Dsun.security.krb5.debug

    • -Dlog4j.configuration

  • hdfs_app_classpath: HDFS 클래스패스

  • hdfs_app_supported_schemes: 커넥터에 대한 유효한 입력 설정 여부의 확인에 사용되는 DFS 스키마 목록입니다. 예:

    hdfs_app_supported_schemes = ['hdfs://', 'maprfs://', 'custom://']
    

    다음은 해당 옵션에 대한 기본값입니다. 기본값으로 선택되지 않은 값을 목록에 추가하여 추가 스키마의 지원이 가능합니다.

    • hdfs://

    • maprfs://

    • swift://

  • hdfs_max_files_listed: 커넥터 UI에서 확인할 수 있는 최대 파일의 수를 지정합니다. 기본값은 100개의 파일입니다. 더 많은 파일을 확인하려면 기본값을 늘리십시오.

  • hdfs_init_path: HDFS 브라우저 UI에 표시되는 시작 HDFS 경로를 지정합니다.

  • enabled_file_systems: 활성화할 파일 시스템. 데이터 커넥터를 제대로 작동시키려면 이 시스템을 구성해야 합니다.

예제 1: 인증 없이 HDFS 활성화

본 예시는 HDFS 데이터 커넥터를 활성화하고 HDFS 인증을 비활성화합니다. HDFS 구성 파일은 패스하지 않습니다. 그러나 HDFS 이름 노드의 이름과 IP를 패스하여 Docker DNS를 구성합니다. 이를 통해 사용자는 이름 노드 주소를 사용하여 HDFS에 저장된 데이터를 직접 참조할 수 있습니다. 예시: hdfs://name.node/datasets/iris.csv.

 nvidia-docker run \
   --pid=host \
   --init \
   --rm \
   --shm-size=256m \
   --add-host name.node:172.16.2.186 \
   -e DRIVERLESS_AI_ENABLED_FILE_SYSTEMS="file,hdfs" \
   -e DRIVERLESS_AI_HDFS_AUTH_TYPE='noauth'  \
   -e DRIVERLESS_AI_PROCSY_PORT=8080 \
   -p 12345:12345 \
   -v /etc/passwd:/etc/passwd:ro \
   -v /etc/group:/etc/group:ro \
   -v /tmp/dtmp/:/tmp \
   -v /tmp/dlog/:/log \
   -v /tmp/dlicense/:/license \
   -v /tmp/ddata/:/data \
   -u $(id -u):$(id -g) \
   h2oai/dai-centos7-x86_64:1.10.1-cuda11.2.2.xx

예제 2: 키탭 기반 인증을 통해 HDFS 활성화

Notes:

  • Kerberos 인증 사용 시, Driverless AI 서버의 시간과 Kerberos 서버가 반드시 동기화되어야 합니다. 클라이언트와 DC 사이의 시간 차이가 5분 이상일 경우, Kerberos 오류가 발생합니다.

  • Driverless AI를 서비스로 실행 시, Kerberos 키탭은 Driverless AI 사용자에 의해 소유되어야 합니다. 아닐 경우, Driverless AI가 Keytab을 읽고 액세스할 수 없고, 단순 인증으로 대체되기 때문에 실패합니다.

해당 예제:

  • 머신의 /tmp/dtmp 폴더에 키탭을 배치하고, 아래의 설명과 같이 파일 경로를 제공하십시오.

  • keytab이 생성된 사용자를 참조할 수 있도록 환경 변수 DRIVERLESS_AI_HDFS_APP_PRINCIPAL_USER 를 구성하십시오(보통 user@realm 형식으로).

 nvidia-docker run \
     --pid=host \
     --init \
     --rm \
     --shm-size=256m \
     -e DRIVERLESS_AI_ENABLED_FILE_SYSTEMS="file,hdfs" \
     -e DRIVERLESS_AI_HDFS_AUTH_TYPE='keytab'  \
     -e DRIVERLESS_AI_KEY_TAB_PATH='tmp/<<keytabname>>' \
     -e DRIVERLESS_AI_HDFS_APP_PRINCIPAL_USER='<<user@kerberosrealm>>' \
     -e DRIVERLESS_AI_PROCSY_PORT=8080 \
     -p 12345:12345 \
     -v /etc/passwd:/etc/passwd:ro \
     -v /etc/group:/etc/group:ro \
     -v /tmp/dtmp/:/tmp \
     -v /tmp/dlog/:/log \
     -v /tmp/dlicense/:/license \
     -v /tmp/ddata/:/data \
     -u $(id -u):$(id -g) \
     h2oai/dai-centos7-x86_64:1.10.1-cuda11.2.2.xx

예제 3: 키탭 기반 가장을 통해 HDFS 활성화

Notes:

  • Kerberos 사용 시, Driverless AI 시간이 Kerberos 서버와 동기화되었는지 확인하십시오.

  • Driverless AI를 서비스로 실행 시, Kerberos 키탭은 Driverless AI 사용자에 의해 소유되어야 합니다.

  • 키탭 기반 가장이 구성된 경우, 로그인 시 대소 문자가 구분됩니다.

해당 예제:

  • 인증 유형을``keytabimpersonation`` 으로 설정합니다.

  • 머신의 /tmp/dtmp 폴더에 키탭을 배치하고, 아래의 설명과 같이 파일 경로를 제공하십시오.

  • keytab이 생성된 사용자를 참조할 수 있도록 DRIVERLESS_AI_HDFS_APP_PRINCIPAL_USER 변수를 구성하십시오.(보통 user@realm 형식으로)

 nvidia-docker run \
     --pid=host \
     --init \
     --rm \
     --shm-size=256m \
     -e DRIVERLESS_AI_ENABLED_FILE_SYSTEMS="file,hdfs" \
     -e DRIVERLESS_AI_HDFS_AUTH_TYPE='keytabimpersonation'  \
     -e DRIVERLESS_AI_KEY_TAB_PATH='/tmp/<<keytabname>>' \
     -e DRIVERLESS_AI_HDFS_APP_PRINCIPAL_USER='<<appuser@kerberosrealm>>' \
     -e DRIVERLESS_AI_PROCSY_PORT=8080 \
     -p 12345:12345 \
     -v /etc/passwd:/etc/passwd:ro \
     -v /etc/group:/etc/group:ro \
     -v /tmp/dlog/:/log \
     -v /tmp/dlicense/:/license \
     -v /tmp/ddata/:/data \
     -u $(id -u):$(id -g) \
     h2oai/dai-centos7-x86_64:1.10.1-cuda11.2.2.xx

Hadoop 플랫폼 지정

다음 예제는 H2O-3 Hadoop 이미지의 빌드 및 Driverless AI 실행 방법을 설명합니다. 본 예제에서는 CDH 6.0을 사용합니다. 다른 플랫폼을 지정하려면 H2O_TARGET 을 변경합니다.

  1. CDH 6.0용 H2O-3을 복제 및 빌드

git clone https://github.com/h2oai/h2o-3.git
cd h2o-3
./gradlew clean build -x test
export H2O_TARGET=cdh6.0
export BUILD_HADOOP=true
./gradlew clean build -x test
  1. H2O를 시작합니다.

docker run -it --rm \
  -v `pwd`:`pwd` \
  -w `pwd` \
  --entrypoint bash \
  --network=host \
  -p 8020:8020  \
  docker.h2o.ai/cdh-6-w-hive \
  -c 'sudo -E startup.sh && \
  source /envs/h2o_env_python3.8/bin/activate && \
  hadoop jar h2o-hadoop-3/h2o-cdh6.0-assembly/build/libs/h2odriver.jar -libjars "$(cat /opt/hive-jars/hive-libjars)" -n 1 -mapperXmx 2g -baseport 54445 -notify h2o_one_node -ea -disown && \
  export CLOUD_IP=localhost && \
  export CLOUD_PORT=54445 && \
  make -f scripts/jenkins/Makefile.jenkins test-hadoop-smoke; \
  bash'
  1. Driverless AI HDFS 커넥터를 실행합니다.

java -cp connectors/hdfs.jar ai.h2o.dai.connectors.HdfsConnector
  1. 예를 들어, lscp 에 대한 명령을 확인합니다.

{"coreSiteXmlPath": "/etc/hadoop/conf", "keyTabPath": "", authType: "noauth", "srcPath": "hdfs://localhost/user/jenkins/", "dstPath": "/tmp/xxx", "command": "cp", "user": "", "appUser": ""}