ОШИБКА: java.lang.IllegalMonitorStateException в коде c с использованием libhdfs

я пытался запустить программу, написанную на языке C ++, используя hdfs c api. но это не работает.
этот код написан для чтения локального файла и записи в hdfs, как hdfs dfs -put команда.

вот моя рабочая среда:

linux vesrion: 2.6.32-573.el6.x86_64
hadoop version: 2.6.5
hadoop datanode number : 1 (local)
java version: 1.8.0

hdfs-site.xml:

<property>
<name>dfs.datanode.drop.cache.behind.reads</name>
<value>true</value>
</property>

<property>
<name>dfs.datanode.drop.cache.behind.writes</name>
<value>true</value>
</property>

<property>
<name>dfs.datanode.sync.behind.writes</name>
<value>true</value>
</property>

мой код:

#include "hdfs.h"#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) {

int i = 0;
const char* writePath = "/tmp_api/file_";
const char* readPath = "data_set/file_";

hdfsFS fs;
hdfsFile writeFile;

char path[32];

char buffer[20971520 + 128];

FILE* fp;

tSize result;

tSize numWrittenBytes;

int status;

fs = hdfsConnect("default", 0);

for(i=1;i<101;i++){
memset(path, 0, 32);
sprintf(path, "%s%d", readPath, i);

fp = fopen(path, "r");

printf("read path : %s\n", path);

result = fread(buffer, 1, 20971520, fp);

fclose(fp);

memset(path, 0, 32);
sprintf(path, "%s%d", writePath, i);printf("write path : %s\nresult : %lu\n", path, result);

writeFile = hdfsOpenFile(fs, path, O_CREAT | O_WRONLY, 0, 0, 0);
if(!writeFile) {
printf( "Failed to open %s for writing!\n", path);
exit(-1);
}

numWrittenBytes = hdfsWrite(fs, writeFile, (void*)buffer, result);
if(numWrittenBytes < 0)
{
printf("error\n");
exit(-1);

}

printf("written byte : %d\n", numWrittenBytes);
if (hdfsFlush(fs, writeFile)) {
printf( "Failed to 'flush' %s\n", path);
exit(-1);
}
hdfsCloseFile(fs, writeFile);
}

hdfsDisconnect(fs);

return 0;

}

ОШИБКА :

FSDataOutputStream#close error:
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1245)
at java.lang.Thread.join(Thread.java:1319)
at org.apache.hadoop.hdfs.DFSOutputStream.closeThreads(DFSOutputStream.java:2187)
at org.apache.hadoop.hdfs.DFSOutputStream.close(DFSOutputStream.java:2232)
at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.close(FSDataOutputStream.java:72)
at org.apache.hadoop.fs.FSDataOutputStream.close(FSDataOutputStream.java:106)

Помогите мне, пожалуйста.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]