2014-09-12 1 views
1

HDFS에서 읽고 쓰는 데 libhdfs를 사용하고 싶습니다. 릴리스 버전 hadoop2.5.0이 있습니다. 내가 뭘 하려는지 컴파일하고 그들이 테스트로 제공 한 코드를 실행합니다. 코드가 잘 컴파일, 여기 내가 무엇을합니까HDFS에서 파일 i/o에 libhdfs 사용

gcc -I/usr/lib/jvm/java-7-openjdk- amd64/include test/test_libhdfs_ops.c -o test.o -lhdfs -L. 나는 그것을 실행하려고 할 때마다

는하지만, 나는 다음과 같은 오류가 발생,

java.lang.NoClassDefFoundError가 예외에 대한 스택 추적을 얻을 수 없습니다

: ExceptionUtils :: getStackTrace()에 오류가 발생했습니다.

자바 클래스의 일부 jar 파일에 연결할 수 없다는 것을 깨달았습니다. Writing files in hdfs in C++ (libhdfs) 및 여기 Hadoop 2.0 JAR files과 비슷한 문제가 발견되었지만 해결하기 위해 노력했지만 성공하지 못했습니다. $ HADOOP_HOME이/주/하둡/HDFS/ : $ HADOOP_HOME/주/하둡/실/: $ 여기 내 CLASSPATH의 ENV 변수

CLASSPATH = $ HADOOP_HOME이/주/하둡/일반/로 설정 한거야 HADOOP_HOME/주/하둡/맵리 듀스/ : $ HADOOP_HOME/주/하둡/httpfs/: $ HADOOP_HOME/주/하둡/도구/

내가 무슨 말이냐?

답변

0

글쎄, jar 파일이 CLASSPATH에서 루트 디렉토리를 지정하는 것만으로 연결되지 않는다는 것을 알았습니다. 명시 적으로 $ HADOOP_HOME/share/hadoop/common/lib에있는 모든 jar 파일의 경로와 hdfs 폴더에있는 다른 jar 파일의 경로를 CLASSPATH env 변수에 추가해야했습니다.

간단한 파이썬 스크립트를 작성하면 모든 작업이 완료됩니다. 여기에 스크립트가 보이는 방법

!/usr/bin/python 부분을

수입 OS

PATH = '경로 /로/당신의/병/파일/디렉토리 /'

os.environ [ 'CLASSPATH'= 'temp_path'

때 listFiles = [] list_file = 'os.walk에서 루트 DIRS, FILE_NAME (PATH)에 대한

: 대 FILE_NAME에 이름 : 를 이름으로하는 경우 "의 .jar" 경로 = os.path.join (루트, 이름) list_file + = ':'+ 경로

인쇄 '

os.environ의 [

list_file CLASSPATH '] = os.environ ['CLASSPATH '] + list_file

인쇄 os.environ ['CLASSPATH ']

관련 문제