파이프 로 hadop put 파일

1229 단어 linuxhadoopunix
hadop file 셸 을 사용 하면 hdfs put 파일 에 편리 하 게 접근 할 수 있 지만,이 셸 은 파이프 에서 데 이 터 를 읽 고 hdfs 파일 에 넣 는 것 을 지원 하지 않 습 니 다.이것 은 이러한 put 명령 만 지원 합 니 다:
cd $HADOOP_HOME
bin/hadoop fs -put localfile $hdfsFile
bin/hadoop fs -put localfiles $hdfsDir

 다행히 주류 유 닉 스(Liux,bsd 등)는 모두/dev/fd/디 렉 터 리 가 있어 서 파이프 put 파일 을 실현 할 수 있 습 니 다.
cd $HADOOP_HOME
if bin/hadoop fs -test -d $hdfsFile
then
    echo "$hdfsFile is a directory" >&2
    exit 1
fi
cat localfileS | bin/hadoop fs -put /dev/fd/0  $hdfsFile
if [[ "0 0" == ${PIPESTATUS[*]} ]]
then
    echo success
else
    bin/hadoop fs -rm $hdfsFile
    echo failed >&2
fi 

그 중에서PIPESTATUS 검사 오류 사용
 
/dev/fd/0 put 파일 을 사용 할 때 hdfsFile 은 사전에 존재 하지 않 고 디 렉 터 리 가 될 수 없습니다.hdfsFile 이 실제 디 렉 터 리 라면 put 는 올 바 르 게 실 행 됩 니 다.그러나 hdfs 의 파일 이름 은 hdfsFile/0 입 니 다.
 
/dev/fd/는 프로 세 스 가 열 린 모든 파일 설명자 목록 입 니 다.예 를 들 어/dev/fd/0 은 표준 입력,/dev/fd/1 은 표준 출력,/dev/fd/2 는 표준 오류 출력 등 을 대표 합 니 다./dev/fd/n 을 열 면 dup(n)을 호출 하 는 것 과 같 습 니 다.

좋은 웹페이지 즐겨찾기