Hadoop 파일시스템 셸

Hadoop 파일시스템 셸 (File System Shell)

FS(Filesystem) 셸은 HDFS(Hadoop Distributed File System)뿐 아니라 Hadoop이 지원하는 다른 파일시스템(Local FS, WebHDFS, S3 FS 등)과 직접 상호작용하는 셸 형태의 다양한 명령어를 제공합니다. 이 페이지에서는 FS 셸이 지원하는 각 명령어의 사용법과 옵션을 하나씩 설명합니다.

출처: File System Shell

본문

개요 (Overview)

FS 셸은 다음과 같이 실행합니다.

bin/hadoop fs <args>

모든 FS 셸 명령은 인자로 경로 URI를 받습니다. URI 형식은 scheme://authority/path 입니다. HDFS의 scheme은 hdfs, Local FS의 scheme은 file 입니다. scheme과 authority는 선택사항이며, 지정하지 않으면 설정에 지정된 기본 scheme이 사용됩니다. /parent/child 같은 HDFS 파일이나 디렉터리는 hdfs://namenodehost/parent/child 또는 (설정이 hdfs://namenodehost를 가리키도록 되어 있다면) 그냥 /parent/child로 지정할 수 있습니다.

FS 셸의 대부분의 명령은 해당 Unix 명령과 비슷하게 동작합니다. 차이점은 각 명령의 설명에 함께 기술됩니다. 오류 정보는 stderr로, 출력은 stdout으로 보내집니다.

HDFS를 사용한다면 hdfs dfs가 동의어입니다.

상대 경로를 사용할 수 있습니다. HDFS에서 현재 작업 디렉터리는 HDFS 홈 디렉터리 /user/<username>이며, 이 디렉터리는 보통 수동으로 생성해야 합니다. HDFS 홈 디렉터리는 암묵적으로 접근할 수도 있습니다. 예를 들어 HDFS 휴지통 폴더를 사용할 때 홈 디렉터리의 .Trash 디렉터리가 그렇습니다.

일반적인 셸 옵션은 Command 매뉴얼을 참고하세요.

appendToFile

Usage: hadoop fs -appendToFile [-n] <localsrc> ... <dst>

로컬 파일시스템의 단일 또는 여러 src를 대상 파일시스템에 추가(append)합니다. 또한 stdin에서 입력을 읽어 대상 파일시스템에 추가합니다.

Options

  • -n 옵션은 파일을 추가할 때 NEW_BLOCK 생성 플래그를 사용함을 의미합니다.

Example:

  • hadoop fs -appendToFile localfile /user/hadoop/hadoopfile
  • hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile
  • hadoop fs -appendToFile localfile hdfs://nn.example.com/hadoop/hadoopfile
  • hadoop fs -appendToFile - hdfs://nn.example.com/hadoop/hadoopfile — stdin에서 입력을 읽습니다.

Exit Code: 성공 시 0, 오류 시 1을 반환합니다.

cat

Usage: hadoop fs -cat [-ignoreCrc] URI [URI ...]

소스 경로를 stdout으로 복사합니다.

Options

  • -ignoreCrc 옵션은 체크섬 검증을 비활성화합니다.

Example:

  • hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
  • hadoop fs -cat file:///file3 /user/hadoop/file4

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

checksum

Usage: hadoop fs -checksum [-v] URI [URI ...]

파일(들)의 체크섬 정보를 반환합니다.

Options

  • -v 옵션은 파일(들)의 블록 크기를 표시합니다.

Example:

  • hadoop fs -checksum hdfs://nn1.example.com/file1
  • hadoop fs -checksum file:///etc/hosts
  • hadoop fs -checksum file:///etc/hosts hdfs://nn1.example.com/file1

chgrp

Usage: hadoop fs -chgrp [-R] GROUP URI [URI ...]

파일의 그룹 소속을 변경합니다. 사용자는 파일의 소유자이거나 수퍼유저여야 합니다. 추가 정보는 Permissions Guide를 참고하세요.

Options

  • -R 옵션은 디렉터리 구조를 따라 재귀적으로 변경합니다.

chmod

Usage: hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]

파일의 권한을 변경합니다. -R을 사용하면 디렉터리 구조를 따라 재귀적으로 변경합니다. 사용자는 파일의 소유자이거나 수퍼유저여야 합니다. 추가 정보는 Permissions Guide를 참고하세요.

Options

  • -R 옵션은 디렉터리 구조를 따라 재귀적으로 변경합니다.

chown

Usage: hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]

파일의 소유자를 변경합니다. 사용자는 수퍼유저여야 합니다. 추가 정보는 Permissions Guide를 참고하세요.

Options

  • -R 옵션은 디렉터리 구조를 따라 재귀적으로 변경합니다.

copyFromLocal

-put 명령과 동일합니다.

copyToLocal

-get 명령과 동일합니다.

count

Usage: hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] [-s] <paths>

지정된 파일 패턴과 일치하는 경로 아래의 디렉터리, 파일, 바이트 수를 셉니다. 쿼터와 사용량을 가져옵니다. -count의 출력 컬럼은: DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME 입니다.

-u와 -q 옵션은 출력에 포함되는 컬럼을 제어합니다. -q는 쿼터와 사용량을 보여주고, -u는 쿼터만 보여주도록 출력을 제한합니다.

-count -q의 출력 컬럼은: QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME 입니다.

-count -u의 출력 컬럼은: QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, PATHNAME 입니다.

-t 옵션은 각 스토리지 타입별 쿼터와 사용량을 보여줍니다. -u 또는 -q 옵션이 주어지지 않으면 -t 옵션은 무시됩니다. -t 옵션에서 사용할 수 있는 파라미터는(파라미터 자체를 제외하고 대소문자 구분 없음): "", "all", "ram_disk", "ssd", "disk", "archive" 입니다.

