2014-12-24 7 views
0

나는 hadoop에 초보자이며 hdfs를 통해 파일을 업로드하고 다운로드하려고합니다. 자바 코드. HDFS에서자바 코드를 사용하여 hdfs에 파일을 업로드하고 다운로드하는 방법

hadoop fs -get or -copyToLocal filename directoryName 

다운로드

hadoop fs -put or -copyFromLocal filename directoryName 

및 데이터 :

데이터 업로드으로 행동해야한다. 데이터 세트에 이미지, 오디오, 비디오 등의 파일이 포함되어 있기 때문에이 파일이 필요합니다. 위의 명령은 모든 유형의 데이터에서 잘 작동하지만 Java I/O 판독기 코드를 사용하면 텍스트 파일은 정상적으로 작동하지만 이미지, 비디오는 정상적으로 작동하지 않습니다. docx 등.

pls 여기에 도움이됩니다.

여기에 편집 :

public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 

     Configuration conf=new Configuration(); 
     FileSystem fs = FileSystem.get(conf); 

     Path path=new Path("data"); 
     Path file=new Path(path,"screenshots.png"); 

     BufferedImage image = ImageIO.read(new File("/home/hduser/Desktop/screenshots.png")); 
     if (!fs.exists(path)) 
      throw new IOException("Output not found!"); 

     ImageIO.write(image, "png", fs.open(path)); 


    } 

으로 내가 여기 내가 HDFS에 이미지 파일을 업로드하기 위해 사용하고 코드를 편집 한 물었다. 여기 ImageIO.write은 파일을 요청하기 때문에 fs.open(path)을 받아들이지 않습니다.하지만 여기에 경로를 지정하고 hdfs에 경로를 지정해야합니다. 사실 나는 모든 유형의 데이터에 대한 코드를 사용하여 hdfs에서 파일을 업로드하고 다운로드하는 방법이 필요하므로 모든 유형의 파일에 대해 코드를 작성하고 플러그인을 사용해서는 안됩니다.

+0

사용하려는 코드를 표시하고 올바르게 작동하지 않는다고 생각하는 이유를 정확하게 알려 주시기 바랍니다. – yole

+0

답장을 보내 주셔서 감사합니다. 나는 편집 된 질문을 가지고있다. –

+0

친숙한 Spring의 경우 [Spring Hadoop] (http://projects.spring.io/spring-hadoop/)을 사용할 수 있습니다. [예제 예제보기] (https://github.com/spring- Groovy 파일을 사용하여 입력 파일을 hdfs로 옮기고 Map-Reduce를 작업으로 실행합니다. –

답변

2

ImageIO.write는 File뿐만 아니라 OutputStream도 취할 수 있습니다. 그러나 fs.open은 파일 읽기 전용이므로 InputStream을 반환합니다.

ImageIO.write(image, "png", fs.create(file)); 

작성 방법은 ImageIO에서이 쓸 수있는 OutputStream 반환합니다

당신은 호출해야합니다. path 만약

http://hadoop.apache.org/docs/r2.2.0/api/org/apache/hadoop/fs/FileSystem.html

+0

안녕하세요 Paolo, 작동합니다 .. 할 수 있겠습니까? 모든 유형의 파일 형식을위한 코드를 작성하지 않고 모든 유형의 파일을 hdfs에 업로드하고 hdfs에서 다운로드하는 데 사용합니다. +1 –

+0

표준 Java FileInputStream을 사용하여 원하는 파일을 열고 읽은 다음 출력을 HDFS 출력 스트림에 씁니다.도움이 될 수 있습니다 : http://stackoverflow.com/questions/43157/easy-way-to-write-contents-of-a-java-inputstream-to-an-outputstream – Paolo

+0

감사 파올로. 그것은 모두 작동합니다. –

0
  1. 은 이미 당신이 당신의 이미지와 해당 파일을 덮어 쓸 것보다 존재한다. HDFS에 기존 폴더에 이미지를 저장하고 싶습니다. 이 경우 이미지를 new Path(path, "SomeImageName.png");에 작성해야합니다.
  2. 로컬 파일 시스템에서 HDFS으로 이미지를 복사하는 데 ImageIO을 사용할 필요가 없습니다. FileSystemcopyFromLocalFile 방법을 사용해보십시오.

    fs.copyFromLocalFile (새 경로 ("/ home/hduser/Desktop/screenshots.png") 경로);

관련 문제