[HADOOP] HBase MapReduce 작업에서 기본 공유 라이브러리로드
HADOOPHBase MapReduce 작업에서 기본 공유 라이브러리로드
최근에 JNI 코드 (C ++ 사용)로 알고리즘을 구현하려고하는데 공유 라이브러리를 생성했습니다. 여기 내 JNI 수업이 있습니다.
public class VideoFeature{
// JNI Code Begin
public native static float Match(byte[] testFileBytes, byte[] tempFileBytes);
static {
System.loadLibrary("JVideoFeatureMatch");
}
// JNI Code End
}
주요 기능에서 나는
// MapReduce
Configuration conf = HBaseConfiguration.create();
// DistributedCache shared library
DistributedCache.createSymlink(conf);
// Both following ways seem work.
// DistributedCache.addCacheFile(new URI("/home/danayan/Desktop/libJVideoFeatureMatch.so#JVideoFeatureMatch"), conf);
DistributedCache.addCacheFile(new URI("hdfs://danayan-pc:9000/lib/libJVideoFeatureMatch.so#libJVideoFeatureMatch.so"), conf);
지도 방법에서는 다음 코드가 작동합니다.
public static class MatchMapper extends TableMapper<Text, IntWritable> {
@Override
public void map(ImmutableBytesWritable key, Result values, Context context) throws IOException, InterruptedException {
// Other codes
Path[] localFiles = DistributedCache.getLocalCacheFiles(context.getConfiguration());
for(Path temp:localFiles) {
String path = temp.toString();
if(path.contains("JVideoFeatureMatch")) {
System.out.println("JVideoFeatureMatch found !");
}
}
}
즉, 공유 라이브러리를 'DistributedCache'한 것으로 보이지만 Map 함수에서로드 할 수 없습니다.
public static class MatchMapper extends TableMapper<Text, IntWritable> {
@Override
public void map(ImmutableBytesWritable key, Result values, Context context) throws IOException, InterruptedException {
// Other codes
int score = (int)VideoFeature.Match(testBytes, tempBytes);
}
JNI 클래스에서 정적 함수를 호출하려고하면 'java.lang.Exception'이 발생합니다.
java.lang.UnsatisfiedLinkError: no libJVideoFeatureMatch in java.library.path.
'System.load ()'도 시도했습니다. 그리고 Linux 시스템에서 접두사 'lib'와 접미사 '.so'를 사용하는 것을 고려했습니다.
또한 jvm 인수를 설정했습니다 (제거해도 아무런 차이가 없습니다).
-Djava.library.path=/usr/local/hadoop/lib/native/Linux-amd64-64
그리고 공유 라이브러리를 'Java.library.path'(위에서 설정)로 이동하여 로컬 컴퓨터에 공유 라이브러리를 성공적으로로드했습니다.
아래 웹 사이트를 탐색했습니다.
DistributedCache를 통한 기본 라이브러리로드 문제
기본 라이브러리 안내서 hadoop 감속기에서 기본 라이브러리를로드 하시겠습니까?
내가 분명히 말했는지 모르겠지만, 그렇지 않다면 알려주십시오.
해결법
-
==============================
1.세 번째 요점은 공식 문서와 다릅니다
세 번째 요점은 공식 문서와 다릅니다
공식 문서 : Native Shared Libraries
from https://stackoverflow.com/questions/28845955/load-native-shared-libraries-in-a-hbase-mapreduce-task by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Log4j가 HDFS / Log4j.properties에 쓰지 않음 (0) | 2019.08.12 |
---|---|
[HADOOP] hadoop 기반 데이터 파이프 라인 구축을위한 스케줄링 도구 제안 (0) | 2019.08.12 |
[HADOOP] 스레드“main”java.lang.VerifyError 예외 : 피연산자 스택의 잘못된 유형 (0) | 2019.08.11 |
[HADOOP] script-runner.jar을 통해 실행중인 스크립트의 작업 흐름 ID, 기타 클러스터 매개 변수를 확인하는 방법 (0) | 2019.08.11 |
[HADOOP] 하이브 컨텍스트를 사용하여 스파크에서 하이브 테이블을 효율적으로 쿼리하는 방법은 무엇입니까? (0) | 2019.08.11 |