我创建了一个java函数来打开HDFS中的文件。该功能仅用于API HDFS。我没有在我的代码中使用任何Hadoop依赖项。我的函数运行良好:
public static openFile()
{
System.out.print("main for testing the Hdfs WEB API");
URL url = new URL("http://URI/webhdfs/v1/PATH_TO_File?op=OPEN");
try {
HttpURLConnection con = (HttpURLConnection) url.openConnection() ;
con.setRequestMethod("GET");
con.setDoInput(true);
InputStream in = con.getInputStream();
int ch;
while((ch=in.read())!=-1)
{
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
我正在做一个新函数来返回HDFS中的文件列表。第二个函数是:
public static ListFile()
{
System.out.print("main for testing the Hdfs WEB API");
URL url = new URL("http://URI/webhdfs/v1/PATH_TO_File?op=LISTSTATUS");
try {
HttpURLConnection con = (HttpURLConnection) url.openConnection() ;
con.setRequestMethod("GET");
con.setDoInput(true);
InputStream in = con.getInputStream();
logger.info("list is '{}' ", url.openStream());
} catch (IOException e) {
e.printStackTrace();
}
}
你能帮帮我吗,我怎么能返回HDFS中使用流的文件列表,以获得使用扫描仪的响应?当我在浏览器中运行url时,知道它们运行良好。提前感谢
您可以使用与第一个解决方案完全相同的逻辑,但这一次,使用StringBuilder获得完整的响应,然后需要使用JSON库解析。
InputStream in = con.getInputStream();
int ch;
StringBuilder sb = new StringBuilder();
while((ch=in.read())!=-1) {
sb.append((char) ch);
}
String response = sb.toString();
// TODO: parse response string
注意:像Retrofit/Gson这样的库会使这更直接