-h 옵션은 크기를 사람이 읽기 쉬운 형식으로 보여줍니다.

-v 옵션은 헤더 라인을 표시합니다.

-x 옵션은 결과 계산에서 스냅샷을 제외합니다. -x 옵션이 없으면(기본값) 결과는 항상 지정된 경로 아래의 모든 스냅샷을 포함한 모든 INode에서 계산됩니다. -u 또는 -q 옵션이 주어지면 -x 옵션은 무시됩니다.

-e 옵션은 각 파일의 이레이저 코딩 정책을 보여줍니다.

-count -e의 출력 컬럼은: DIR_COUNT, FILE_COUNT, CONTENT_SIZE, ERASURECODING_POLICY, PATHNAME 입니다.

ERASURECODING_POLICY는 해당 파일의 정책 이름입니다. 해당 파일에 이레이저 코딩 정책이 설정되어 있으면 정책의 이름을 반환합니다. 그렇지 않으면 복제 스토리지 전략을 사용한다는 뜻인 "Replicated"를 반환합니다.

-s 옵션은 각 디렉터리의 스냅샷 개수를 보여줍니다.

Example:

  • hadoop fs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
  • hadoop fs -count -q hdfs://nn1.example.com/file1
  • hadoop fs -count -q -h hdfs://nn1.example.com/file1
  • hadoop fs -count -q -h -v hdfs://nn1.example.com/file1
  • hadoop fs -count -u hdfs://nn1.example.com/file1
  • hadoop fs -count -u -h hdfs://nn1.example.com/file1
  • hadoop fs -count -u -h -v hdfs://nn1.example.com/file1
  • hadoop fs -count -e hdfs://nn1.example.com/file1
  • hadoop fs -count -s hdfs://nn1.example.com/file1

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

cp

Usage: hadoop fs -cp [-f] [-p | -p[topax]] [-d] [-t <thread count>] [-q <thread pool queue size>] URI [URI ...] <dest>

파일을 소스에서 대상으로 복사합니다. 이 명령은 여러 소스를 허용하며, 그 경우 대상은 디렉터리여야 합니다.

raw.* 네임스페이스 확장 속성은 (1) 소스와 대상 파일시스템이 이를 지원하고(HDFS 전용), (2) 모든 소스와 대상 경로명이 /.reserved/raw 계층에 있을 때 보존됩니다. raw.* 네임스페이스 xattr이 보존되는지 여부는 -p(보존) 플래그와 무관합니다.

Options:

  • -f : 대상이 이미 존재하면 덮어씁니다.
  • -d : ._COPYING_ 접미사를 가진 임시 파일 생성을 건너뜁니다.
  • -p : 파일 속성 [topax](타임스탬프, 소유권, 권한, ACL, XAttr)을 보존합니다. -p가 인자 없이 지정되면 타임스탬프, 소유권, 권한을 보존합니다. -pa가 지정되면 ACL이 권한의 상위집합이므로 권한도 보존합니다. 원자 네임스페이스 확장 속성이 보존되는지 여부는 -p 플래그와 무관합니다.
  • -t <thread count> : 사용할 스레드 수, 기본값은 1입니다. 파일이 2개 이상인 디렉터리를 복사할 때 유용합니다.
  • -q <thread pool queue size> : 사용할 스레드 풀 큐 크기, 기본값은 1024입니다. 스레드 수가 1보다 클 때만 적용됩니다.

Example:

  • hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -cp -f -d /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
  • hadoop fs -cp -t 5 /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
  • hadoop fs -cp -t 10 -q 2048 /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

createSnapshot

HDFS Snapshots Guide를 참고하세요.

deleteSnapshot

HDFS Snapshots Guide를 참고하세요.

df

Usage: hadoop fs -df [-h] URI [URI ...]

빈 공간(free space)을 표시합니다.

Options:

  • -h 옵션은 파일 크기를 "사람이 읽기 쉬운" 형식으로 표시합니다 (예: 67108864 대신 64.0m).

Example:

  • hadoop dfs -df /user/hadoop/dir1

du

Usage: hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]

주어진 디렉터리에 포함된 파일과 디렉터리의 크기, 또는 파일인 경우 파일의 길이를 표시합니다.

Options:

  • -s 옵션은 개별 파일 대신 파일 길이의 집계 요약을 표시합니다. -s 옵션 없이 계산은 주어진 경로에서 1단계 깊이로 수행됩니다.
  • -h 옵션은 파일 크기를 "사람이 읽기 쉬운" 형식으로 표시합니다 (예: 67108864 대신 64.0m).
  • -v 옵션은 컬럼 이름을 헤더 라인으로 표시합니다.
  • -x 옵션은 결과 계산에서 스냅샷을 제외합니다. -x 옵션이 없으면(기본값) 결과는 항상 지정된 경로 아래의 모든 스냅샷을 포함한 모든 INode에서 계산됩니다.

du는 다음 형식의 세 컬럼을 반환합니다:

size disk_space_consumed_with_all_replicas full_path_name

Example:

  • hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://nn.example.com/user/hadoop/dir1

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

dus

Usage: hadoop fs -dus <args>

파일 길이의 요약을 표시합니다.

Note: 이 명령은 더 이상 사용되지 않습니다(deprecated). 대신 hadoop fs -du -s를 사용하세요.

expunge

Usage: hadoop fs -expunge [-immediate] [-fs <path>]

휴지통 디렉터리에서 보존 임계값(retention threshold)보다 오래된 체크포인트의 파일을 영구 삭제하고 새 체크포인트를 만듭니다.

