본 실습은 AWS EMR의 Primary(master) node 에서 진행한다.
HDFS 명령어의 공식 매뉴얼
HDFS DFS (distributed file system)의 공식 매뉴얼
유닉스에서 쓰는 명령어들이랑 거의 동일함.
디렉토리의 파일을 출력

hdfs dfs -ls /
hadoop fs -ls/ 명령어와 같은 것. 이건 옛날 버전.권한 / user / usergruop / datasize / date / name
For a file ls returns stat on the file with the following format:
permissions number_of_replicas userid groupid filesize modification_date modification_time filename
For a directory it returns list of its direct children as in Unix. A directory is listed as:
permissions userid groupid modification_date modification_time dirname
데이터 사이즈는 directory라서 0으로 나옴.

hdfs dfs -ls /apps
하둡 같은 경우 내가 직접 들어가있는 것이 아니기 때문에 전체 경로를 보여줌
(depth 전체 경로를 보기 어려우니까)
디렉토리와 하위디렉토리의 파일을 출력
hdfs dfs -lsr /
파일 용량을 확인

hdfs dfs -du -h /
-h : 읽기 편하게
해당 경로에 있는 디렉토리 들의 용량을 합친
summary 용량을 확인

hdfs dfs -du -h -s /
파일 내용을 출력 (텍스트만가능)
hdfs dfs -cat /user/hbase/.tmp/hbase-hbck.lock

ip-172-31-33-225/172.31.33.225 Written by an hbase-2.x Master to block an attempt by an hbase-1.x HBCK tool making modification to state. See 'HBCK must match HBase server version' in the hbase refguide. 까지가 나온 걸 확인할 수 있다.
현재 실행 중인 HBase 마스터(ip-172-31-33-225)가 "이 클러스터는 HBase 2.x 버전에서 동작 중이다" 라는 걸 표시하기 위해 락 파일을 쓴 것.
그리고 HBase 1.x 시절의 hbck 툴이 잘못 접속해서 메타데이터를 수정하지 못하도록 보호하는 장치.
파일 내용을 출력, 압축된 형태도 가능

hdfs dfs -text /user/hbase/.tmp/hbase-hbck.lock
디렉토리 생성 mkdir
hdfs dfs -mkdir /data
hdfs dfs -mkdir /data/temp
확인
hdfs dfs -ls /
파일의 시작 또는 끝부분의 1KB 를 확인 (1kb를 출력해주는) 명령어
hdfs dfs -head /data/metadata/carriers.csv
hdfs dfs -tail /data/metadata/carriers.csv
로컬에 있는 파일 또는 디렉토리를 HDFS 의 지정된 경로로 복사(업로드)한다.
2 에서 세팅한 디렉토리에서 수행

cd hadoop/example/datasource

hdfs dfs -put input /data
hdfs dfs -put local경로 hadoop경로
1.5G 가량되므로 업로드에 꽤 오래걸린다.

hdfs dfs -ls /data
hdfs dfs -ls /data/input
copyFromLocal 명령어로 메타데이터로 올려보자.

hdfs dfs -copyFromLocal metadata /data
hdfs dfs -ls /data
hdfs dfs -ls /data/metadata
HDFS의 파일을 로컬로 복사(다운로드)한다.
-crc 옵션으로 checksum 파일도 복사가능-ignoreCrc 로 체크섬 무시할 수 있음
hdfs dfs -get /data/metadata/carriers.csv carriers-copied.csv
hdfs dfs -get HDFS경로 local에 있는 경로
ll
crc 옵션도 활용해보자.

hdfs dfs -get -crc /data/metadata/carriers.csv carriers-copied_2.csv
ll -al
체크섬 파일이 같이 다운받아진 것을 확인할 수 있음
ignore crc 할 수 있긴 한데, 웬만하면 하지 않는 것을 추천
소스 디렉토리나 파일을 목적지로 복사한다.
cp : hdfs 상에서 복사 하는 것

hdfs dfs -cp /data/metadata/carriers.csv /data/metadata/carriers-2.csv
확인
hdfs dfs -ls /data/metadata
copyToLocal : 로컬로 받아오는 get 이랑 같다고 보면 됨

hdfs dfs -copyToLocal /data/metadata/carriers-2.csv
이 상태로 엔터를 치면
ll
현재 경로에 그대로 같은 이름으로 다운로드를 하고
다른 이름으로 하고 싶다면
hdfs dfs -copyToLocal /data/metadata/carriers-2.csv carriers-3.csv
이런 식으로 하면 됨.
지정한 경로의 모든 파일을 합치고, 로컬 파일시스템에 하나의 파일로 복사(다운로드)한다.

hdfs dfs -getmerge -skip-empty-file -nl /data/metadata/carriers-origin.csv /data/metadata/carriers.csv carriers-merged.csv
hdfs dfs -getmerge 합칠 리모트에 있는 대상경로1.csv 합칠 리모트에 있는 대상경로2.csv 합친 결과로 받을 로컬 파일 경로.csv
-skip-empty-file 는 빈파일은 머지대상 제외-nl 옵션은 merge된 파일들을 newline 추가해서 구분
shift + ] : 다음 New Line 까지 이동
unix 와 마찬가지로 파일을 삭제한다.
-R 은 하위 디렉토리로 recursivelyhdfs dfs -rm $file
디렉토리를 삭제한다.

