Hadoop의 정의
ㅇ 분산파일시스템 : 네트워크로 연결된 서버들의 스토리지를 관리하는 파일시스템
ㅇ HDFS : Hadoop Distributed File System
ㅇHDFS의 특징
- 매우 커다란 파일로 보유함
- Data Access를 스트리밍 방식으로 지원함n
- 범용 하드웨어 (<-> 고가의 신뢰도 높은 하드웨어)
- 빠른 응답시간의 Data Access에는 적합하지 않음
- 많은 수의 작은 파일은 효율적이지 않음
- 다중 라이터 및 임의의 파일 수정은 적합하지 않음 (쓰기 작업은 항상 파일의 끝에서 이루어짐)
ㅇ HDFS 블록
- 블록 : 한번에 읽고, 쓸 수 있는 데이터의 최대량
- 추상적인 개념이기에 생기는 이점 :
① 파일 하나가 네트워크에 있은 어떤 하나의 디스크보다 더 커질 수 있다.
파일 하나를 동일 디스크에 저장할 필요없이, 클러스터 내에 어떠한 디스크에도 저장할 수 있다
② 파일보다는 블록을 사용
- 스토리지 관리 ( 블록은 고정크기이기 때문에 시스템의 저장용량을 계산하기 쉽다 )
- 메타데이터 관리 ( 파일권한 정보같은 메타데이터를 저장할 필요가 없으므로, 독립적인 관리 가능)
③ 복제를 효율적으로 수행 가능
ㅇ NameNode & DataNode
1. NameNode(일을 명령함)
- Manage Namespace for File System
- 파일시스템 트리와 그 트리 안에 있는 모든 파일과 디렉토리의 메타데이터를 유지
- Namespace image와 edit log 형태의 두 개의 파일에 지속적으로 저장함
- 파일과 디렉토리의 open, close, rename 그리고 DataNode와 block의 mapping을 결정
2. DataNode(일을 수행함)
- Client가 요구하는 Read, Write, 그리고 NameNode의 생성과 삭제, 복제와 같은 명령을 수행한다
- 파일시스템 메타데이터의 지속상태를 보완해주는 파일들을 백업합
ㅇ 기본적인 파일시스템 연산
- fs : 하둡 파일시스템의 쉘 명령어
- -copyFromLocal : 로컬시스템에 있는 파일을 hadoop에 올린다
- - ls : ls -l 과 같은 기능
ㅇ 인터페이스
1. 쓰리프트
- 하둡 파일시스템을 아파치 쓰리프트 서비스로 제공
- 동일한 클라이언트 코드에서 하둡 파일시스템의 다른 버전으로 엑세스할 필요가 있을 때 좋음
2. C => libhdfs 를 사용
- JNI(Java Native Interface)를 사용
- libhdfs/docs/api 폴더에서 찾을 수 있음
- http://wiki.apache.org/hadoop/LibHDFS 를 참조바람
3. 퓨즈(FUSE : Filesystem in Userspace)
- 사용자 공간에서 구현한 파일시스템을 유닉스 파일시스템으로 통합할 수 있도록 지원
- Fuse-DFS contrib :모든 하둡 파일시스템이 표준 파일시스템으로 마운트될 수 있도록 지원
4. WebDAV(웹다브)
- 파일 편집과 수정을 지원하기 위한 HTTP의 확장
- WebDAV shares : 대부분 운영체제가 지원하는 파일시스템처럼 마운트 될 수 있음
- http://issues.apache.org/jira/browse/HADOOP-496
5. HTTP
- 디렉토리 리스팅과 데이터를 검색하기 위한 읽기전용 인터페이스를 제공함
- 디렉토리 리스팅 : 네임노드의 내장된 웹서버(50070) 에 의해 XML 형태로 제공
- 파일 데이터 : 데이터노드의 웹서버(50075)로부터 스트리밍 됨
6. FTP
- 기존 FTP 클라이언트를 사용함으로 HDFS로 데이터를 송수신하기 위한 편리한 방법 제공
ㅇ Java Interface
- DistributedFileSystem : HDFS 구현
- FileSystem 추상 클래스 : 파일시스템 사이의 이식성 유지