Hadoop의 HDFS 시작하기

“HDFS 시작하기” 입니다. 도커 컨테이너를 이용하여 단일 시스템이지만 분산 시스템이라고 가정하고 HDFS 명령어들을 테스트 할 수 있었습니다.

해당 포스트는 KMOOC 빅데이터 프레임워크 강의 내용을 기반으로 정리한 글 입니다.

강좌: 빅데이터 프레임워크 (kmooc.kr)

KMOOC 빅데이터 프레임워크 강의에서 제공하는 git repo입니다. 다음 git 명령어로 소스 코드를 가지고 옵니다.

git clone https://github.com/CUKykkim/docker-hadoop.git

다음 명령어를 통해 hadoop 컨테이너를 수행시킵니다

docker compose up

NOTE. docker compose up 이란?

docker compose up 명령은 docker-compose.yml 파일에 정의된 모든 컨테이너를 시작하고 실행하는 데 사용됩니다

docker-compose.yml 파일에는 필요한 서비스, 있어야 하는 네트워크, 사용해야 하는 볼륨을 포함하여 모든 컨테이너에 대한 구성이 포함되어 있습니다.

다음과 같은 docker-compose.yml 파일이 있다고 가정해 보겠습니다.

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

docker compose up을 실행하면 도커가 이 파일을 읽고 컴퓨터의 포트 80을 컨테이너의 포트 80에 매핑하는 Nginx 웹 서버 컨테이너(‘웹’ 서비스)를 시작하고 루트 비밀번호가 example로 설정된 MySQL 데이터베이스 컨테이너(db 서비스)를 시작합니다.

컨테이너를 백그라운드에서 실행하려면 ‘-d’ 플래그를 추가합니다.

docker compose up -d

아래와 같은 화면에서 더 이상 진행이 되지 않는다면 탭을 추가로 하나 더 연 다음 hadoop 시스템이 컨테이너 형태로 잘 수행 중인지를 확인해줍니다.

hadoop 컨테이너가 잘 실행되었는지 확인

status가 (healthy)로 되어있다면 컨테이너가 정상적으로 실행된 상태인 것으로 볼 수 있습니다.

docker ps

HDFS 명령어 수행

이전에 수행한 하둡 컨테이너 중 Namenode 컨테이너 내부로 진입합니다.

docker exec -it namenode /bin/bash

NodeManager 컨테이너로 진입하면 프롬프트가 root@xxxx:/#로 바뀌는 것을 볼 수 있습니다.

root@786eb7eca4ce:~#

hdfs dfs 명령어로 HDFS 내에 분산 된 파일들을 마치 하나의 시스템에 있는 것 처럼 사용할 수 있게 됩니다.

아래는 hdfs dfs에서 주로 사용하는 명령어들입니다.

HDFS dfs -ls / 명령어를 통해 root 디렉토리에 어떤 파일이 있는지를 확인 할 수 있습니다.

hdfs dfs -ls /

HDFS dfs -mkdir 명령어로 디렉토리를 생성할 수 있습니다.

hdfs dfs -mkdir /make_your_dir

hdfs dfs -copyFromLocal 명령어로 로컬 시스템에 있는 파일을 하둡 파일 시스템으로 복사할 수 있습니다.

hdfs dfs -copyFromLocal /entrypoint.sh /your_hadoop_dir

hdfs dfs -cat 명령어로 하둡 파일 시스템으로 복사한 파일을 읽을 수 있습니다.

hdfs dfs -cat /entrypoint.sh /your_hadoop_dir/entrypoint.sh

hdfs dfs -rm 으로 HDFS 내의 파일들을 삭제 할 수 있습니다.

hdfs dfs -rm /cuk/entrypoint.sh

hdfs dfs -rmdir 으로 HDFS 내의 디렉토리를 삭제 할 수 있습니다.

hdfs dfs -rmdir /cuk

많이 쓰이는 dfs 명령어

hdfs dfs 밑의 하위 옵션은 우분투 명령어와 유사한 것을 알 수 있습니다.

