2014-07-22 3 views
0

약 30G 개의 파일 (50MB에서 4GB까지)을 Google Cloud Storage에 매일 업로드해야한다고 Google 문서에 따르면 gsutil이 유일한 선택 일 수 있습니다. 그렇지 않습니다. ?Google 클라우드 저장소 gsutil 도구 (자바 포함)

Java에서 gsutil 명령을 호출하려고합니다. 이제 아래 코드가 작동합니다. 하지만 while 루프를 삭제하면 프로그램이 runtime.exec (명령) 바로 뒤에 멈추지 만 파이썬 프로세스가 시작되었지만 업로드를하지 않으면 곧 종료됩니다. 이유가 궁금합니다.

내가 sterr 스트림에서 읽을 이유는 내가 의한 상태 출력의 마지막 줄 util을 읽어 실행 완료 인 gsutil 여부를 결정

Pipe gsutil output to file에서 영감을하지만, 신뢰할 수있는 방법입니다? gsutil 실행이 Java로 끝나는 지 여부를 감지하는 더 좋은 방법이 있습니까?

String command="python c:/gsutil/gsutil.py cp C:/SFC_Data/gps.txt" 
      + " gs://getest/gps.txt"; 
try { 
     Process process = Runtime.getRuntime().exec(command); 
     System.out.println("the output stream is "+process.getErrorStream()); 
     BufferedReader reader=new BufferedReader(new InputStreamReader(process.getErrorStream())); 
     String s; 
     while ((s = reader.readLine()) != null){ 
      System.out.println("The inout stream is " + s); 
     }     
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

답변

6

GCS에 하루에 30G 상당의 데이터를 업로드하는 방법은 여러 가지가 있습니다. Java로 작업하고 있으므로 Cloud Storage API Java 클라이언트 라이브러리를 사용 해본 적이 있습니까? 더 while 루프가없는 경우 Runtime.exec의()를 사용하여 자바에서 인 gsutil 호출에 대한 구체적인 질문에 대해서는 https://developers.google.com/api-client-library/java/apis/storage/v1

, 나는 의심, 프로그램은 "프로세스"변수를 일으키는 원인이되는 하위 프로세스를 생성 한 후 즉시 종료됩니다 GC로 처리되어 하위 프로세스를 중지시킬 수 있습니다.

나는 당신이 서브 프로세스가 완료 될 때까지 기다려야한다고 생각하는데, 이것은 while 회 돌이가하는 일을 효과적으로 설명한다. 또는 출력을 신경 쓰지 않으면 waitFor()를 호출하고 existValue()를 확인할 수 있습니다. http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html

+0

하, 혼란스러워. 이전에 파일 API 기능을 포기해야하는 GCS Java API라고도하는이 https://developers.google.com/appengine/docs/java/googlestorage/을 발견했습니다. 그래서 그 페이지는 "GCS Client Library"를 찾았고 웹 애플리케이션 인 샘플 코드를 얻었습니다. 나는 그것을 시도했다, 4GB 파일을 업로드하는 것은 gsutil에 의해 5 분 동안 20 분 정도 걸렸다. 이 하나는 웹 응용 프로그램 대신 Java 응용 프로그램에 사용됩니다. 당장은 지금 내가 원하는 것입니다. 정말 고마워. 나는 그것을 확실히 시도 할 것이다. – foxwendy

+0

그러나이 두 가지 "클라이언트 라이브러리"(Java 용)의 근본적인 차이점은 아직 없습니다 ... – foxwendy

+0

그리고이 API를 둘러싼 재개 가능한 업로드에 대해 찾았습니까? 나는 RESTful API를 사용하여 웹 애플 리케이션에 의해 사용 된 발견했다. – foxwendy

0

Zhihong Yao의 설명에 따라 다음 그림을 그립니다. 그것이 내 것과 같은 질문을 가진 사람을 도울 수 있기를 바랍니다.

enter image description here

관련 문제