복붙노트

[HADOOP] Python을 통해 HDFS에서 여러 파일 처리

HADOOP

Python을 통해 HDFS에서 여러 파일 처리

HDFS에는 약 10,000 개의 .xml 파일이 포함 된 디렉토리가 있습니다. 파일을 가져 와서 처리하는 파이썬 스크립트 "processxml.py"가 있습니다. hdfs 디렉토리의 모든 파일에서 스크립트를 실행할 수 있습니까, 아니면 먼저 로컬로 복사해야합니까?

예를 들어, 로컬 디렉토리의 파일에서 스크립트를 실행하면 다음이 있습니다.

cd /path/to/files

for file in *.xml
do
python  /path/processxml.py 
$file > /path2/$file
done

그래서 기본적으로 어떻게 똑같이 할 수 있지만 이번에는 파일이 hdfs에 있습니까?

해결법

  1. ==============================

    1.기본적으로 두 가지 옵션이 있습니다.

    기본적으로 두 가지 옵션이 있습니다.

    1) hadoop 스트리밍 커넥터를 사용하여 MapReduce 작업을 작성하십시오 (여기서는 맵 부분 만 필요함). 쉘 또는 쉘 스크립트에서이 명령을 사용하십시오.

    hadoop jar <the location of the streamlib> \
            -D mapred.job.name=<name for the job> \
            -input /hdfs/input/dir \
            -output /hdfs/output/dir \
            -file your_script.py \
            -mapper python your_script.py \
            -numReduceTasks 0
    

    2) PIG 스크립트를 작성하고 파이썬 코드를 제공하십시오. 다음은 스크립트의 기본 예입니다.

    input_data = LOAD '/hdfs/input/dir';
    DEFINE mycommand `python your_script.py` ship('/path/to/your/script.py');
    updated_data = STREAM input_data THROUGH mycommand PARALLEL 20;    
    STORE updated_data INTO 'hdfs/output/dir';
    
  2. ==============================

    2.파일에서 데이터를 처리해야하거나 / cp / rm / etc를 이동하십시오. 파일 시스템 주위에 PySpark (Python 인터페이스가있는 Spark)가 최고의 옵션 (속도, 메모리) 중 하나입니다.

    파일에서 데이터를 처리해야하거나 / cp / rm / etc를 이동하십시오. 파일 시스템 주위에 PySpark (Python 인터페이스가있는 Spark)가 최고의 옵션 (속도, 메모리) 중 하나입니다.

  3. from https://stackoverflow.com/questions/35070998/processing-multiple-files-in-hdfs-via-python by cc-by-sa and MIT license