물론 완전히 동일하지는 않습니다.

hdfs dfs 만 입력하면 generic option들이 무엇이 있는지 보여줍니다.

다음은 많이 쓰일 것 같은 내용만 테이블로 정리한 것 입니다.

옵션설명
-ls디렉토리의 내용을 나열hdfs dfs -ls /user/hadoop
-mkdir디렉터리를 만듦hdfs dfs -mkdir /user/hadoop/newdir
-rmdir빈 디렉터리를 제거hdfs dfs -rmdir /user/hadoop/emptydir
-rm파일이나 디렉터리를 제거hdfs dfs -rm /user/hadoop/file1
-rm -r디렉터리와 그 내용을 재귀적으로 제거hdfs dfs -rm -r /user/hadoop/dir
-put로컬 파일 시스템의 파일을 HDFS로 복사hdfs dfs -put localfile /user/hadoop
-copyFromLocal-put과 동일
-getHDFS에서 로컬 파일 시스템으로 파일을 복사hdfs dfs -get /user/hadoop/file1 localfile
-copyToLocal-get과 동일
-chown파일이나 디렉터리의 소유자를 변경hdfs dfs -chown user1:group1 /user/hadoop/file1
-mv파일이나 디렉터리를 이동hdfs dfs -mv /user/hadoop/file1 /user/hadoop/file2
-cp파일이나 디렉터리를 복사hdfs dfs -cp /user/hadoop/file1 /user/hadoop/file2
-du -s디렉토리의 총 디스크 사용량을 표시hdfs dfs -du -s /user/hadoop
-dfHDFS 디스크 공간 사용량 및 가용성을 표시hdfs dfs -df -h
-touchz길이가 0인 파일을 생성hdfs dfs -touchz /user/hadoop/file1
-tail파일의 마지막 1KB를 표시hdfs dfs -tail /user/hadoop/file1
-test파일이 존재하는지 테스트 (모든 데이터 노드를 뒤지는 게 아니라 HDFS 메타데이터를 쿼리하여 확인)hdfs dfs -test -e /user/hadoop/file1
-find파일과 디렉터리를 검색하는 데 사용hdfs dfs -find [expression]

find 옵션

파일 시스템에서 개인적으로 많이 쓰는 명령어라 추가로 정리해보았습니다.

HDFS의 hdfs dfs -find 옵션은 Unix find 명령과 유사하게 특정 기준에 따라 HDFS 파일 시스템 내의 파일과 디렉터리를 검색하는 데 사용됩니다

hdfs dfs -find <starting_path> [expression]

`<starting_path>`는 검색이 시작될 디렉터리 경로입니다.

[expression]은 검색 결과를 필터링하기 위한 선택적 기준 또는 조건입니다. 여기에는 이름 패턴, 크기 조건 또는 수정 시간이 포함될 수 있습니다.

expression

-name <pattern>: 지정된 패턴과 일치하는 이름을 가진 파일을 찾습니다. *와 같은 와일드카드를 사용할 수 있습니다.

-type <f|d>: 특정 유형의 항목을 찾습니다 (파일의 경우 f, 디렉토리의 경우 d)

-mtime <+|-n>: n일 이전(+n) 이전 또는 n일 이전(-n) 이전에 수정된 파일을 찾습니다.

/user/hadoop에서 모든 .txt 파일을 찾고 싶은 경우

 hdfs dfs -find /user/hadoop -name "*.txt" 

/user/hadoop 아래의 모든 디렉터리를 찾는 경우

 hdfs dfs -find /user/hadoop -type d 

/user/hadoop에서 지난 7일 동안 수정된 파일을 찾는 경우

 hdfs dfs -find /user/hadoop -mtime -7 

하둡 시스템 종료하기

기존 git을 통해 다운 받은 하둡 소스 코드가 있는 디렉토리 내로 이동하여 docker-compose down 명령어를 통해 하둡 시스템을 종료합니다.

참고한 글 & 참고하면 좋은 글

Leave a Comment

목차