💡
WSL2+Apache BigtopでHDFS起動
やりたかったこと
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