C API libhdfs
C API libhdfs
Hadoop 분산 파일 시스템(HDFS)을 위한 JNI 기반 C API인 libhdfs를 소개하는 문서예요. HDFS API의 일부를 C API로 제공하며, 샘플 프로그램과 라이브러리 링크 방법, 흔한 문제를 다룹니다.
출처: 문서
본문
개요 (Overview)
libhdfs는 Hadoop 분산 파일 시스템(HDFS)을 위한 JNI 기반 C API입니다. HDFS 파일과 파일 시스템을 다루기 위해 HDFS API의 일부에 C API를 제공해요. libhdfs는 Hadoop 배포의 일부이며 $HADOOP_HDFS_HOME/lib/native/libhdfs.so로 미리 컴파일되어 있습니다. libhdfs는 Windows와 호환되며, 소스 트리의 hadoop-hdfs-project/hadoop-hdfs 디렉터리에서 mvn compile을 실행해 Windows에서 빌드할 수 있어요.
API (The APIs)
libhdfs API는 Hadoop FileSystem API의 부분집합입니다.
libhdfs의 헤더 파일은 각 API를 자세히 설명하며 $HADOOP_HDFS_HOME/include/hdfs.h에 있습니다.
샘플 프로그램 (A Sample Program)
#include "hdfs.h"
int main(int argc, char **argv) {
hdfsFS fs = hdfsConnect("default", 0);
const char* writePath = "/tmp/testfile.txt";
hdfsFile writeFile = hdfsOpenFile(fs, writePath, O_WRONLY |O_CREAT, 0, 0, 0);
if(!writeFile) {
fprintf(stderr, "Failed to open %s for writing!\n", writePath);
exit(-1);
}
char* buffer = "Hello, World!";
tSize num_written_bytes = hdfsWrite(fs, writeFile, (void*)buffer, strlen(buffer)+1);
if (hdfsFlush(fs, writeFile)) {
fprintf(stderr, "Failed to 'flush' %s\n", writePath);
exit(-1);
}
hdfsCloseFile(fs, writeFile);
}
라이브러리 링크 방법 (How To Link With The Library)
libhdfs 소스 디렉터리(hadoop-hdfs-project/hadoop-hdfs/src/CMakeLists.txt)의 test_libhdfs_ops.c용 CMake 파일을 참고하거나, 다음과 같이 사용하세요: gcc above_sample.c -I$HADOOP_HDFS_HOME/include -L$HADOOP_HDFS_HOME/lib/native -lhdfs -o above_sample
흔한 문제 (Common Problems)
가장 흔한 문제는 libhdfs를 사용하는 프로그램을 호출할 때 CLASSPATH가 제대로 설정되지 않은 것입니다. Hadoop 자체를 실행하는 데 필요한 모든 Hadoop jar와 hdfs-site.xml이 있는 올바른 구성 디렉터리에 CLASSPATH를 설정해야 해요. CLASSPATH의 와일드카드 항목은 이제 libhdfs가 지원합니다.
스레드 안전 (Thread Safe)
libhdfs는 스레드 안전(thread safe)합니다.
-
동시성과 Hadoop FS "핸들" — Hadoop FS 구현은 네임노드의 URI와 연결하는 사용자에 따라 캐시하는 FS 핸들 캐시를 포함합니다. 따라서
hdfsConnect에 대한 모든 호출은 같은 핸들을 반환하지만, 서로 다른 사용자로hdfsConnectAsUser를 호출하면 서로 다른 핸들이 반환됩니다. HDFS 클라이언트 핸들이 완전히 스레드 안전하므로 동시성에는 영향을 주지 않아요. -
동시성과 libhdfs/JNI — libhdfs의 JNI 호출은 항상 스레드 로컬 저장소(thread local storage)를 만들어야 하므로, (이론적으로) libhdfs는 내부적으로 호출하는 Hadoop FS만큼 스레드 안전해야 합니다.
더 알아보기 (Learn more)
- 원문: 문서