この短いコードは、Hadoopファイルシステム(HDFS)のテキストファイルからlibhdfsを使用してバイトを読み取ります。コンパイルして正常に動作します。私は今テキストファイルの内容を読むことができるようにコードを変更しようとしています。 (HDFSからのテキストファイルの読み取りと印刷
char buffer[MAXBUFLEN+1] = {};
は、最大バッファ長を渡し:あなたはあなたのバッファをこのように初期化する必要があります
#include "jni.h"
#include "hdfs.h"
#include "string.h"
#include "stdlib.h"
int
main(int argc, char **argv)
{
int MAXBUFLEN = 1024;
hdfsFS fs = hdfsConnect("default", 0);
const char* readPath = "/tmp/testfile.txt";
hdfsFile readFile = hdfsOpenFile(fs, readPath, O_RDONLY, 0, 0, 0);
if(!readFile) {
fprintf(stderr, "Failed to open %s for writing!\n", readPath);
exit(-1);
}
char buffer[MAXBUFLEN+1];
int bytes = hdfsRead(fs, readFile, buffer, strlen(buffer));
buffer[MAXBUFLEN] = '\0';
hdfsCloseFile(fs, readFile);
return 0;
}
、ここであなたは、リモートからファイルにアクセスしていないが、ローカルに。ハード・ディスク上にhadoopで作成したローカル・シングル・ノードのクラスタ・ファイルを読み込み、ファイルを読み書きするだけで、それをグーグルで練習しています。:) – ArifMustafa
@ArifMustafa回答。私は遠隔からファイルにアクセスしているわけではないことも承知しています。私はちょうど同じHadoop環境(Hortonworks Sandbox)でローカルにHDFSのトラフC++にあるファイルにアクセスして読みたいと思っています。 https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/LibHdfs.htmlのサンプルプログラムを見てみると、ローカルにHDFSに書き込む例が表示されます。私はまったく同じことをしたいが、その代わりに読んで印刷する。 –
あなたがハープのクラスタにアクセスしていることを意味するわけではなく、あなたはまだローカル環境にいます。あなたはそのようなウィンドウ、linux、macoxなどのホストにいるか、または仮想ボックスvmware wrkstnを通してゲストOSを使用しています。プレーヤー、Hyper-V Broはあなたのクラスファイルの近くにテキストファイルを置いて、それを練習しようとします。このリンクを見てください。https://www.codesdope.com/cpp-file-io/参考になったら、ありがとう。 – ArifMustafa