HDFS 단락 로컬 읽기
HDFS 단락 로컬 읽기 (Short-Circuit Local Reads)
클라이언트가 DataNode를 우회해 로컬 파일을 직접 읽는 단락(short-circuit) 로컬 읽기를 설명하는 문서예요. 배경, 설정, 예시 구성, 그리고 레거시 구현을 다룹니다.
출처: 문서
본문
단락 로컬 읽기 (Short-Circuit Local Reads)
배경 (Background)
HDFS에서 읽기는 보통 DataNode를 통해 이루어집니다. 클라이언트가 DataNode에 파일 읽기를 요청하면, DataNode가 디스크에서 파일을 읽어 TCP 소켓으로 클라이언트에게 데이터를 보내요. 이른바 "short-circuit" 읽기는 DataNode를 우회해서 클라이언트가 파일을 직접 읽을 수 있게 합니다. 물론 이는 클라이언트가 데이터와 같은 위치에 있을 때만 가능해요. 단락 읽기는 많은 애플리케이션에 상당한 성능 향상을 제공합니다.
설정 (Setup)
단락 로컬 읽기를 구성하려면 libhadoop.so를 활성화해야 합니다. 이 라이브러리 활성화 방법은 Native Libraries를 참고하세요.
단락 읽기는 UNIX 도메인 소켓을 사용합니다. 이는 클라이언트와 DataNode가 통신할 수 있게 해 주는 파일 시스템의 특별한 경로예요. 이 소켓의 경로를 설정해야 합니다. DataNode가 이 경로를 만들 수 있어야 하고, 반면 HDFS 사용자나 root 외의 어떤 사용자도 이 경로를 만들 수 없어야 해요. 이런 이유로 /var/run이나 /var/lib 아래 경로가 자주 사용됩니다.
클라이언트와 DataNode는 /dev/shm의 공유 메모리 세그먼트를 통해 정보를 교환합니다.
단락 로컬 읽기는 DataNode와 클라이언트 양쪽에 구성해야 해요.
예시 구성 (Example Configuration)
예시 구성입니다.
<configuration>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
</configuration>
레거시 HDFS 단락 로컬 읽기 (Legacy HDFS Short-Circuit Local Reads)
클라이언트가 HDFS 블록 파일을 직접 여는 기존 단락 로컬 읽기 구현은 Linux가 아닌 플랫폼에서도 여전히 사용할 수 있습니다. dfs.client.read.shortcircuit에 더해 dfs.client.use.legacy.blockreader.local 값을 true로 설정하면 이 기능을 활성화할 수 있어요.
또한 dfs.datanode.data.dir.perm 값을 기본 700 대신 750으로 설정하고, dfs.datanode.data.dir 아래 디렉터리 트리를 클라이언트와 DataNode가 읽을 수 있게 chmod/chown 해야 합니다. 이는 클라이언트가 HDFS 권한을 우회해 모든 블록 파일을 읽을 수 있음을 의미하므로 주의해야 해요.
레거시 단락 로컬 읽기는 안전하지 않으므로, 이 기능에 대한 접근은 dfs.block.local-path-access.user 값에 나열된 사용자로 제한됩니다.
<configuration>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.client.use.legacy.blockreader.local</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>750</value>
</property>
<property>
<name>dfs.block.local-path-access.user</name>
<value>foo,bar</value>
</property>
</configuration>
더 알아보기 (Learn more)
- 원문: 문서