我在从虚拟机Ubuntu上运行hadoop群集的主机(Windows)获取文件时出现问题。在Hadoop Virtualbox群集上访问文件
我看到集群从主机(http://192.168.56.105:8088/cluster)和Java脚本看到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
当我运行在群集vmbox此相同的脚本Ubuntu的我得到的文件和正确的。
可能问题是namenode尝试搜索不同地方的数据(_1673?),当ip或用户不同 - 但我找不到这个问题的正确配置。
感谢您的咨询。
的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();
}
}
}