[HADOOP] 프로그래밍 텍스트 파일의 내용은 HDFS 사용하여 Java에 저장 읽어 들이기
HADOOP프로그래밍 텍스트 파일의 내용은 HDFS 사용하여 Java에 저장 읽어 들이기
어떻게 HDFS에서 디렉토리 / 단어에 저장된 텍스트 파일에서 바이트를 읽을 수있는이 간단한 자바 프로그램을 실행합니까? 내가 할 목적으로 jar 파일을 작성해야합니까? 제안하십시오.
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.hadoop.*;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class filesystemhdfs
{
public static void main(String args[]) throws MalformedURLException, IOException
{
byte[] b=null;
InputStream in=null;
in=new URL("hdfs://localhost/words/file").openStream();
in.read(b);
System.out.println(""+b);
for(int i=0;i<b.length;i++)
{
System.out.println("b[i]=%d"+b[i]);
System.out.println(""+(char)b[i]);
}
}
}
해결법
-
==============================
1.당신은 HDFS API를 사용할 수 있습니다,이 지역에서 실행할 수 있습니다 :
당신은 HDFS API를 사용할 수 있습니다,이 지역에서 실행할 수 있습니다 :
Configuration configuration = new Configuration(); configuration.set("fs.defaultFS", "hdfs://namenode:8020"); FileSystem fs = FileSystem.get(configuration); Path filePath = new Path( "hdfs://namenode:8020/PATH"); FSDataInputStream fsDataInputStream = fs.open(filePath);
-
==============================
2.첫째, 당신은 URL을 오브젝트의 HDFS 방식에 대한 JVM을 말할 필요가있다. 이를 통해 이루어집니다 :
첫째, 당신은 URL을 오브젝트의 HDFS 방식에 대한 JVM을 말할 필요가있다. 이를 통해 이루어집니다 :
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
자바 클래스를 컴파일 한 후에는 하둡 명령을 사용합니다 :
hadoop filesystemhdfs
하둡은 편리한 IOUtils와 함께 제공됩니다. 그것은 당신을 위해 물건을 많이 완화됩니다.
-
==============================
3.일반 파일 시스템에 자바가 지원하는 당신은 HDFS에서 파일을 읽을 수 없습니다. 당신은이에 대한 HDFS 자바 API를 사용해야합니다.
일반 파일 시스템에 자바가 지원하는 당신은 HDFS에서 파일을 읽을 수 없습니다. 당신은이에 대한 HDFS 자바 API를 사용해야합니다.
public static void main(String a[]) { UserGroupInformation ugi = UserGroupInformation.createRemoteUser("root"); try { ugi.doAs(new PrivilegedExceptionAction<Void>() { public Void run() throws Exception { Configuration conf = new Configuration(); //fs.default.name should match the corresponding value // in your core-site.xml in hadoop cluster conf.set("fs.default.name","hdfs://hostname:9000"); conf.set("hadoop.job.ugi", "root"); readFile("words/file",conf) return null; } }); } catch (Exception e) { e.printStackTrace(); } } public static void readFile(String file,Configuration conf) throws IOException { FileSystem fileSystem = FileSystem.get(conf); Path path = new Path(file); if (!ifExists(path)) { System.out.println("File " + file + " does not exists"); return; } FSDataInputStream in = fileSystem.open(path); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line = null; while((line = br.readLine())!= null){ System.out.println(line); } in.close(); br.close(); fileSystem.close(); } public static boolean ifExists(Path source) throws IOException { FileSystem hdfs = FileSystem.get(conf); boolean isExists = hdfs.exists(source); System.out.println(isExists); return isExists; }
내가 PrivilegedExceptionAction와의 실행 방법에 UserGroupInformation 및 쓰기 코드를 사용하고 여기 왜 내가 원격 시스템에서 시도하고, 그입니다. 로컬 시스템에있는 경우에 당신은 그것을 필요로하지 않을 수 있습니다. HTH!
from https://stackoverflow.com/questions/22020286/programatically-reading-contents-of-text-file-stored-in-hdfs-using-java by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하둡에서 아 브로 형식의 데이터를 읽기 / 맵리 듀스 (0) | 2019.10.13 |
---|---|
[HADOOP] 하둡 : 작은 파일 CombineFileInputFormat을 사용 하는가는 성능 향상을 제공합니다? (0) | 2019.10.13 |
[HADOOP] 원격 이클립스 디버깅 하둡 (0) | 2019.10.13 |
[HADOOP] HDFS : 파일 업로드 후 배포되지 않습니다 (0) | 2019.10.13 |
[HADOOP] 어떻게 자바 / 스칼라에서 Nutch 내용을 읽어? (0) | 2019.10.13 |