如何使用 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 http://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 分佈式集羣,並運行了示例程序。
作者:自在的影片分享
原文鏈接:http://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