如何使用 docker 搭建 hadoop 分散式叢集?
在 Docker 中搭建 Hadoop 分散式叢集,可以按照以下步驟進行操作:
1 安裝 Docker
首先需要在作業系統中安裝 Docker,具體步驟可以參考官方文件,這裡不再贅述。
2 建立 Docker 映象
在 Docker 中建立 Hadoop 映象,可以通過編寫 Dockerfile 檔案,然後使用 docker build
命令構建映象。
以下是一個示例 Dockerfile:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y wget ssh openjdk-8-jdk
RUN wget https://downloads.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz \
&& tar -xzvf hadoop-3.3.1.tar.gz \
&& mv hadoop-3.3.1 /usr/local/hadoop \
&& rm hadoop-3.3.1.tar.gz
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
ENV HADOOP_HOME=/usr/local/hadoop
ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
COPY config/* /usr/local/hadoop/etc/hadoop/
RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa && \
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && \
chmod 0600 ~/.ssh/authorized_keys
CMD [ "sh", "-c", "service ssh start; bash"]
其中:
FROM
指定使用的基礎映象,這裡選擇的是 Ubuntu 18.04。RUN
指定在容器中執行的命令,這裡安裝了 wget、SSH 和 JDK,並下載和解壓了 Hadoop 軟體包。ENV
設定環境變數,指定了 Java 和 Hadoop 的安裝路徑,以及將 Hadoop 的二進位制檔案新增到 PATH 環境變數中。COPY
將本地的配置檔案複製到容器中,這裡將 Hadoop 的配置檔案複製到容器中。RUN
執行 SSH 相關的命令,生成 SSH 金鑰,將公鑰新增到授權列表中,以便容器間可以相互通訊。CMD
指定容器啟動後執行的命令,這裡啟動 SSH 服務,並進入到互動式 Shell。
在 Dockerfile 所在的目錄中執行以下命令可以構建 Docker 映象:
docker build -t hadoop .
其中 hadoop
是映象的名稱,可以根據實際情況進行修改。
3 建立 Docker 容器
在建立了 Hadoop 映象之後,需要在 Docker 中建立多個容器,模擬 Hadoop 分散式叢集。
首先建立一個 Hadoop 的 Namenode 容器,命名為 namenode
:
docker run -d -p 50070:50070 -p 9000:9000 --name namenode hadoop
其中:
-d
引數指定容器在後臺執行。-p
引數指定容器的埠對映,將容器內的埠對映到主機上,這裡將 Namenode 的 Web UI 埠 50070 和 HDFS 埠 9000 對映到主機的對應埠上。--name
引數指定容器的名稱。hadoop
引數指定使用的映象名稱。
接著建立多個 Hadoop 的 Datanode 容器,命名為 datanode1
、datanode2
、datanode3
等等:
docker run -d --name datanode1 hadoop
docker run -d --name datanode2 hadoop
docker run -d --name datanode3 hadoop
可以在執行命令中通過
--link
引數將多個容器連線起來,但這種方法已經過時,推薦使用 Docker 的網路功能進行連線。以下是通過 Docker 網路進行連線的示例:
docker network create hadoop
docker run -d --network hadoop --name namenode -p 50070:50070 -p 9000:9000 hadoop
docker run -d --network hadoop --name datanode1 hadoop
docker run -d --network hadoop --name datanode2 hadoop
docker run -d --network hadoop --name datanode3 hadoop
其中:
docker network create hadoop
建立名為hadoop
的 Docker 網路。--network hadoop
引數指定使用hadoop
網路。--name
引數指定容器的名稱。
4 配置 Hadoop
在建立好容器之後,需要對 Hadoop 進行一些配置,以使其能夠在分散式叢集中正常工作。
首先需要進入 Namenode 容器,執行以下命令:
docker exec -it namenode bash
接著進入 Hadoop 的配置目錄,執行以下命令:
cd $HADOOP_HOME/etc/hadoop/
修改 hdfs-site.xml
檔案,新增以下配置:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/data/dfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/data/dfs/datanode</value>
</property>
</configuration>
這裡設定了 HDFS 的副本數為 3,以及 Namenode 和 Datanode 的資料儲存目錄。
接著修改 core-site.xml
檔案,新增以下配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value>
</property>
</configuration>
這裡指定了 Hadoop 的預設檔案系統為 HDFS,使用的是 Namenode 的地址和埠。
最後修改 workers
檔案,將 Datanode 的主機名或 IP 地址新增進去:
datanode1
datanode2
datanode3
這裡使用容器的名稱作為主機名,因為容器之間可以直接通過名稱進行通訊。
5 啟動 Hadoop
在配置好 Hadoop 之後,可以啟動叢集。首先需要進入 Namenode 容器,執行以下命令啟動 Hadoop:
cd $HADOOP_HOME/sbin
./start-dfs.sh
這裡啟動了 HDFS。 接著可以執行以下命令檢視叢集狀態:
jps
輸出應該包含以下程序:
NameNode
DataNode
SecondaryNameNode
這表明叢集已經成功啟動了。
6 執行示例程式
最後可以執行 Hadoop 的示例程式,以確保叢集能夠正常工作。以下是一個簡單的示例,統計一段文字中每個單詞出現的次數:
cd $HADOOP_HOME
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount input output
這裡使用 Hadoop 的 `wordcount` 程式,將輸入檔案路徑設定為 `input` 目錄,將輸出檔案路徑設定為 `output` 目錄。 執行結束後可以檢視輸出目錄中的結果:
hdfs dfs -cat output/*
這裡使用 Hadoop 自帶的 `hdfs` 命令,將輸出目錄中的所有檔案合併並輸出到控制檯上。 至此,已經成功使用 Docker 搭建了一個 Hadoop 分散式叢集,並運行了示例程式。
作者:自在的影片分享
原文連結:https://www.zhihu.com/question/585587113/answer/2918926588
侵刪
- Skywalking分散式追蹤與監控:起始篇
- 如何使用 docker 搭建 hadoop 分散式叢集?
- 開源女神節——撕掉標籤,自由隨我
- 開源女神節——她說
- 大牛告訴你專案在Devops下如何測試!
- DataOps 不僅僅是資料的 DevOps!
- K8s——master擴容
- Skywalking分散式追蹤與監控:起始篇
- 這可能是最為詳細的Docker入門吐血總結
- 2023年 DevOps 七大趨勢
- k8s部署redis叢集
- DevOps20個常見問題
- Nexu私服安裝配置,IDEA打包上傳私服
- 鵝場分散式系統DevOps自動化測試實踐
- 【雲原生】持續整合和部署(Jenkins)
- k8s部署手冊-v04
- 保護 DevOps 的 5 個技巧
- CI/CD如何支撐運維自動化
- DevOps 如何幫助實現安全部署
- K8s系列-KubeSphere