본문 바로가기

HaDoop...?

[정리중] HDFS block 생성 mehod 순서

HDFS에서 파일을 업로드 할 때(hadoop fs -copyFromLocal [src] [dst]) 내부적으로 어떻게 움직이는지 공부하고 있다.

오늘 공부한 목록까지 정리한다.


일단. 말은 정리가 안 됐지만 필기한 자료를 적어보면..

HDFS에 File추가시(업로드) Log에 보이는데 이때 실행되는 method(이하 함수)는 FSNamesystem.class에 있는 allocateBlock() 이다. 이 함수는 같은 클래스인 getAdditionalBlock() 함수에서 불려진다. getAddionalBlock() 함수는 NameNode.class에 있는 addBlock() 함수에서 사용한다. addBlock()은 DFSClient.class에 있는 locateFollowingBLock() 함수에서 사용한다. locateFollowingBlock() 함수는 같은 클래스의 nextBlockOutputStream() 함수에 쓰이며 이 함수는 DFSClient.DFSOutputStream.DataStreamer.run() 함수에서 사용한다. DataStreamer.class는 DFSClient.class에 DFSOutputStream.class의 생성자에서 streamer.start() 함수로 실행되며, DFSOutputStream.class는 DFSClient의 create(), append() 함수에서 new DFSOutputStream()으로 할당된다. 각각의 DFSClient.create(), append() 함수는 DistributedFileSystem.class에 create(), append() 함수에서 사용한다.


역시 말이 길어지면 힘들다. 그래서 그려봤는데


아 이런식이다... 물리고 물리는 관계가.. (그림을 참 못그린다. 일단 정리중 일뿐. 정리가 아니다...)

책에서 보면(Hadoop 완벽 가이드, 클라우드 컴퓨팅 구현기술) 예제를 사용할 때는 FileSystem이라는 클래스를 이용하여 create를 한다. 위에 그린 그림은 DistributedFileSystem 클래스까지만 연결되어 있는데 정작 이 클래스를 사용하여 create(), append()하는 부분을 찾아 볼 수 없다. 그래서 책에 적힌 FileSystem 클래스의 create() 함수를 따라가 보았다. 그 끝에는 이런 함수가 존재한다.


이 함수는 추상화되어 FileSystem을 상속받는 클래스에서 구현되어 있다. 

그렇다! DistributedFileSystem 클래스가 FileSystem 클래스를 상속받아 DistributedFileSystem의 create() 함수가 호출되는 것이다! 정말 그렇나 싶기에 찍어본다.


오 나온다. 형편없는 영어 실력이지만 어쨌던 DistributedFileSystem 클래스의 create()를 사용하여 blk생성을 한다.

내일은 두개의 DataNode에서 blk을 생성할 때 분배하는 방법과 함수 호출 순서를 공부할 것이다.