【Hadoop】Hadoop ~ 環境設定 / Windows編 ~

■ はじめに

Windows 上に Hive(ハイヴ)環境を作りたいのだが
Hadoop が前提条件としてあるので、
まずは、Windows 上に Hadoop を入れてみる

注意点

現状(2019/12/27)、2点。

1)Hadoop v3.2.1 について

Hadoop v3.2.1 は問題がある模様。
実際に「hdfs namenode -format」を行ったら同じエラーになった。
 => Versionを下げて対応する
  => 今回は、v3.1.3(v2.9.2でも同じ方法でできた)

https://stackoverflow.com/questions/58461455/failed-to-start-namenode

I resolved the issue by installing Hadoop 2.9.1,
there was namenode issue in Hadoop 3.2.1 version
 hdfs namenode issue in 3.2.1

https://issues.apache.org/jira/browse/HDFS-14890

2)JDK について

JDK13 でトライしたが、うまく動かなかったので
JDK8 を動かす

■ 設定環境

OS : Windows10
Java : jdk-8u231-windows-x64
Hadoop : v3.1.3

■ 設定手順

前提条件

Java と 環境変数「JAVA_HOME」「PATH」が設定されていること

【設定例】
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_231
PATH=;%JAVA_HOME%\bin

※補足
「Program Files」のように空白があると、はまりポイントなので
なるべく空白は避けたほうがいい

【1】Hadoop の設定

[1-1] Hadoopのダウンロード

以下のサイトからHadoopをダウンロードする
 => 今回は、「hadoop-3.1.3.tar.gz」

https://hadoop.apache.org/releases.html
古いバージョン
http://ftp.kddilabs.jp/infosystems/apache/hadoop/common/
[1-2] Hadoopのインストール

任意の場所に解凍する
 => tar.gzなので、7Zipなどの解凍ソフトやtarコマンドで解凍
 => 今回は、「C:\work\hadoop-3.1.3」

[1-3] 環境変数の設定

【設定例】
HADOOP_HOME="C:\work\hadoop-3.1.3"
PATH=;%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin

【2】winutils の設定

[2-1] winutils のダウンロード

以下のサイトからapache-hadoop-winutilsをダウンロードする
 => 今回は、「apache-hadoop-3.1.0-winutils-master.zip」

https://github.com/s911415/apache-hadoop-3.1.0-winutils
古いバージョン
https://github.com/steveloughran/winutils
[2-2] winutils の設定

ダウンロードしたZIPファイルを解凍し、
中にあるbinファルダを「%HADOOP_HOME%\bin」に上書きする
 => 今回は、「C:\work\hadoop-3.1.3\bin」
 => 中に「winutils.exe」があることを確認する

【3】Hadoop のデータ格納先の準備

任意の場所に、DataNode、NameNode用のファルダを作成する。

今回は、「C:\work\hadoop-3.1.3」配下に
ファルダを以下のように作成する
C:\work\hadoop-3.1.3
 + data
     + datanode
     + namenode

【4】Hadoop の設定ファイルの修正

%HADOOP_HOME%\etc\hadoop 配下にあるファイルを修正する
(不安な場合は、ファイルを一旦バックアップをしてから行う)

C:\work\hadoop-3.1.3\etc\hadoop\hdfs-site.xml

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
   <property>
      <name>dfs.namenode.name.dir</name>
      <!-- ここは自分の環境に合わせる -->
      <value>file:///C:/work/hadoop-3.1.3/data/namenode</value>
   </property>
   <property>
      <name>dfs.datanode.data.dir</name>
      <!-- ここは自分の環境に合わせる -->
      <value>file:///C:/work/hadoop-3.1.3/data/datanode</value>
   </property>
</configuration>

C:\work\hadoop-3.1.3\etc\hadoop\core-site.xml

<configuration>
   <property>
       <name>fs.defaultFS</name>
       <value>hdfs://localhost:9000</value>
   </property>
</configuration>

C:\work\hadoop-3.1.3\etc\hadoop\mapred-site.xml

<configuration>
   <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
   </property>
</configuration>

C:\work\hadoop-3.1.3\etc\hadoop\yarn-site.xml

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
</configuration>

【5】hadoop-config.cmd の修正

修正前に... (修正理由)

