💡

WSL2+Apache BigtopでHDFS起動

2022/07/30に公開

やりたかったこと

Windowsで気軽にHadoop/HDFS試したかったのです

WSL2と書きましたがWSL2というよりLinuxの話かもしれません…

Bigtopとは

Hadoopエコシステム(HDFS、Hive、Spark…)をパッケージング、デプロイしやすくするプロジェクトです。

詳しくはNTTデータさんの資料を見てください。(Bigtopの公式ページは情報が少ない…)

試した環境

  • Windows10
  • WSL2
  • Ubuntu 20.0.4
  • Apache Bigtop 3.1.0

パッケージ設定

# GPG鍵の追加
curl -s https://dlcdn.apache.org/bigtop/bigtop-3.1.0/repos/GPG-KEY-bigtop | sudo apt-key add -
# Bigtopのリポジトリを追加
wget https://dlcdn.apache.org/bigtop/bigtop-3.1.0/repos/ubuntu-20.04/bigtop.list
sudo cp bigtop.list /etc/apt/sources.list.d/

# リポジトリの更新
sudo apt-get update
# パッケージのインストール

sudo apt-get install hadoop hadoop-hdfs-namenode hadoop-hdfs-datanode

HDFSの準備

core-site.xml(/etc/hadoop/conf/core-site.xml)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://127.0.0.1:9000</value>
    </property>
</configuration>

hdfs-site.xml(/etc/hadoop/conf/hdfs-site.xml)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data_data</value>
    </property>
</configuration>

ディレクトリの設定。

mkdir /data /data_data
sudo chown hdfs:hadoop /data /data_data
sudo -u hdfs hdfs namenode -format
# NameNodeの起動
sudo service hadoop-hdfs-namenode start
# DataNodeの起動
sudo service hadoop-hdfs-datanode start

余談ですが、NameNode(今回は/data)とDataNode(今回は/data_data)は別のディレクトリを設定する必要があるようです。同じにしたところDataNodeの起動で下のエラーが発生しました。

(/var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.logの抜粋)

2022-07-30 11:40:53,391 ERROR org.apache.hadoop.hdfs.server.common.Storage: Unable to acquire file lock on path /data/in_use.lock
2022-07-30 11:40:53,392 ERROR org.apache.hadoop.hdfs.server.common.Storage: It appears that another node  2269@DESKTOP-6QTOO0L has already locked the storage directory: /data
java.nio.channels.OverlappingFileLockException
        at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.tryLock(Storage.java:925)
        at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.lock(Storage.java:890)
        at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:699)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadStorageDirectory(DataStorage.java:272)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadDataStorage(DataStorage.java:407)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:387)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:559)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1748)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1684)
        at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:392)
        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:288)
        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:830)
        at java.base/java.lang.Thread.run(Thread.java:829)
2022-07-30 11:40:53,392 INFO org.apache.hadoop.hdfs.server.common.Storage: Cannot lock storage /data. The directory is already locked
2022-07-30 11:40:53,392 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/data

確認

# ディレクトリの作成。ちなみにこれはDataNodeが起動していなくても可能です
HADOOP_USER_NAME=hdfs hadoop fs -mkdir /test/
hadoop fs -ls /
Found 1 items
drwxr-xr-x   - hdfs supergroup          0 2022-07-30 11:48 /test
# ファイルのアップロード
HADOOP_USER_NAME=hdfs hadoop fs -put bigtop.list /test/
hadoop fs -ls /test
Found 1 items
-rw-r--r--   3 hdfs supergroup         86 2022-07-30 11:53 /test/bigtop.list

ちなみにWebHDFSも使えます。

# WSL2内から
curl http://127.0.0.1:9870/webhdfs/v1?op=LISTSTATUS | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   270    0   270    0     0  67500      0 --:--:-- --:--:-- --:--:-- 67500
{
  "FileStatuses": {
    "FileStatus": [
      {
        "accessTime": 0,
        "blockSize": 0,
        "childrenNum": 1,
        "fileId": 16386,
        "group": "supergroup",
        "length": 0,
        "modificationTime": 1659149624376,
        "owner": "hdfs",
        "pathSuffix": "test",
        "permission": "755",
        "replication": 0,
        "storagePolicy": 0,
        "type": "DIRECTORY"
      }
    ]
  }
}

もちろんWindows(PowerShell)からもWebHDFSは使えます。

PS C:\Users\notro>  curl.exe http://127.0.0.1:9870/webhdfs/v1?op=LISTSTATUS
{"FileStatuses":{"FileStatus":[
{"accessTime":0,"blockSize":0,"childrenNum":1,"fileId":16386,"group":"supergroup","length":0,"modificationTime":1659149624376,"owner":"hdfs","pathSuffix":"test","permission":"755","replication":0,"storagePolicy":0,"type":"DIRECTORY"}
]}}

Discussion