체크포인트가 생성되면 휴지통에서 최근 삭제된 파일이 체크포인트 아래로 이동됩니다. fs.trash.interval보다 오래된 체크포인트의 파일은 다음 -expunge 명령 호출 시 영구 삭제됩니다.

파일시스템이 이 기능을 지원한다면 사용자는 fs.trash.checkpoint.interval(core-site.xml에 있음) 파라미터로 체크포인트를 주기적으로 생성·삭제하도록 설정할 수 있습니다. 이 값은 fs.trash.interval보다 작거나 같아야 합니다.

-immediate 옵션을 전달하면 현재 사용자의 휴지통에 있는 모든 파일이 fs.trash.interval 설정을 무시하고 즉시 삭제됩니다.

-fs 옵션을 전달하면 기본 파일시스템 대신 지정된 파일시스템을 expunge하며 체크포인트를 생성합니다.

예를 들어:

hadoop fs -expunge -immediate -fs s3a://landsat-pds/

HDFS의 휴지통 기능에 대한 자세한 내용은 HDFS Architecture 가이드를 참고하세요.

find

Usage: hadoop fs -find <path> ... <expression> ...

지정된 표현식과 일치하는 모든 파일을 찾고 선택된 동작을 적용합니다. 경로가 지정되지 않으면 현재 작업 디렉터리가 기본값입니다. 표현식이 지정되지 않으면 -print가 기본값입니다.

다음 기본 표현식(primary expressions)이 인식됩니다:

-name pattern -iname pattern

표준 파일시스템 globbing을 사용해 파일의 기본 이름(basename)이 패턴과 일치하면 참으로 평가됩니다. -iname을 사용하면 일치가 대소문자를 구분하지 않습니다.

-print -print0

항상 참으로 평가됩니다. 현재 경로명이 표준 출력으로 기록됩니다. -print0 표현식을 사용하면 ASCII NULL 문자가 추가됩니다.

다음 연산자가 인식됩니다:

- expression -a expression expression -and expression expression expression

두 표현식을 결합하는 논리 AND 연산자입니다. 두 자식 표현식이 모두 참이면 참을 반환합니다. 두 표현식의 병치(juxtaposition)로 암시되므로 명시적으로 지정할 필요가 없습니다. 첫 번째가 실패하면 두 번째 표현식은 적용되지 않습니다.

Example:

hadoop fs -find / -name test -print

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

get

Usage: hadoop fs -get [-ignoreCrc] [-crc] [-p] [-f] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>

파일을 로컬 파일시스템으로 복사합니다. CRC 검사를 실패한 파일은 -ignoreCrc 옵션으로 복사할 수 있습니다. 파일과 CRC를 -crc 옵션으로 복사할 수 있습니다.

Options:

  • -p : 접근·수정 시간, 소유권, 권한을 보존합니다. (권한이 파일시스템 간에 전파될 수 있다고 가정)
  • -f : 대상이 이미 존재하면 덮어씁니다.
  • -ignoreCrc : 다운로드한 파일(들)의 CRC 검사를 건너뜁니다.
  • -crc : 다운로드한 파일의 CRC 체크섬을 기록합니다.
  • -t <thread count> : 사용할 스레드 수, 기본값은 1입니다. 파일이 2개 이상인 디렉터리를 다운로드할 때 유용합니다.
  • -q <thread pool queue size> : 사용할 스레드 풀 큐 크기, 기본값은 1024입니다. 스레드 수가 1보다 클 때만 적용됩니다.

Example:

  • hadoop fs -get /user/hadoop/file localfile
  • hadoop fs -get hdfs://nn.example.com/user/hadoop/file localfile
  • hadoop fs -get -t 10 hdfs://nn.example.com/user/hadoop/dir1 localdir
  • hadoop fs -get -t 10 -q 2048 hdfs://nn.example.com/user/hadoop/dir* localdir

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

getfacl

Usage: hadoop fs -getfacl [-R] <path>

파일과 디렉터리의 ACL(Access Control List)을 표시합니다. 디렉터리에 기본 ACL이 있으면 getfacl은 기본 ACL도 표시합니다.

Options:

  • -R: 모든 파일과 디렉터리의 ACL을 재귀적으로 나열합니다.
  • path: 나열할 파일 또는 디렉터리.

Examples:

  • hadoop fs -getfacl /file
  • hadoop fs -getfacl -R /dir

Exit Code: 성공 시 0, 오류 시 0이 아닌 값을 반환합니다.

getfattr

Usage: hadoop fs -getfattr [-R] -n name | -d [-e en] <path>

파일 또는 디렉터리의 확장 속성 이름과 값(있는 경우)을 표시합니다.