「hadoop -help」のコマンドを行うと、以下のようなエラーになる。
原因は、JDKのパスで「Program Files」のように
空白があるためなのだが、そのためにJavaを入れ替えるのも
なんなので、バッチを修正する
~~~~
指定されたパスが見つかりません。
Error: JAVA_HOME is incorrectly set.
       Please update C:\work\hadoop-3.1.3\etc\hadoop\hadoop-env.cmd
~~~~

※補足
ここで「hadoop-env.cmd」を修正すると更にはまる

C:\work\hadoop-3.1.3\libexec\hadoop-config.cmd

【修正前】
if not exist %JAVA_HOME%\bin\java.exe (
【修正後】
if not exist "%JAVA_HOME%\bin\java.exe" (

【修正前】
set JAVA=%JAVA_HOME%\bin\java
【修正後】
set JAVA="%JAVA_HOME%\bin\java"

【修正前】
for /f "delims=" %%A in ('%JAVA% -Xmx32m %HADOOP_JAVA_PLATFORM_OPTS% -classpath "%CLASSPATH%" org.apache.hadoop.util.PlatformName') do set JAVA_PLATFORM=%%A
【修正後】
for /f "delims=" %%A in ("'%JAVA%' -Xmx32m %HADOOP_JAVA_PLATFORM_OPTS% -classpath '%CLASSPATH%' org.apache.hadoop.util.PlatformName") do set JAVA_PLATFORM=%%A

【6】Jarの配置

修正前に... (修正理由)

「start-yarn」のコマンドを行うと、以下のようなエラーになる。
===
2019-12-27 22:18:51,305 FATAL resourcemanager.ResourceManager: Error starting ResourceManager
java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/server/timelineservice/collector/TimelineCollectorManager
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
...
===

以下のサイトで対処法が載ってる

https://stackoverflow.com/questions/51118358/noclassdeffounderror-org-apache-hadoop-yarn-server-timelineservice-collector-tim

this worked: copy "hadoop-yarn-server-timelineservice-3.0.3.jar" from ~\hadoop-3.0.3\share\hadoop\yarn\timelineservice to ~\hadoop-3.0.3\share\hadoop\yarn folder. thanks –

[6-1] timelineservice.jar のコピー&ペースト

1)「C:\work\hadoop-3.1.3\share\hadoop\yarn\timelineservice」
  にある「hadoop-yarn-server-timelineservice-3.1.3.jar」をコピー
2)上の階層「C:\work\hadoop-3.1.3\share\hadoop\yarn」で
  「hadoop-yarn-server-timelineservice-3.1.3.jar」をペースト

【7】確認

[7-1] コマンドによる確認

コマンドプロンプト(管理者権限)を立ち上げて、
以下をコマンドを順番に行い、エラーがでないことを確認する

# 1
hadoop version

# 2
hadoop -help

# 3
hdfs namenode -format

# 4 (stop-dfsで停止)
start-dfs

# 5 (stop-yarnで停止)
start-yarn

# 6(※stopせずにそのまま)
start-all

[7-2] Web UIによる確認

ブラウザで以下のURLを確認

Resource Manager
http://localhost:8088/
Node Manager
http://localhost:8042/
Name Node (Hadoop v3系の場合)
http://localhost:9870/
Name Node (Hadoop v2系の場合)
http://localhost:50070/
Data Node (Hadoop v3系の場合)
http://localhost:9864/
Data Node (Hadoop v2系の場合)
http://localhost:50075/

参考文献

https://www.datasciencecentral.com/profiles/blogs/how-to-install-and-run-hadoop-on-windows-for-beginners
https://muhammadbilalyar.github.io/blogs/How-to-install-Hadoop-on-Window-10/
https://exitcondition.com/install-hadoop-windows/
https://cwiki.apache.org/confluence/display/HADOOP2/Hadoop2OnWindows

関連記事

Apache Hive ~ 環境設定 / Windows編 ~
https://dk521123.hatenablog.com/entry/2019/12/28/021109
Apache Hive ~ HiveQL / 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/25/231235
Apache Hive ~ HiveQL / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2020/03/04/225943
Apache Spark ~ 環境設定 / Windows編 ~
https://dk521123.hatenablog.com/entry/2019/09/18/214814
Apache Hadoop ~ 環境設定 / Linux編 ~
https://dk521123.hatenablog.com/entry/2020/01/01/000000
Apache Spark ~ 環境設定 / Linux編 ~
https://dk521123.hatenablog.com/entry/2019/11/01/000000