-
[Hadoop] HDFS 기본 명령어 알아보기Hadoop 2024. 6. 1. 09:26728x90반응형
- 목차
들어가며.
아래는 이전에 작성한 Docker로 Hadoop 클러스터 구축하기 글 링크를 첨부하며,
자연스럽게 새로운 블로그 글의 내용을 시작하는 예시입니다.
https://westlife0615.tistory.com/881
이번 글에서는 HDFS에서 자주 사용하는 기본 명령어들을 다뤄보겠습니다.
Hadoop 분산 파일 시스템(HDFS)은 대용량 데이터를 효율적으로 관리하기 위해 필수적인 기능들을 제공하는데요,
이를 사용하기 위해 필요한 명령어들을 익혀보는 시간을 가져보겠습니다.
로컬 Hadoop 설치하기.
로컬 컴퓨터에 Hadoop 클라이언트 도구를 설치해 두면 원격의 Hadoop 클러스터에 명령을 내리거나 데이터를 관리하기가 훨씬 편리해집니다.
그래서 간단히 Hadoop 클라이언트 도구들을 설치하는 방법에 대해서 알아보도록 하겠습니다.
하둡 클라이언트 도구를 설치할 Directory 를 생성합니다.
mkdir -p $HOME/hadoop cd $HOME/hadoop
하둡과 관련된 패키지들을 다운로드합니다.
curl -O https://downloads.apache.org/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz tar -xzf hadoop-3.3.5.tar.gz
하둡과 관련된 bin 폴더를 PATH 에 등록 후 아래와 같이 사용할 수 있습니다.
export HADOOP_HOME=$HOME/hadoop/hadoop-3.3.5 export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/bin export HADOOP_USER_NAME=root hdfs --help
기본 명령어 알아보기.
파일 시스템을 다루기 위한 자주 사용하는 HDFS 명령어들을 소개하겠습니다.
파일 생성 및 삭제.
mkdir.
HDFS에서 mkdir 명령어는 네임스페이스 하위에 새로운 디렉터리(폴더) 구조를 생성하는 데 사용됩니다.
하둡 파일 시스템 명령어인 hdfs dfs -mkdir를 통해 HDFS 경로에 원하는 디렉터리를 추가할 수 있으며,
이를 통해 파일을 정리하고 관리하기 쉬운 폴더 구조를 만들 수 있습니다.
아래의 명령어는 통해서 /user 라는 새로운 디렉토리를 생성할 수 있습니다.
참고로 저는 Hadoop Cluster 를 Docker 를 사용하여 실행하였으며, 저의 네임노드의 IP 와 Port 는 localhost:9000 에 해당합니다.
hdfs dfs -fs hdfs://localhost:9000 -mkdir /user
그리고 -p 옵션 (path) 을 사용하여 부모디렉토리와 중간 경로를 한번에 생성할 수도 있습니다.
hdfs dfs -fs hdfs://localhost:9000 -mkdir -p /user/westlife0615
생성된 디렉토리의 확인은 ls 명령어를 통해서 확인이 가능합니다.
hdfs dfs -fs hdfs://localhost:9000 -ls /user
Found 1 items drwxr-xr-x - root supergroup 0 2023-02-02 16:16 /user/westlife0615
rmdir.
하둡의 rmdir 명령어는 일반적인 리눅스 파일 시스템의 rmdir 와 유사하게 동작하며, 빈 디렉터리를 삭제하는 데 사용됩니다.
HDFS에서 hdfs dfs -rmdir 명령어는 파일이나 하위 디렉터리가 없는 빈 폴더만 삭제할 수 있으며,
디렉터리 안에 파일이 있으면 삭제되지 않습니다.
hdfs dfs -fs hdfs://localhost:9000 -rmdir /user/westlife0615
put.
하둡의 put 명령어는 로컬 파일 시스템의 파일이나 디렉터리를 HDFS에 업로드하는 데 사용됩니다.
hdfs dfs -put 명령을 사용하면 로컬 파일을 지정된 HDFS 경로로 복사할 수 있으며,
파일뿐 아니라 디렉터리와 그 하위 파일들도 업로드할 수 있습니다.
먼저 간단한 csv 파일을 생성하도록 하겠습니다.
아래의 명령어를 통해서 네임노드 컨테이너 내부로 진입합니다.
docker exec -it namenode bash
그리고 users.csv 파일을 생성합니다.
touch /tmp/users.csv echo "id,name,age,city" >> /tmp/users.csv echo "1,John Doe,28,New York" >> /tmp/users.csv echo "2,Jane Smith,34,Los Angeles" >> /tmp/users.csv echo "3,Bob Johnson,45,Chicago" >> /tmp/users.csv echo "4,Alice Brown,23,San Francisco" >> /tmp/users.csv echo "5,Charlie Davis,30,Seattle" >> /tmp/users.csv
id,name,age,city 1,John Doe,28,New York 2,Jane Smith,34,Los Angeles 3,Bob Johnson,45,Chicago 4,Alice Brown,23,San Francisco 5,Charlie Davis,30,Seattle
그리고 생성된 /tmp/users.csv 파일을 Hadoop 으로 업로드하도록 합니다.
네임노드의 도커 컨테이너 내부에서 동작하므로 -fs 설정은 hdfs://namenode:9000 으로 설정할 수 있습니다.
hdfs dfs -fs hdfs://namenode:9000 -put /tmp/users.csv /user/westlife0615/users.csv
참고로 파일 업로드와 관련된 명령은 약간의 시간이 소요될 수 있습니다.
파일 생성의 경우에는 하둡 클라이언트와 데이터노드 사이의 네트워크 통신이 수행됩니다.
하지만 저의 로컬 환경과 Docker 데이터노드 사이에 네트워크적인 단절이 있기에 매끄러운 방식으로
put 명령어의 테스트를 수행할 수 없어서 네임노드 내부에서 진행하였습니다.
이 부분에 대해서 조금 더 자세한 설명을 드리면,
hdfs dfs 명령어를 네임노드에게 전달합니다.
그럼 네임노드는 하둡 클라이언트에게 데이터노드의 ip 와 port 정보를 넘겨주게되고,
하둡 클라이언트는 파일을 블록 단위로 나누어 데이터노드에게 전달합니다.
이 과정에서 네임노드가 하둡 클라이언트에게 데이터노드의 도커 레벨의 ip 와 port 를 넘겨주는데,
저희 Local Machine 에서는 도커 내부의 네트워크 정보를 이해할 수 없습니다.
-put 명령어의 실행이 완료되면 네임노드의 Web UI 에서 생성된 파일의 확인이 가능합니다.
http://localhost:9870/explorer.html#/user/westlife0615
-put with Replication Factor 3.
업로드하는 파일 별로 Replication Factor 의 설정이 가능합니다.
설정하는 방식은 아래와 같이 -D 과 dfs.replication=3 의 방식으로 가능합니다.
hdfs dfs -D dfs.replication=3 -put /tmp/users.csv /user/westlife0615/users_r3.csv
rm.
HDFS에서 -rm 명령어는 파일이나 디렉토리를 삭제할 때 사용됩니다.
로컬 파일 시스템의 rm 명령과 유사하게, HDFS 내에서 특정 파일이나 디렉토리를 제거하는 기능을 합니다.
먼저 /user/westlife0615/test.txt 파일을 삭제해보도록 하겠습니다.
아래의 명령어를 통해서 test.txt 파일의 삭제가 가능합니다.
hdfs dfs -fs hdfs://localhost:9000 -rm /user/westlife0615/test.txt
Deleted /user/westlife0615/test.txt
파일 조회 및 다운로드.
Hadoop에서 파일 조회 및 다운로드에 대한 기본 명령어들을 알아보겠습니다.
파일 다운로드와 같은 경우에는 Spark 나 다른 데이터웨어하우스와 함께 사용하는 케이스가 많으며,
Spark, Hive 와 같은 글을 통해서 심화된 설명을 작성하도록 하겠습니다.
get.
hdfs dfs -get 명령어를 통해서 원격 하둡 저장소에 있는 파일을 다운로드할 수 있습니다.
이 또한 put 명령어와 마찬가지로 네트워크적인 이슈로 인해 네임노드 내부에서 실행이 가능합니다.
docker exec -it namenode bash
hdfs dfs -get <HDFS 파일 경로> <로컬 경로> 와 같은 형식으로 원격 파일의 다운로드가 가능합니다.hdfs dfs -get /user/westlife0615/users.csv .
반응형'Hadoop' 카테고리의 다른 글
[Hadoop] Docker 로 구축하는 Hadoop Cluster (0) 2024.06.08 [Hadoop] yarn-site.xml 알아보기 (0) 2024.03.03 [YARN] ApplicationMaster 알아보기 (0) 2024.02.28 [Hadoop] HADOOP_USER_NAME 환경변수 알아보기 (0) 2024.02.21 [Hadoop] MapReduce Combiner 알아보기 (0) 2024.02.11