hdfs dfs -rmdir /data/temp
경로에 대한 권한을 변경한다.
unix의 파일 권한 변경과 유사하다. 권한을 변경하려면 chmod 를 실행하는 사용자가 해당 파일의 소유자 또는 슈퍼유저일 때만 수정이 가능하다. -R 옵션은 재귀적으로 하위 dir가지 적용된다.
hdfs dfs -ls /data/metadata/carriers-2.csv

644 권한을 가지고 있음
hdfs dfs -chmod 777 /data/metadata/carriers-2.csv
hdfs dfs -ls /data/metadata/carriers-2.csv

777로 권한이 변경됨.
파일이나 디렉토리의 소유권을 변경한다. -R 옵션은 재귀적으로 실행된다.
바로 위에 /data/metadata/carriers-2.csv 를 보면, user는 hadoop, 소유자 group은 hdfsadmingroup으로 되어 있다.

hdfs dfs -chown tester:testerGroup /data/metadata/carriers-2.csv
hdfs dfs -ls /data/metadata/carriers-2.csv
tester라는 user, testerGroup이라는 소유자 그룹으로 소유 권한이 변경됨.
파일이나 디렉토리의 소유권그룹만 변경한다.

hdfs dfs -chgrp testerGroup2 /data/metadata/carriers-2.csv
hdfs dfs -ls /data/metadata/carriers-2.csv
0바이트 파일 생성하는 것.

hdfs dfs -touchz /data/empty_file
hdfs dfs -ls /data
확인해 보면 디렉토리가 아닌 데도 파일 사이즈가 0이다.
hdfs dfs -head /data/empty_file
아무 것도 나오지 않는다. 아무 데이터가 없다는 것
경로에 대한 자세한 통계를 조회한다.
hdfs dfs -stat $foramt $file
format에는 다음 옵션을 쓸수 있다.
Format accepts permissions in octal (%a) and symbolic (%A), filesize in bytes (%b), type (%F), group name of owner (%g), name (%n), block size (%o), replication (%r), user name of owner(%u), access date(%x, %X), and modification date (%y, %Y). %x and %y show UTC date as “yyyy-MM-dd HH:mm:ss”, and %X and %Y show milliseconds since January 1, 1970 UTC. If the format is not specified, %y is used by default.

hdfs dfs -stat /data/input/2008.csv
아무 옵션을 안 주면 그 파일의 수정된 날짜를 utc time으로 출력하게됨

hdfs dfs -stat "size:%b type:%F filename:%n block_size:%o replication:%r m_date:%y" /data/input/2008.csv
replication : 1
이전에 EMR 세팅할 때 코어 노드 수가 4개 미만이면 replication 수는 1개 라고 설명했었다.
vi /etc/hadoop/conf.empty/hdfs-site.xml
에 들어가서 dfs.replicaion을 보면 1로 들어가 있음.
복제 데이터 갯수 변경.
-R 옵션으로 하위 디렉토리까지 적용 가능아까 rep 하나였으니 세개로 변경을 해 보자

hdfs dfs -setrep -w 3 /data/input/2008.csv
위 stat 명령의 %o 옵션으로 변경된 복제 갯수 확인 할 수 있음.
dfs.replication 가 기본 설정이다./etc/hadoop/conf/hdfs-site.xml 에서 확인할 수 있다.hdfs dfs -ls /data/input/
로 경로를 보면 파일의 개수가 변하는 건 아니지만 2008년 보면 이 친구 자체는 하나고, 사이즈도 정해져 있다.

hdfs dfs -stat "size:%b type:%F filename:%n block_size:%o replication:%r m_date:%y" /data/input/2008.csv
그런데, 우리가 통계 정보로 보면 리플리케이션이 3개로 늘어난 것을 볼 수 있다.
input 디렉토리 만이라도 복제본을 유지하고 싶다면.
hdfs dfs -setrep -R -w 3 /data/input/
위 처럼 입력해 전체적인 반복문을 돌면서 input에 대한 세팅을 하는 모습을 볼 수 있다.
다른 파일 확인해보면,
hdfs dfs -stat "size:%b type:%F filename:%n block_size:%o replication:%r m_date:%y" /data/input/2000.csv
replication 정보가 세개로 변경된 것을 확인할 수 있다.
휴지통을 비운다. HDFS는 삭제한 파일을 바로 지우지 않고 일정기간 동안 휴지통에 보관하고 주기적으로 비운다. expunge 는 이 주기와 관계없이 휴지통을 비운다.
hdfs dfs -expunge
얘가 체크포인트가 만들어지면 그 체크포인트로 부터 delete를 수행한 파일들이 옮겨지고,
fs.trash.interval이라는 기간 전까지 유지된다
interval 지나면 그 때 마다 주기적으로 휴지통 비운다.
`user//.Trash 에 보면 삭제 대상인 파일들이 지정이 되어 있다.