데이터 읽기 클라이언트는 DistributedFileSystem 인스턴스인 FileSystem 객체의 open() 메소드를 호출하여 파일을 연다. DistributedFileSystem은 파일 블록의 위치를 파악하기 위해 RPC(Remote Procedure Call)을 사용하여 네임 노드를 호출한다. 네임 노드는 각 블록마다 복제본을 가진 데이터 노드의 주소를 반환한다. 이때 클러스터의 네트워크 위상에 따라 클라이언트와 가까운 순으로 데이터 노드가 정렬된다. DistributedFileSystemd은 파일 탐색을 위한 입력 스트림인 FSDataInputStream을 클라이언트에 반환한다. FSDataInputStream은 네임 노드와 데이터 노드의 통신을 처리하는 DFSInputStream으로 Wrap..
하둡 파일시스템 하둡은 파일시스템의 추상화 개념을 가지고 있고, HDFS는 그 구현체 중 하나이다. FTP, S3, Azure 등 여러 구현체가 존재한다. 위에서 살펴본 명령어는 모든 파일시스템에서 잘 동작한다. 하지만 대용량 데이터를 처리할 때는 HDFS와 같이 데이터 지역성 최적화가 가능한 분산 파일시스템을 선택하는 것이 좋다. 인터페이스 하둡은 파일시스템의 추상화 개념을 가지고 있고, 다음은 그 구현체의 목록이다. 맵리듀스 프로그램은 어떠한 파일시스템도 쉽게 실행할 수 있지만 대용량 데이터를 처리할 때는 HDFS처럼 데이터 지역성 최적화가 가능한 분산 파일시스템을 선택하는 것이 좋다. 파일시스템의 인스턴스에 접근할 때는 주로 URI 스킴을 사용한다. 파일시스템 URI 스킴 자바 구현체 (org.ap..
명령행 인터페이스 도움말 $ hadoop fs -help 로컬에서 HDFS로 복사하기 $ hadoop fs -copyFromLocal ~/Desktop/quangle.txt hdfs://localhost/user/$USER/quangle.txt# 전체 경로 $ hadoop fs -copyFromLocal ~/Desktop/quangle.txt /user/$USER/quangle.txt# core-site.xml에 설정된 fs.defaultFS 값 사용 $ hadoop fs -copyFromLocal ~/Desktop/quangle.txt quangle.txt# 홈 디렉터리 (/user/$USER) HDFS에서 로컬로 복사하기 $ hadoop fs -copyToLocal quangle.txt ~/Deskt..
환경 설정 파일 생성 하둡의 환경 설정 파일은 $HADOOP_HOME/etc/hadoop 경로에 있다. core-site.xml fs.defaultFS hdfs://localhost/ hdfs-site.xml dfs.replication 1 mapred-site.xml mapreduce.framework.name yarn yarn-site.xml yarn.resourcemanager.hostname localhost yarn.nodemanager.aux-services mapreduce_shuffle SSH 설정 $ sudo apt-get install ssh # MAC OS인 경우, [시스템 환경설정]-[공유]-[원격 로그인]을 활성화해야 함 $ ssh-keygen -t rsa -P '' -f ~/.s..
HDFS HDFS는 Hadoop Distributed File System의범용 하드웨어로 구성된 클러스터에서 실행되고 스트리밍 방식의 데이터 접근 패턴으로 대용량 파일을 다룰 수 있도록 설계된 분산 파일시스템이다. 범용 하드웨어 : 노드 장애 발생 확률이 높은 범용 하드웨어에서 문제없이 실행되며 장애 발생을 사용자가 알 수 없도록 작업을 수행함 스트리밍 방식의 데이터 접근 : 데이터를 한 번 쓰고 여러 번 읽음, 첫 번째 레코드를 읽는 시간보다 전체 데이터셋을 읽는 시간이 더 중요함 대용량 파일 : 수백 MB, GB, TB를 넘어 PB 크기의 데이터를 저장 분산 파일시스템 : 네트워크로 연결된 여러 머신의 스토리지를 관리 블록 블록 크기는 한 번에 읽고 쓸 수 있는 데이터의 최대량이다. 보통 블록의 크..
1. 하둡 위키 페이지에서 필요한 자바 버전 확인 $ java version 2. 하둡 배포 페이지에서 배포판 바이너리 다운로드 3. 압축 풀기 $ tar xzf hadoop-3.3.4.tar.gz # 다운로드한 파일 4. 환경 변수 설정 $ export HADOOP_HOME=/Users/jimin/Downloads/hadoop-3.3.4 # 하둡이 설치된 경로 $ export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 5. 하둡 버전 확인 $ hadoop version 6. 환경 설정 하둡은 세 가지 동작 모드가 있다. 독립 모드 (standalone) : 데몬이 실행되지 않고 모든 것이 단독 JVM 내에서 실행된다. 의사 분산 모드 (pseudo-distribu..
단일 머신에서 멀티 스레드를 활용한 병렬 처리 1. 작업을 동일한 크기로 나누기 어려움 처리해야 할 파일마다 크기가 다른 경우, 결국엔 가장 큰 파일을 처리하는 시간에 의해 전체 처리 시간이 결정된다. 최대한 동일한 크기로 나누고 싶다면 각 파일을 고정 길이의 청크 단위로 나누어 처리할 수는 있다. 2. 병렬 처리된 결과를 병합하는 데 더 많은 처리가 필요할 수 있음 파일을 병렬 처리하여 얻은 중간 결과를 모아서 추가적인 처리를 해야만 최종 결과를 얻을 수 있다. 3. 단일 머신의 처리 능력에 한계가 있음 만약 단일 머신에서 여러 개의 프로세서로 처리할 수 있는 최적의 수행 시간이 20분이라면 그 이상 빨라질 수는 없다. → 병렬 처리는 매우 복잡하므로 하둡과 같은 프레임워크를 활용하는 것이 좋다. 하둡..
데이터 저장소와 분석 하드 디스크의 용량은 크게 증가했지만 데이터 IO 속도는 그렇지 못했다. 하지만 같은 양의 데이터를 100개로 나눠서 저장하고 공유하여 병렬로 작업한다면 IO 속도를 줄일 수 있다. 이때 고려해야 할 문제들이 있다. 1. 하드웨어 장애 하드웨어를 많이 사용할수록 장애 발생 확률도 높아진다. 데이터 손실을 방지하기 위해 복제본을 만들어 여러 곳에 보관할 수 있다. 2. 분산된 데이터 병합 데이터 분석을 위해 100개로 나눠서 저장한 데이터를 병합해야 한다. 맵리듀스는 데이터 IO를 key-value 쌍의 계산으로 변환한 추상화된 프로그래밍 모델을 제공한다. 하둡의 처리 패턴 하둡 에코시스템은 분산 컴퓨팅과 대규모 데이터 처리를 위한 기반 시설이다. 최초의 하둡은 일괄 처리를 위해 만들..