데이터실무
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
하둡 WebHDFS는 하둡 버전 1.0.0부터 제공한다. 기존의 하둡 분산 파일 시스템은 하둡 클라이언트나 SDK를 갖고 있어야만 하둡 분산 파일 시스템에 접근할 수 있지만, 버전 1.0.0부터는 HTTP Rest API를 제공하고 있어서 하둡 클라이언트나 SDK가 없더라도 하둡 분산 파일 시스템에서 파일을 처리할 수 있다. OPEN은 파일 내용을 조회할 때 사용되는 기능으로 다음과 같이 사용한다. 리눅스에서 사용하는 명령어인 curl을 이용해 URL로 데이터를 전송하거나 수신할 수 있다. <HOST>와 <PORT>는 하둡 설정값을 참조하는데, 기본값은 네임 노드 주소:50090이다. 이 값을 변경하고 싶다면 다음과 같이 하둡 설정 파일인 conf/hdfs-site.xml을 수정한다. GETFILESTATUS는 파일이나 폴더의 상태 정보를 조회할 때 사용한다. 응답 데이터 형식이 JSON이라서 곧바로 웹 기반으로 사용할 수 있다. 다음은 응답 데이터의 예다. 하둡 WebHDFS의 대부분 응답 형식은 JSON 오브젝트다. LISTSTATUS는 지정한 폴더 안의 파일과 폴더 목록을 조회할 때 사용한다. 다음은 응답 데이터의 예다. GETCONTENTSUMMARY는 지정한 파일이나 폴더에 대한 요약 정보를 보여준다. 다음은 응답 데이터의 예다. GETFILECHECKSUM은 지정한 파일의 checksum 데이터를 요청할 때 사용한다. 이 기능은 네임 노드에 요청하지만 데이터 노드에서 응답한다. 그래서 두 번의 응답 데이터를 받게 된다. 다음은 응답 데이터의 예다. GETHOMEDIRECTORY는 현재 접근하는 사용자 계정의 홈 디렉터리 전체 경로를 요청한다. 다음은 응답 데이터의 예다. 하둡은 웹 접근 계정을 별도로 설정하지 않을 경우 기본적으로 webuser 사용자 계정을 사용한다. 웹 접근 사용자 계정을 변경하려면 다음 두 가지 방법을 사용한다. 하둡 설정 파일(conf/hdfs-site.xml)에 다음 부분을 추가한다. URL으로 데이터를 요청할 때 다음과 같은 속성을 추가한다. 단, 이 방법은 하둡 보안 설정을 해제한 상태에서만 가능하다. CREATE는 하둡파일 시스템 내에 파일을 생성할 때 사용한다. 다음 예제는 데이터가 없는 파일을 생성한다. 이 기능은 네임 노드에 요청하지만 실제 데이터를 쓰기 위해 데이터 노드로 리다이렉트된다. 다음은 응답 데이터의 예다. 다음은 실제 데이터 파일을 이용할 때다. MKDIRS는 폴더를 생성할 때 사용한다. 사용자를 지정하지 않을 경우에는 기본 사용자인 webuser로 폴더가 생성된다. 다음은 응답 데이터의 예다. RENAME은 폴더나 파일의 이름을 변경하거나 이동할 때 사용한다. 소유자와 접근 권한 정보는 그대로 유지된다. 다음은 응답 데이터의 예다. SETREPLICATION은 지정한 파일의 복제본 수를 지정할 때 사용한다. 다음은 응답 데이터의 예다. SETOWNER는 지정한 폴더나 파일이 소유자를 설정할 때 사용한다. 다음은 응답 데이터의 예다. 응답은 HTTP Status OK다. 별도의 응답 데이터는 없다. SETPERMISSION은 지정한 폴더나 파일의 접근 권한을 변경할 때 사용한다. 다음은 응답 데이터의 예다. 응답은 HTTP Status OK다. SETOWNER와 동일하게 별도 데이터 보디는 없다. SETTIMES는 폴더나 파일의 수정된 시간과 접근한 시간을 변경할 때 사용한다. 다음은 응답 데이터의 예다. 별도의 응답 데이터는 없다. APPEND는 이미 존재하는 파일에 데이터를 추가할 때 사용한다. 하둡 분산 파일 시스템은 기본적으로 append 기능을 사용할 수 없도록 설정돼 있기 때문에 다음과 같이 hdfs-site.xml에 설정을 추가해야 한다. - conf/hdfs-site.xml LOCAL_FILE은 추가할 데이터가 파일로 존재하면 그 파일의 위치를 지정한다. buffersize는 데이터를 전송할 때 사용하는 버퍼다. 다음은 응답 데이터의 예다. 데이터가 추가될 경우 하둡 네임 노드가 아닌 데이터 노드와 통신하기 때문에 데이터 노드로 리다이렉션된다. DELETE는 폴더나 파일을 삭제할 때 사용한다. recursive 옵션은 폴더를 지정하면 하위 폴더와 파일을 모두 삭제할 것인지를 선택할 때 사용한다. true로 설정하면 하위 폴더와 파일을 모두 삭제하고, false로 설정하면 하위에 폴더나 파일이 있으면 {“boolean”:false}로 응답한다. 다음은 응답 데이터의 예다. 하둡 WebHDFS 서비스와 HttpClient를 이용해 다음과 같은 서비스를 만들 수 있다. [그림 Ⅱ-1-11] 하둡 분산 파일 시스템을 이용한 스토리지 서비스 [HDFSFile.java] 위의 예제는 java.io.File 객체와 유사하게 HDFSFile 객체를 구현한 것이다. 간단하게 java.io.File 객체를 이용한 로컬 파일 시스템용 스토리지와 하둡 분산 파일 시스템 용 스토리지를 손쉽게 변경해 사용할 수 있다. 단 사용자 인증은 하둡 시스템을 이용하지 않고 미들웨어에서 처리해야 한다.하둡 WebHDFS 서비스
하둡 WebHDFS의 기능은 HTTP 메소드 단위로 크게 4가지로 구분된다.
HTTP GET
OPEN
[Note]
하둡의 WebHDFS 서비스를 이용할 때 세션이 네임 노드에서 데이터 노드로 리다이렉트된다. 그래서 인터넷 웹 브라우저를 이용해 파일을 내려받거나 올릴 때 브라우저 옵션에서 URL 리다이렉트가 금지돼 있으면 서비스 이용이 불가능하다.
GETFILESTATUS
LISTSTATUS
GETCONTENTSUMMARY
GETFILECHECKSUM
GETHOMEDIRECTORY
[Note]
만약 HDFS에서 파일에 대한 접근 권한을 사용하지 않을 경우에는 conf/hdfs-site.xml 에 다음 설정을 추가하자.
…
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
…
HDFS를 재시작한 후부터는 모든 파일과 폴더는 누구나 접근할 수 있다.
HTTP PUT
CREATE
MKDIRS
RENAME
SETREPLICATION
SETOWNER
SETPERMISSION
SETTIMES
HTTP POST
APPEND
HTTP DELETE
DELETE
소스코드