[HADOOP] subprocess.Popen를 사용하여 하둡 distcp
HADOOPsubprocess.Popen를 사용하여 하둡 distcp
나는 오류를 파이썬에서 subprocess.Popen를 사용하여 하둡 distcp 명령을 실행하고 얻기 위해 노력하고 있어요 - 잘못된 입력을. 내가 하둡 명령으로 실행하는 경우 같은 명령을 잘 실행됩니다.
하둡 명령
hadoop distcp -log /user/name/distcp_log -skipcrccheck -update hdfs://xxxxx:8020/sourceDir hdfs://xxxxx:8020/destDir
파이썬에서 :
from subprocess import Popen, PIPE
proc1 = Popen(['hadoop','distcp','-log /user/name/distcp_log -skipcrccheck -update', 'hdfs://xxxxx:8020/sourceDir', 'hdfs://xxxxx:8020/destDir'], stdout=subprocess.PIPE)
메시지 로그 :
INFO tools.OptionsParser: parseChunkSize: blocksperchunk false
INFO tools.DistCp: Input Options: DistCpOptions{atomicCommit=false, syncFolder=false, deleteMissing=false, ignoreFailures=false, overwrite=false, append=false, useDiff=false, useRdiff=false, fromSnapshot=null, toSnapshot=null, skipCRC=false, blocking=true, numListstatusThreads=0, maxMaps=20, mapBandwidth=100, sslConfigurationFile='null', copyStrategy='uniformsize', preserveStatus=[], preserveRawXattrs=false, atomicWorkPath=null, logPath=null, sourceFileListing=null, sourcePaths=[-log /user/name/distcp_log -skipcrccheck -update, hdfs://xxxxx:8020/sourceDir], targetPath=hdfs://xxxxx:8020/destDir, targetPathExists=true, filtersFile='null', blocksPerChunk=0, copyBufferSize=8192}
ERROR tools.DistCp: Invalid input:
org.apache.hadoop.tools.CopyListing$InvalidInputException: -log /user/name/distcp_log -skipcrccheck -update doesn't exist
이 소스 디렉토리로 옵션을 고려. 어떻게 이러한 옵션이고 소스로 간주되어서는 안됩니다 서브 프로세스 이야기하기 (sourcePaths의 =를 [- 로그 / 사용자 / 이름 / distcp_log -skipcrccheck -update를 HDFS : // xxxxx는 : 8020 / SOURCEDIR])?
나는 Python2.7를 사용하고 설치 및 Kerberos를 클러스터 핍 권한이 없습니다. 클러스터 내 전송을 위해이 명령을 실행하고 싶었지만 그 전에 클러스터 내에서이 간단한 명령을 시험해보고 싶었다.
감사
해결법
-
==============================
1.는 popen 첫 번째 인수 목록의 개별 요소에 명령 줄의 모든 인수를 분할 :
는 popen 첫 번째 인수 목록의 개별 요소에 명령 줄의 모든 인수를 분할 :
from subprocess import Popen, PIPE proc1 = Popen(['hadoop','distcp','-log', '/user/name/distcp_log', '-skipcrccheck', '-update', 'hdfs://xxxxx:8020/sourceDir', 'hdfs://xxxxx:8020/destDir'], stdout=subprocess.PIPE)
여기에 args ''모든 인수를 분할하여 만든 목록을해야한다고 말하는는 popen 문서를 찾을 수 있습니다.
from https://stackoverflow.com/questions/51153722/hadoop-distcp-using-subprocess-popen by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하이브 : 기존 폴더 구조에 대한 파티션을 추가 (0) | 2019.10.04 |
---|---|
[HADOOP] 하둡에 명령 줄에서 텍스트를 작성 (0) | 2019.10.04 |
[HADOOP] 하둡 미니 클러스터 모의 (MiniDFSCluster) (0) | 2019.10.04 |
[HADOOP] 윈도우 10 하둡 설치를 누락 (0) | 2019.10.04 |
[HADOOP] JobEnd 리스너 비는 HDFS 경로에서 소스 파일을 이동 촉발하는 파일을 찾을 수 없습니다 예외가 발생합니다 (0) | 2019.10.03 |