• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

hadoop jar 명령어사용시 input

21.07.22 12:50 작성 조회수 457

0

맵리듀스 실행하기 위해 hadoop jar  ~ 명령어 쓰고 wordcout input output이라고 썼는데

output은 input경로를 참조해서 생성된다고 하셨는데..

그럼 input경로는 어디에도 주어지지 않았는데 어떻게 그 input경로를 찾았는지 궁금하고  또 무슨 파일을 분석하라고 주어지지도 않았고 txt파일인지..무슨파일인지 주어지지도 않았는데...

무조건 input 폴더안에 있는 그 어떤 파일이던 무조건 다 분석하는건지...이해가 안가네요....

답변 1

답변을 작성해보세요.

2

안녕하세요. odark 님

맵리듀스 어플리케이션은 자바로 구성되어 있기에 자바 압축 파일인 jar 명령어를 통하여 맵리듀스 잡을 실행시키는 역할이 하둡에서 가능합니다. 

하둡을 실행시킬 때 

hadoo jar [하둡 jar 파일 경로와 파일명] input output 형식으로 구성되어야 하둡 HDFS 는 맵리듀스 잡을 이해하게 됩니다.

hadoop jar 는 하둡 명령어 형식이며 

hadoop-mapreduce-examples-3.2.1.jar는 하둡이 제공하는 자바 압축 예제 파일 입니다. 곧 hadoop-mapreduce-example.jar 파일이라고 하는 jar 파일을 사용할 때 hadoop jar 명령어와 함께 사용하게 되죠.

또한 인풋 아웃풋을 함께 넣어야 합니다.

그 사이 input 경로를 하둡이 찾을 때 곧 하둡 어플리케이션이 사용자로 하여금 실행하고자 명령어를 던지면 어플리케이션 잡이 알어서 input 경로를 주지도 않았다고 input 경로를 찾는 것이 아닙니다. 경로를 반드시 지정해야 합니다.

다시 말해서 만약 어플리케이션 사용자가 맵리듀스 잡 (곧 wordcount application)을 이행하라고 명령어를 날리면서 하둡은 인풋 곧 input 의 폴더를 찾습니다.  사용자가 단순히 input이라고 폴더를 지정하면 하둡의 홈 디렉토리의 input이라고 인식합니다. 만약 사용자가 HDFS 하둡 파일 시스템에  /usr/joe/wordcount/input/ 라고 인풋 폴더를 지정한다는 말은 사용자가 이미 /usr/joe/wordcount/input/ 라는 하둡 파일 시스템의 인풋 파일에 무언가를 넣었고, 그곳으로 인풋을 넣었다는 의미를 내포합니다.

그리하여 사용자는 /usr/joe/wordcount/input/ 내에 텍스트 파일이나 자바 파일 혹은 파이선 파일을 넣었다면 맵리듀스가 그 경로 내의 파일이 몇 개가 존재하던지 간에 읽어드리게 됩니다.

hadoop jar /home/neuavenue/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /usr/joe/wordcount/input /usr/joe/wordcount/output

경로를 지정하지 않으면 인풋 파일은 하둡 파일 시스템의 홈 디럭토리 input 파일이 있어야 하며

경로를 지정하면 하둡 파일 시스템이 그 경로로 가서 input 파일 내의 파일들을 자동 분석하게 됩니다.

odark 님께서 말씀하셨듯이 "그럼 input경로는 어디에도 주어지지 않았는데 어떻게 그 input경로를 찾았는지 궁금하고"라는 말은 사실 올바른 것이 아닙니다. 경로를 지정해야 합니다.

그리고 그 경로 내에 어떤 파일 이던지 간에 데이터셋이 있다면 어느 파일이던 읽어드리는 것이 맞는 말이죠. 그러나 중요한 것은 바로 이것입니다.  "또 무슨 파일을 분석하라고 주어지지도 않았고 txt파일인지..무슨파일인지 주어지지도 않았는데... " 말은 사실 아닙니다. 무슨 파일이 중요한 것이 아니라 어느 파일 이던지 내부에 데이터셋이 있는지 없는지가 더 중요한 것이죠. 사실 어느 파일 이름이나 파일명이던지 내부에 데이터가 존재해야 합니다. 문자던 숫자던지 문자형 숫자형 csv 파일, text 파일, xml 파일 다 문자형으로 읽어들이게 되고 다만 하둡이 알아서 단어별로 조합을 하게 되는 것이죠..

아웃풋은 하둡 어플리케이션이 자동으로 만들어줍니다. 착한 어플리케이션이죠.  그러나 사용자가 임으로 경로를 지정하면 지정 해당 디렉토리에 결과값을 뿌려줍니다. 추가적으로 만약 아웃풋(output)이 이미 동일한 경로가 존재하면 하둡 파일 시스템 내의 맵리듀스 어플리케이션이 자동으로 에러를 발생합니다. 왜냐하면 고유한 데이터셋이며 데이터셋의 중복을 혀용하지 않습니다.

결과값을 한 번 뽑아낸 다음에 또 다시 데이터를 뽑아내려한다면 하둡의 중복허용을 받지 않는다는 가설을 위배하는 것이죠. 곧 데이터 중복허용은 하둡 자체에서 거부하여 에러를 발생합니다. 만약 결과값을 여러개로 보고 싶다면 output01, output02.... 어플리케이션을 실행할 때마다 다른 아웃풋 파일을 지정하면 그곳에 결과값(outout)을 남기게 됩니다.  테스트를 해보시면 됩니다.

동일한 어플리케이션을 실행시키면 하둡 맵리듀스가 결과값이 존재한다고 말해줄 겁니다. 

끝까지 강의를 들으시면 이해하게 될 것입니다. 

질문에 답이 되었는지요. 

끝까지 마무리하여 하둡 전문가로 되세요,, 저도 처음에는 이해가지 않았지만 반복하면서 알게 되었답니다.

수고하세요. 

토론토에서 빌리 올림