2018.10.26
前言
某項目使用HDFS Java API操作HDFS,但在本地機器運行單元測試時發現會出現permission denied的問題,原因是該單元測試是直接操作HDFS集羣,而本地運行單測時默認會使用本地機器的登錄用戶去操作HDFS。爲了保證單測在不同機器上運行結果一致,就需要在配置HDFS時設置集羣環境中的遠程用戶。
方法
參考Hadoop Java API Doc1,使用UserGroupInformation
創建一個遠程用戶:
UserGroupInformation ugi = UserGroupInformation.createRemoteUser('hdfsUser');
try {
ugi.doAs(new PrivilegedExceptionAction() {
public Void run() throws Exception {
try {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "http://remoteServerIP");
conf.set("hadoop.job.ugi", "hdfsUser");
FileSystem fs = FileSystem.get(conf);
// ...
} catch (IOException e) {
e.printStackTrace();
}
}
});
} catch (Exception e) {
e.printStackTrace();
}