Spark, Hadoop(스파크, 하둡) Windows 환경에서 실행시 오류 해결
윈도우 환경에서 스파크를 실행시 이런 에러들을 맞딱 뜨릴 것이다.
Error1 : ERROR org.apache.hadoop.util.Shell - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
ERROR org.apache.hadoop.util.Shell - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
at org.apache.hadoop.util.Shell.(Shell.java:293)
at org.apache.hadoop.util.StringUtils.(StringUtils.java:76)
at org.apache.hadoop.conf.Configuration.getStrings(Configuration.java:1514)
at org.apache.hadoop.hbase.zookeeper.ZKConfig.makeZKProps(ZKConfig.java:113)
at org.apache.hadoop.hbase.zookeeper.ZKServerTool.main(ZKServerTool.java:46)
Error2 : java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:382)
at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:397)
at org.apache.hadoop.util.Shell.<clinit>(Shell.java:390)
at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:80)
at org.apache.hadoop.security.SecurityUtil.getAuthenticationMethod(SecurityUtil.java:611)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:274)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:262)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:807)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:777)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:650)
at org.apache.spark.util.Utils$.$anonfun$getCurrentUserName$1(Utils.scala:2412)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2412)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:303)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2555)
at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$1(SparkSession.scala:930)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:921)
at com.tutorial.spark.SimpleApp.main(SimpleApp.java:10)
원인
환경변수 HADOOP_HOME 경로가 세팅되어 있지않았고 그 경로에 Winutils.exe 파일이 없었다.
해결방법
1. HADOOP_HOME 환경변수 세팅(시스템 환경 변수 편집)
1. 아래 검색란에 '시스템 환경 변수 편집'을 입력하거나
[window]키 + Q 버튼을 눌러 '시스템 환경 변수 편집'을 입력한다.
2. 환경변수를 클릭한다.
3. 새로 만들기를 클릭한다.
4. 변수 이름과 변수 값에 위와 같이
HADOOP_HOME과 자신의 드라이브와 hadoop폴더를
C:\hadoop와 같이 입력한다.
(SPARK_HOME이 설정이 안됐다
HADOOP_HOME , SPARK_HOME에 path 에서
%HADOOP_HOME%\bin, %SPARK_HOME%\bin 으로 path 경로를 잡아주자 )
5. HADOOP_HOME 사용자 변수와 값을 확인하고 확인을 누른다.
1. HADOOP_HOME 환경변수 세팅(cmd/명령 프롬프트)
1. 아래 검색란에 명령프롬프트을 입력하거나 cmd를 입력하거나
CTRL + R (실행)를 누르고 cmd를 입력한 후
관리자 권한으로 CMD 또는 PowerShell 실행
2.
사용자 환경변수 등록 방
setx 변수명 "경로"
ex) setx HADOOP_HOME " C:\hadoop "
시스템 환경변수 등록 방법
setx /m 변수명 "경로"
ex) setx /m HADOOP_HOME " C:\hadoop "
명령 프롬프트를 열고 "C:\Hadoop\bin\winutils.exe chmod 777 /tmp/hive" 명령어를 실행
3. 관리자 권한으로 실행한 명령 프롬프트에서 bin\spark-shell을 실행
2. winutils.exe 다운로드 및 C:\Hadoop\bin 경로에 세팅
winutils.exe를 다운로드 한다.
아래 wintils.exe를 첨부파일과 다운로드 링크이다
첨부파일:
winutils.exe 다운로드 링크:
https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe
다운로드한 winutil.exe파일을
C:\hadoop\bin 경로에 winutils.exe를 옮긴다.
hadoop폴더 안에 bin폴더가 없다면 새폴더를 만들어 bin으로 바꿔준다.
이제 HADOOP/HOME 디렉토리가 잡히고
에러가 발생하지 않고 스파크가 실행된다!