트러블슈팅

winutils에 대해서

吳버플로우 2025. 1. 6. 12:02

문제 상황 요약

C:\\Users\\사용자명>python C:\\Users\\사용자명\\Desktop\\python\\main.py
24/09/23 15:40:22 WARN Shell: Did not find winutils.exe: java.io.FileNotFoundException: Hadoop bin directory does not exist: C:\\Program Files\\Hadoop\\bin -see <https://wiki.apache.org/hadoop/WindowsProblems>

로컬에 하둡을 설치한게아니라 도커에 깔아서 winutils이 필요한가? 라는 생각을 하게 되었고, 더 알아보기 위해 글을 작성하게 되었습니다.

해결 방법

제가 프로젝트를 했을 당시는, Spark가 로컬 파일(파이썬) 시스템에 접근해야 하는 경우이므로 winutils이 필요했습니다.

따라서 코드에 하둡 버전에 맞는 winutils을 설치후 경로를 설정해줍니다.

C:\Program Files\Hadoop\bin 에 설치를 해주고 , 시스템 환경변수 설정을 통해 hadoop home과 path를 등록하고, 파이썬에도 이 코드를 추가하며 해결하였습니다.

import os
os.environ['HADOOP_HOME'] = r'C:\\Program Files\\Hadoop' # winutils.exe가 있는 폴더 경로 
os.environ['PATH'] = r'C:\\path\\to\\winutils;' + os.environ['PATH'] 

winutils.exe의 주요 역할

  1. 파일 시스템 접근 권한 설정:
    • Hadoop은 파일 시스템 접근 시 권한을 확인합니다. 리눅스에서는 chmod, chown 같은 명령어를 통해 권한을 설정할 수 있지만, Windows에는 이러한 명령어가 없습니다. winutils.exe는 이러한 명령어를 에뮬레이션하여 Hadoop이 Windows에서 올바르게 작동하도록 돕습니다.
  2. Hadoop 임시 디렉토리 생성 및 관리:
    • Hadoop은 작업 중 임시 디렉토리를 생성하고 관리하는데, 이 과정에서 특정 권한이 필요합니다. winutils.exe는 이러한 임시 디렉토리 생성 및 권한 관리 작업을 Windows에서 수행할 수 있게 해줍니다.
  3. Hadoop과 Spark 오류 방지:
    • Windows 환경에서 winutils.exe가 없을 경우, 권한 오류나 임시 디렉토리 관련 오류가 발생할 수 있습니다. winutils.exe는 이러한 오류를 방지하여 Hadoop과 Spark 작업이 Windows에서 원활하게 실행되도록 합니다.