仮想マシンUbuntuで動作するhadoopクラスタからホストマシン(ウィンドウ)からファイルを取得する際に問題があります。私は、ホストマシン(http://192.168.56.105:8088/cluster)、およびJavaスクリプトからクラスタ見るHadoop Virtualbox Cluster上のファイルへのアクセス
は、HDFS上のフォルダ構造を参照してください、私は読んでファイルをしようとすると、私はこのエラーを取得:
org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1570018429-127.0.0.1-1484660807169:blk_1073742497_1673 file=/Item/part-r-00000
Iクラスタvmbox上でこの同じスクリプトを実行すると、 ubuntu私はファイルを取得し、正しい。
おそらく問題は、IPアドレスまたはユーザーが異なる場合、別の場所(_1673?)でnamenodeの検索データを試してみることですが、この問題の正しい設定が見つからない可能性があります。
ありがとうございました。
Linuxユーザー:wukkie
これはスクリプトです:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.security.PrivilegedExceptionAction;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.UserGroupInformation;
public class InsertReommendationToDB {
private static Configuration getConfiguration(){
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.56.105:54310/");
conf.set("hadoop.job.ugi", "wukkie");
return conf;
}
public static void main(String args[]){
try {
UserGroupInformation ugi = UserGroupInformation.createProxyUser("wukkie", UserGroupInformation.getLoginUser());
ugi.doAs(new PrivilegedExceptionAction<Void>() {
Path filepath = new Path("/Item/part-r-00000");
public Void run() throws Exception {
FileSystem fs = filepath.getFileSystem(getConfiguration());
FSDataInputStream inputStream = fs.open(filepath);
String line;
line = inputStream.readLine();
while(line != null){
System.out.println(line);
line = inputStream.readLine();
}
return null;
}
});
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}