Options:

  • -R: 모든 파일과 디렉터리의 속성을 재귀적으로 나열합니다.
  • -n name: 지정된 확장 속성 값을 덤프합니다.
  • -d: 경로명과 관련된 모든 확장 속성 값을 덤프합니다.
  • -e encoding: 값을 검색한 후 인코딩합니다. 유효한 인코딩은 "text", "hex", "base64" 입니다. 텍스트 문자열로 인코딩된 값은 큰따옴표(")로 묶이고, 16진수와 base64로 인코딩된 값은 각각 0x와 0s 접두사가 붙습니다.
  • path: 파일 또는 디렉터리.

Examples:

  • hadoop fs -getfattr -d /file
  • hadoop fs -getfattr -R -n user.myAttr /dir

Exit Code: 성공 시 0, 오류 시 0이 아닌 값을 반환합니다.

getmerge

Usage: hadoop fs -getmerge [-nl] [-skip-empty-file] <src> <localdst>

소스 디렉터리와 대상 파일을 입력으로 받아 src의 파일을 대상 로컬 파일로 연결(concatenate)합니다. 선택적으로 -nl을 설정해 각 파일 끝에 새 줄 문자(LF)를 추가할 수 있습니다. -skip-empty-file은 빈 파일의 경우 원치 않는 새 줄 문자를 피하는 데 사용할 수 있습니다.

Examples:

  • hadoop fs -getmerge -nl /src /opt/output.txt
  • hadoop fs -getmerge -nl /src/file1.txt /src/file2.txt /output.txt
  • hadoop fs -getmerge -nl -skip-empty-file /src/file1.txt /src/file2.txt /output.txt

Exit Code: 성공 시 0, 오류 시 0이 아닌 값을 반환합니다.

Usage: hadoop fs -head URI

파일의 첫 1KB를 stdout으로 표시합니다.

Example:

  • hadoop fs -head pathname

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

help

Usage: hadoop fs -help

사용법 출력을 반환합니다.

ls

Usage: hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>

Options:

  • -C: 파일과 디렉터리의 경로만 표시합니다.
  • -d: 디렉터리를 일반 파일처럼 나열합니다.
  • -h: 파일 크기를 사람이 읽기 쉬운 형식으로 표시합니다 (예: 67108864 대신 64.0m).
  • -q: 인쇄할 수 없는 문자 대신 ?를 출력합니다.
  • -R: 만나는 하위 디렉터리를 재귀적으로 나열합니다.
  • -t: 수정 시간으로 출력을 정렬합니다 (최근 것이 먼저).
  • -S: 파일 크기로 출력을 정렬합니다.
  • -r: 정렬 순서를 뒤집습니다.
  • -u: 표시와 정렬에 수정 시간 대신 접근 시간을 사용합니다.
  • -e: 파일과 디렉터리의 이레이저 코딩 정책만 표시합니다.

파일에 대해 ls는 다음 형식으로 파일에 대한 stat을 반환합니다:

permissions number_of_replicas userid groupid filesize modification_date modification_time filename

디렉터리에 대해서는 Unix에서처럼 직접 자식 목록을 반환합니다. 디렉터리는 다음과 같이 나열됩니다:

permissions userid groupid modification_date modification_time dirname

디렉터리 안의 파일은 기본적으로 파일 이름 순으로 정렬됩니다.

Example:

  • hadoop fs -ls /user/hadoop/file1
  • hadoop fs -ls -e /ecdir

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

lsr

Usage: hadoop fs -lsr <args>

ls의 재귀 버전입니다.

Note: 이 명령은 더 이상 사용되지 않습니다. 대신 hadoop fs -ls -R을 사용하세요.

mkdir

Usage: `hadoop fs -mkdir [-p] >

경로 URI를 인자로 받아 디렉터리를 생성합니다.

Options:

  • -p 옵션은 Unix mkdir -p와 비슷하게 경로를 따라 상위 디렉터리를 생성합니다.

Example:

  • hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
  • hadoop fs -mkdir hdfs://nn1.example.com/user/hadoop/dir hdfs://nn2.example.com/user/hadoop/dir

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

moveFromLocal

Usage: hadoop fs -moveFromLocal <localsrc> <dst>

put 명령과 비슷하지만, 복사된 후 소스 localsrc가 삭제된다는 점이 다릅니다.

moveToLocal

Usage: hadoop fs -moveToLocal [-crc] <src> <dst>

"Not implemented yet" 메시지를 표시합니다.

mv

Usage: hadoop fs -mv URI [URI ...] <dest>

파일을 소스에서 대상으로 이동합니다. 이 명령은 여러 소스를 허용하며, 그 경우 대상은 디렉터리여야 합니다. 파일시스템 간 이동은 허용되지 않습니다.

Example:

  • hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

put

Usage: hadoop fs -put [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] [ - | <localsrc> ...] <dst>

로컬 파일시스템의 단일 또는 여러 src를 대상 파일시스템으로 복사합니다. 또한 소스가 "-"로 설정되면 stdin에서 입력을 읽어 대상 파일시스템에 기록합니다.

파일이 이미 존재하면 -f 플래그가 주어지지 않는 한 복사는 실패합니다.

Options:

  • -p : 접근·수정 시간, 소유권, 권한을 보존합니다. (권한이 파일시스템 간에 전파될 수 있다고 가정)
  • -f : 대상이 이미 존재하면 덮어씁니다.
  • -l : DataNode가 파일을 디스크에 지연(lazily) 기록하도록 허용하며, 복제 계수를 1로 강제합니다. 이 플래그는 내구성(durability)을 낮춥니다. 주의해서 사용하세요.
  • -d : ._COPYING_ 접미사를 가진 임시 파일 생성을 건너뜁니다.
  • -t <thread count> : 사용할 스레드 수, 기본값은 1입니다. 파일이 2개 이상인 디렉터리를 업로드할 때 유용합니다.
  • -q <thread pool queue size> : 사용할 스레드 풀 큐 크기, 기본값은 1024입니다. 스레드 수가 1보다 클 때만 적용됩니다.

Examples:

  • hadoop fs -put localfile /user/hadoop/hadoopfile
  • hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
  • hadoop fs -put -d localfile hdfs://nn.example.com/hadoop/hadoopfile
  • hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile — stdin에서 입력을 읽습니다.
  • hadoop fs -put -t 5 localdir hdfs://nn.example.com/hadoop/hadoopdir
  • hadoop fs -put -t 10 -q 2048 localdir1 localdir2 hdfs://nn.example.com/hadoop/hadoopdir

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

renameSnapshot

HDFS Snapshots Guide를 참고하세요.

rm

Usage: hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]

인자로 지정된 파일을 삭제합니다.

휴지통이 활성화되어 있으면 파일시스템은 삭제된 파일을 휴지통 디렉터리(FileSystem#getTrashRoot로 지정)로 이동합니다.

현재 휴지통 기능은 기본적으로 비활성화되어 있습니다. 사용자는 fs.trash.interval 파라미터(core-site.xml에 있음)에 0보다 큰 값을 설정해 휴지통을 활성화할 수 있습니다.

휴지통의 파일 삭제에 대해서는 expunge를 참고하세요.

Options:

  • -f 옵션은 파일이 존재하지 않아도 진단 메시지를 표시하지 않거나 오류를 반영하도록 종료 상태를 변경하지 않습니다.
  • -R 옵션은 디렉터리와 그 아래 내용을 재귀적으로 삭제합니다.
  • -r 옵션은 -R과 동일합니다.
  • -skipTrash 옵션은 휴지통이 활성화된 경우에도 휴지통을 우회해 지정된 파일(들)을 즉시 삭제합니다. 이는 쿼터를 초과한 디렉터리에서 파일을 삭제해야 할 때 유용할 수 있습니다.
  • -safely 옵션은 삭제할 파일 총 수가 hadoop.shell.delete.limit.num.files(core-site.xml, 기본값: 100)보다 큰 디렉터리를 삭제하기 전에 안전 확인을 요구합니다. -skipTrash와 함께 사용해 큰 디렉터리의 실수로 인한 삭제를 방지할 수 있습니다. 확인 전에 삭제할 파일 수를 세기 위해 큰 디렉터리를 재귀적으로 훑는 동안 지연이 예상됩니다.

Example:

  • hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

rmdir

Usage: hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]

디렉터리를 삭제합니다.

Options:

  • --ignore-fail-on-non-empty: 와일드카드를 사용할 때 디렉터리에 여전히 파일이 있어도 실패하지 않습니다.

Example:

  • hadoop fs -rmdir /user/hadoop/emptydir

rmr

Usage: hadoop fs -rmr [-skipTrash] URI [URI ...]

delete의 재귀 버전입니다.

Note: 이 명령은 더 이상 사용되지 않습니다. 대신 hadoop fs -rm -r을 사용하세요.

setfacl

Usage: hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]

파일과 디렉터리의 ACL(Access Control List)을 설정합니다.

Options:

  • -b: 기본 ACL 항목을 제외한 모든 항목을 제거합니다. 권한 비트와의 호환성을 위해 user, group, others 항목은 유지됩니다.
  • -k: 기본 ACL을 제거합니다.
  • -R: 모든 파일과 디렉터리에 작업을 재귀적으로 적용합니다.
  • -m: ACL을 수정합니다. 새 항목은 ACL에 추가되고 기존 항목은 유지됩니다.
  • -x: 지정된 ACL 항목을 제거합니다. 다른 ACL 항목은 유지됩니다.
  • --set: 모든 기존 항목을 버리고 ACL을 완전히 교체합니다. acl_spec은 권한 비트와의 호환성을 위해 user, group, others 항목을 포함해야 합니다. ACL spec에 접근(access) 항목만 있으면 기존 기본(default) 항목이 유지됩니다. ACL spec에 기본 항목만 있으면 기존 접근 항목이 유지됩니다. ACL spec에 접근과 기본 항목이 모두 있으면 둘 다 교체됩니다.
  • acl_spec: 쉼표로 구분된 ACL 항목 목록.
  • path: 수정할 파일 또는 디렉터리.

Examples:

  • hadoop fs -setfacl -m user:hadoop:rw- /file
  • hadoop fs -setfacl -x user:hadoop /file
  • hadoop fs -setfacl -b /file
  • hadoop fs -setfacl -k /dir
  • hadoop fs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /file
  • hadoop fs -setfacl -R -m user:hadoop:r-x /dir
  • hadoop fs -setfacl -m default:user:hadoop:r-x /dir

Exit Code: 성공 시 0, 오류 시 0이 아닌 값을 반환합니다.

setfattr

Usage: hadoop fs -setfattr -n name [-v value] | -x name <path>

파일 또는 디렉터리의 확장 속성 이름과 값을 설정합니다.

Options:

  • -n name: 확장 속성 이름.
  • -v value: 확장 속성 값. 값에는 세 가지 인코딩 방법이 있습니다. 인자가 큰따옴표로 묶이면 값은 따옴표 안의 문자열입니다. 인자가 0x 또는 0X로 시작하면 16진수로 취급됩니다. 인자가 0s 또는 0S로 시작하면 base64 인코딩으로 취급됩니다.
  • -x name: 확장 속성을 제거합니다.
  • path: 파일 또는 디렉터리.

Examples:

  • hadoop fs -setfattr -n user.myAttr -v myValue /file
  • hadoop fs -setfattr -n user.noValue /file
  • hadoop fs -setfattr -x user.myAttr /file

Exit Code: 성공 시 0, 오류 시 0이 아닌 값을 반환합니다.

setrep

Usage: hadoop fs -setrep [-R] [-w] <numReplicas> <path>

파일의 복제 계수를 변경합니다. path가 디렉터리이면 이 명령은 path를 루트로 하는 디렉터리 트리 아래의 모든 파일의 복제 계수를 재귀적으로 변경합니다. 이 명령을 실행할 때 EC 파일은 무시됩니다.

Options:

  • -w 플래그는 복제가 완료될 때까지 명령이 대기하도록 요청합니다. 이는 매우 오래 걸릴 수 있습니다.
  • -R 플래그는 이전 버전과의 호환성을 위해 허용됩니다. 아무 효과가 없습니다.

Example:

  • hadoop fs -setrep -w 3 /user/hadoop/dir1

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

stat

Usage: hadoop fs -stat [format] <path> ...

<path>의 파일/디렉터리에 대한 통계를 지정된 형식으로 출력합니다. 형식은 8진수(%a)와 기호(%A)의 권한, 바이트 단위 파일 크기(%b), 타입(%F), 소유자 그룹 이름(%g), 이름(%n), 블록 크기(%o), 복제(%r), 소유자 사용자 이름(%u), 접근 날짜(%x, %X), 수정 날짜(%y, %Y)를 허용합니다. %x와 %y는 UTC 날짜를 "yyyy-MM-dd HH:mm:ss"로 보여주고, %X와 %Y는 1970년 1월 1일 UTC 이후의 밀리초를 보여줍니다. 형식이 지정되지 않으면 기본적으로 %y가 사용됩니다.

Example:

  • hadoop fs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /file

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

tail

Usage: hadoop fs -tail [-f] URI

파일의 마지막 1KB를 stdout으로 표시합니다.

Options:

  • -f 옵션은 Unix에서처럼 파일이 커짐에 따라 추가된 데이터를 출력합니다.

Example:

  • hadoop fs -tail pathname

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

test

Usage: hadoop fs -test -[defswrz] URI

Options:

  • -d: 경로가 디렉터리이면 0을 반환합니다.
  • -e: 경로가 존재하면 0을 반환합니다.
  • -f: 경로가 파일이면 0을 반환합니다.
  • -s: 경로가 비어 있지 않으면 0을 반환합니다.
  • -w: 경로가 존재하고 쓰기 권한이 있으면 0을 반환합니다.
  • -r: 경로가 존재하고 읽기 권한이 있으면 0을 반환합니다.
  • -z: 파일 길이가 0이면 0을 반환합니다.

Example:

  • hadoop fs -test -e filename

text

Usage: hadoop fs -text <src>

소스 파일을 받아 텍스트 형식으로 출력합니다. 허용되는 형식은 zip과 TextRecordInputStream입니다.

touch

Usage: hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]

URI로 지정된 파일의 접근·수정 시간을 현재 시간으로 업데이트합니다. 파일이 존재하지 않으면 현재 시간을 타임스탬프로 하는 길이 0의 파일이 URI에 생성됩니다.

  • -a 옵션은 접근 시간만 변경합니다.
  • -m 옵션은 수정 시간만 변경합니다.
  • -t 옵션은 현재 시간 대신 타임스탬프(yyyyMMdd:HHmmss 형식)를 지정합니다.
  • -c 옵션은 파일이 존재하지 않으면 만들지 않습니다.

타임스탬프 형식은 다음과 같습니다: * yyyy 네 자리 연도 (예: 2018) * MM 연도의 두 자리 월 (예: 8월은 08) * dd 월의 두 자리 일 (예: 이달 첫째 날은 01) * HH 24시간 표기법의 두 자리 시 (예: 23은 오후 11시, 11은 오전 11시) * mm 분의 두 자리 * ss 초의 두 자리. 예: 20180809:230000은 2018년 8월 9일 오후 11시를 나타냅니다.

Example:

  • hadoop fs -touch pathname
  • hadoop fs -touch -m -t 20180809:230000 pathname
  • hadoop fs -touch -t 20180809:230000 pathname
  • hadoop fs -touch -a pathname

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

touchz

Usage: hadoop fs -touchz URI [URI ...]

길이 0의 파일을 생성합니다. 파일이 0이 아닌 길이로 존재하면 오류를 반환합니다.

Example:

  • hadoop fs -touchz pathname

Exit Code: 성공 시 0, 오류 시 -1을 반환합니다.

truncate

Usage: hadoop fs -truncate [-w] <length> <paths>

지정된 파일 패턴과 일치하는 모든 파일을 지정된 길이로 잘라냅니다(truncate).

Options:

  • -w 플래그는 필요한 경우 블록 복구가 완료될 때까지 명령이 대기하도록 요청합니다. -w 플래그가 없으면 복구가 진행되는 동안 파일이 한동안 닫히지 않은 상태로 남아 있을 수 있습니다. 이 기간 동안 파일은 append를 위해 다시 열 수 없습니다.

Example:

  • hadoop fs -truncate 55 /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -truncate -w 127 hdfs://nn1.example.com/user/hadoop/file1

concat

Usage: hadoop fs -concat <target file> <source files>

기존 소스 파일을 대상 파일로 연결합니다. 대상 파일과 소스 파일은 같은 디렉터리에 있어야 합니다.

Example:

  • hadoop fs -concat hdfs://cluster/user/hadoop/target-file hdfs://cluster/user/hadoop/file-0 hdfs://cluster/user/hadoop/file-1

usage

Usage: hadoop fs -usage command

개별 명령의 도움말을 반환합니다.

오브젝트 스토리지와 함께 작업하기 (Working with Object Storage)

Hadoop 파일시스템 셸은 Amazon S3, Azure ABFS, Google GCS 같은 오브젝트 스토어와 함께 동작합니다.

# Create a directory
hadoop fs -mkdir s3a://bucket/datasets/

# Upload a file from the cluster filesystem
hadoop fs -put /datasets/example.orc s3a://bucket/datasets/

# touch a file
hadoop fs -touchz wasb://[email protected]/touched

일반 파일시스템과 달리 오브젝트 스토어에서 파일과 디렉터리의 이름 변경(rename)은 보통 조작되는 오브젝트 크기에 비례하는 시간이 걸립니다. 파일시스템 셸 연산의 상당수는 rename을 연산의 마지막 단계로 사용하므로, 이 단계를 건너뛰면 긴 지연을 피할 수 있습니다.

특히 put과 copyFromLocal 명령은 직접 업로드를 위해 둘 다 -d 옵션을 설정해야 합니다.

# Upload a file from the cluster filesystem
hadoop fs -put -d /datasets/example.orc s3a://bucket/datasets/

# Upload a file from under the user's home directory in the local filesystem.
# Note it is the shell expanding the "~", not the hadoop fs command
hadoop fs -copyFromLocal -d -f ~/datasets/devices.orc s3a://bucket/datasets/

# create a file from stdin
# the special "-" source means "use stdin"
echo "hello" | hadoop fs -put -d -f - wasb://[email protected]/hello.txt

오브젝트를 다운로드하고 볼 수 있습니다:

# copy a directory to the local filesystem
hadoop fs -copyToLocal s3a://bucket/datasets/

# copy a file from the object store to the cluster filesystem.
hadoop fs -get wasb://[email protected]/hello.txt /examples

# print the object
hadoop fs -cat wasb://[email protected]/hello.txt

# print the object, unzipping it if necessary
hadoop fs -text wasb://[email protected]/hello.txt

## download log files into a local file
hadoop fs -getmerge wasb://[email protected]/logs\* log.txt

많은 파일을 나열하는 명령은 HDFS나 다른 파일시스템으로 작업할 때보다 상당히 느릴 수 있습니다.

hadoop fs -count s3a://bucket/
hadoop fs -du s3a://bucket/

느린 다른 명령으로는 find, mv, cp, rm이 있습니다.

Find

제공된 경로 아래에 디렉터리가 많은 대형 스토어에서는 매우 느릴 수 있습니다.

# enumerate all files in the object store's container.
hadoop fs -find s3a://bucket/ -print

# remember to escape the wildcards to stop the shell trying to expand them first
hadoop fs -find s3a://bucket/datasets/ -name \*.txt -print

Rename

파일 이름 변경 시간은 크기에 따라 달라집니다.

디렉터리 이름 변경 시간은 해당 디렉터리 아래 모든 파일의 수와 크기에 따라 달라집니다.

hadoop fs -mv s3a://bucket/datasets s3a://bucket/historical

연산이 중단되면 오브젝트 스토어는 정의되지 않은 상태가 됩니다.

Copy

hadoop fs -cp s3a://bucket/datasets s3a://bucket/historical

복사 연산은 각 파일을 읽은 다음 오브젝트 스토어에 다시 씁니다. 완료 시간은 복사할 데이터 양과 로컬 컴퓨터와 오브젝트 스토어 사이의 양방향 대역폭에 따라 달라집니다.

컴퓨터가 오브젝트 스토어에서 멀수록 복사는 더 오래 걸립니다.

오브젝트 삭제 (Deleting objects)

rm 명령은 오브젝트와 오브젝트로 가득 찬 디렉터리를 삭제합니다. 오브젝트 스토어가 최종적 일관성(eventually consistent)을 갖는다면 fs ls 명령과 다른 접근자들이 방금 삭제된 오브젝트의 세부 사항을 잠시 반환할 수 있습니다. 이는 피할 수 없는 오브젝트 스토어의 특성입니다.

파일시스템 클라이언트가 파일을 휴지통 디렉터리로 복사하도록 구성된 경우, 이는 버킷 안에 있게 되며 rm 연산은 데이터 크기에 비례하는 시간이 걸립니다. 게다가 삭제된 파일은 계속 스토리지 비용이 발생합니다.

이를 피하려면 -skipTrash 옵션을 사용하세요.

hadoop fs -rm -skipTrash s3a://bucket/dataset

.Trash 디렉터리로 이동된 데이터는 expunge 명령으로 제거할 수 있습니다. 이 명령은 기본 파일시스템에서만 동작하므로, 기본 파일시스템이 대상 오브젝트 스토어가 되도록 구성해야 합니다.

hadoop fs -expunge -D fs.defaultFS=s3a://bucket/

오브젝트 덮어쓰기 (Overwriting Objects)

오브젝트 스토어가 최종적 일관성을 갖는다면 기존 오브젝트를 덮어쓰는 모든 연산이 모든 클라이언트/쿼리에 즉시 보이지 않을 수 있습니다. 즉, 이후에 같은 오브젝트의 상태나 내용을 쿼리하는 연산은 이전 오브젝트를 얻을 수 있습니다. 이는 단일 오브젝트를 읽는 동안 같은 클라이언트 내에서도 때때로 드러날 수 있습니다.

오브젝트를 덮어쓴 다음 즉시 업데이트된 데이터를 작업하는 명령 시퀀스는 피하세요. 이전 데이터가 대신 사용될 위험이 있습니다.

타임스탬프 (Timestamps)

오브젝트 스토어의 오브젝트와 디렉터리의 타임스탬프는 HDFS의 파일과 디렉터리의 동작을 따르지 않을 수 있습니다.

  • 오브젝트의 생성 및 초기 수정 시간은 오브젝트 스토어에서 생성된 시간이 됩니다. 이는 쓰기 과정의 시작이 아니라 끝이 됩니다.
  • 타임스탬프는 클라이언트의 시계가 아니라 오브젝트 스토어 인프라의 시계에서 가져옵니다.
  • 오브젝트가 덮어써지면 수정 시간이 업데이트됩니다.
  • 디렉터리는 유효한 타임스탬프가 있을 수도 있고 없을 수도 있습니다. 아래의 오브젝트가 업데이트될 때 디렉터리의 수정 시간이 업데이트될 가능성은 낮습니다.
  • Apache Hadoop 코드베이스에 있는 어떤 오브젝트 스토어도 atime 접근 시간 기능을 지원하지 않습니다.

이것이 distcp -update 연산에 어떤 영향을 줄 수 있는지에 대한 자세한 내용은 DistCp 문서를 참고하세요.

보안 모델과 연산 (Security model and operations)

오브젝트 스토어의 보안과 권한 모델은 보통 Unix 스타일 파일시스템과 매우 다릅니다. 권한을 쿼리하거나 조작하는 연산은 일반적으로 지원되지 않습니다.

이에 해당하는 연산에는 chgrp, chmod, chown, getfacl, setfacl이 포함됩니다. 관련 속성 명령인 getfattr과 setfattr도 보통 사용할 수 없습니다.

권한과 사용자/그룹 세부 사항을 나열하는 파일시스템 명령은 보통 이 세부 사항을 시뮬레이션합니다.

권한을 보존하려는 연산(예: fs -put -p)은 이런 이유로 권한을 보존하지 않습니다. (특수한 경우: wasb://는 권한을 보존하지만 강제하지는 않습니다.)

읽기 전용 오브젝트 스토어와 상호작용할 때 "list"와 "stat" 명령에서 발견되는 권한은 사용자가 실제로는 쓰기 권한이 없음에도 쓰기 권한이 있다고 나타낼 수 있습니다.

오브젝트 스토어는 보통 자체 권한 모델을 가지며, 이 모델은 스토어별 도구를 통해 조작할 수 있습니다. 오브젝트 스토어가 제공할 수 있는 일부 권한(예: 쓰기 전용 경로, 루트 경로의 다른 권한)은 Hadoop 파일시스템 클라이언트와 호환되지 않을 수 있습니다. 이들은 데이터를 기록하는 전체 오브젝트 스토어 버킷/컨테이너에 대한 완전한 읽기·쓰기 접근을 요구하는 경향이 있습니다.

권한이 어떻게 모킹되는지의 예로, Amazon의 공개 읽기 전용 Landsats 이미지 버킷의 목록이 있습니다:

$ hadoop fs -ls s3a://landsat-pds/
Found 10 items
drwxrwxrwx   - mapred          0 2016-09-26 12:16 s3a://landsat-pds/L8
-rw-rw-rw-   1 mapred      23764 2015-01-28 18:13 s3a://landsat-pds/index.html
drwxrwxrwx   - mapred          0 2016-09-26 12:16 s3a://landsat-pds/landsat-pds_stats
-rw-rw-rw-   1 mapred        105 2016-08-19 18:12 s3a://landsat-pds/robots.txt
-rw-rw-rw-   1 mapred         38 2016-09-26 12:16 s3a://landsat-pds/run_info.json
drwxrwxrwx   - mapred          0 2016-09-26 12:16 s3a://landsat-pds/runs
-rw-rw-rw-   1 mapred   27458808 2016-09-26 12:16 s3a://landsat-pds/scene_list.gz
drwxrwxrwx   - mapred          0 2016-09-26 12:16 s3a://landsat-pds/tarq
drwxrwxrwx   - mapred          0 2016-09-26 12:16 s3a://landsat-pds/tarq_corrupt
drwxrwxrwx   - mapred          0 2016-09-26 12:16 s3a://landsat-pds/test
  • 모든 파일은 완전한 읽기/쓰기 권한이 있는 것으로 나열됩니다.
  • 모든 디렉터리는 완전한 rwx 권한으로 나타납니다.
  • 모든 파일의 복제 수는 "1"입니다.
  • 모든 파일과 디렉터리의 소유자는 현재 사용자(mapred)로 선언됩니다.
  • 모든 디렉터리의 타임스탬프는 실제로 -ls 연산이 실행된 시간입니다. 이는 이 디렉터리가 스토어의 실제 오브젝트가 아니라 경로 아래 오브젝트의 존재에 기반한 시뮬레이션 디렉터리이기 때문입니다.

파일 중 하나를 삭제하려 하면, ls 명령이 보여주는 권한에도 불구하고 연산은 실패합니다:

$ hadoop fs -rm s3a://landsat-pds/scene_list.gz
rm: s3a://landsat-pds/scene_list.gz: delete on s3a://landsat-pds/scene_list.gz:
  com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3;
  Status Code: 403; Error Code: AccessDenied; Request ID: 1EF98D5957BCAB3D),
  S3 Extended Request ID: wi3veOXFuFqWBUCJgV3Z+NQVj9gWgZVdXlPU4KBbYMsw/gA+hyhRXcaQ+PogOsDgHh31HlTCebQ=

이는 나열된 권한이 쓰기 접근의 증거로 받아들여질 수 없음을 보여줍니다. 오직 오브젝트 조작만이 이를 결정할 수 있습니다.

Microsoft Azure WASB 파일시스템은 권한을 설정하고 확인할 수 있게 하지만, 권한은 실제로 강제되지 않습니다. 이 기능은 HDFS 디렉터리 트리를 권한이 보존된 채 DistCp로 백업하고, 디렉터리를 HDFS로 다시 복사할 때 권한을 복원할 수 있는 능력을 제공합니다. 그러나 오브젝트 스토어의 데이터 접근을 보호하려면 Azure의 자체 모델과 도구를 사용해야 합니다.

가치가 제한된 명령 (Commands of limited value)

일반적으로 효과가 없으며 —실제로 실패할 수도 있는— 셸 명령 목록입니다.

command limitations
appendToFile generally unsupported
checksum the usual checksum is "NONE"
chgrp generally unsupported permissions model; no-op
chmod generally unsupported permissions model; no-op
chown generally unsupported permissions model; no-op
createSnapshot generally unsupported
deleteSnapshot generally unsupported
df default values are normally displayed
getfacl may or may not be supported
getfattr generally supported
renameSnapshot generally unsupported
setfacl generally unsupported permissions model
setfattr generally unsupported permissions model
setrep has no effect
truncate generally unsupported
concat generally unsupported

서로 다른 오브젝트 스토어 클라이언트는 이 명령들을 지원할 수도 있습니다. 대상 스토어에 대한 문서를 확인하고 테스트해 보세요.

더 알아보기 (Learn more)