gpt4 book ai didi

java - 来自 Java 的 HDFS - 指定用户

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:31 26 4
gpt4 key购买 nike

我很高兴连接到 HDFS 并列出我的主目录:

Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop:8020");
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
RemoteIterator<LocatedFileStatus> ri = fs.listFiles(fs.getHomeDirectory(), false);
while (ri.hasNext()) {
LocatedFileStatus lfs = ri.next();
log.debug(lfs.getPath().toString());
}
fs.close();

不过,我现在想做的是作为特定用户(而不是 whois 用户)进行连接。有谁知道您如何指定以哪个用户身份连接?

最佳答案

我一看到这是通过 UserGroupInformation 类和 PrivilegedActionPrivilegedExceptionAction 完成的。这是连接到远程 HDFS 的示例代码,“就像”不同的用户(在本例中为“hbase”)。希望这能解决您的任务。如果您需要带有身份验证的完整方案,则需要改进用户处理。但是对于 SIMPLE 身份验证方案(实际上没有身份验证),它工作得很好。

package org.myorg;

import java.security.PrivilegedExceptionAction;

import org.apache.hadoop.conf.*;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;

public class HdfsTest {

public static void main(String args[]) {

try {
UserGroupInformation ugi
= UserGroupInformation.createRemoteUser("hbase");

ugi.doAs(new PrivilegedExceptionAction<Void>() {

public Void run() throws Exception {

Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://1.2.3.4:8020/user/hbase");
conf.set("hadoop.job.ugi", "hbase");

FileSystem fs = FileSystem.get(conf);

fs.createNewFile(new Path("/user/hbase/test"));

FileStatus[] status = fs.listStatus(new Path("/user/hbase"));
for(int i=0;i<status.length;i++){
System.out.println(status[i].getPath());
}
return null;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}

关于java - 来自 Java 的 HDFS - 指定用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16768115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com