我最近在自學Hadoop和spark等分散式工具,想搭一個有三個節點的簡單集群,但是沒有這麼多機子,如果想要在本地搭建,有什麼比較好解決方案呢?


之前曾在自己的電腦上搭建過 Hadoop 完全分散式集群,幸好筆記還在。貼在這裡供你參考:


用 Apache Hadoop 來搭建第一個 Hadoop 集群環境,手頭有的資源是三台虛擬機。

Hadoop 的計算集群有兩種模式, Map Reduce 1 和 YARN, 這裡選取 YARN 作為此次搭建的模式。


預裝軟體:

1 - centos : centos00,centos01,centos02 已經準備完畢

2 - JDK: JDK1.8 已經安裝完畢

3 - Hadoop User: 每一個服務,都應該用單獨的賬戶管理起來,目前可以用 SparkAdmin

4 - 安裝 Hadoop : 在合理的路徑下 /usr/local 安裝 Hadoop


搭建 Hadoop 集群需要注意的事情:

  1. 運行整個 Hadoop 需要摸索的是配置文件如何設置;
  2. 更進一步是要看懂這些配置在 Hadoop 運行的時候,是怎麼發揮作用的。Hadoop 是通過 Java 編寫的,Java 在利用這些配置文件的時候,以什麼樣的方式讀取這些文件,並且運行時刻還允許這些文件的改寫。

&
&
&
&


&yarn.nodemanager.local-dirs&
&/disk1/nm-local-dir,/disk2/nm-local-dir&
&true&
& &


&yarn.nodemanager.aux-services&
&mapreduce.shuffle&
& &


&yarn.nodemanager.resource.memory-mb&
&8192&
& &

&
&
&
&


&mapred.child.java.opts&
&-Xmx400m&
&
& &

雖然沒有在 yarn 的啟動腳本 start-yarn.sh 中使用到 mapred-site.xml, 但是 yarn 調用 nodemanager 來運行 JVM 的時候,還需要 mapred-site.xml 中這份 JVM 的配置。

如下圖所示,重要的 yarn 特性列表:


詳細步驟列表:

安裝
SSH configuration
Hadoop User
Hadoop User Directory
Hadoop Installation
Java Installation
Java Home
Hadoop Install Home

Hadoop 配置
hadoop-env.sh
mapred-env.sh
yarn-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
slaves

Hadoop 運行
start-dfs.sh
hadoop fs -format
start-yarn.sh


搭建過程如下:

1. 在三台虛擬機上,添加 /hadoop 目錄,將所有人設置為 SparkAdmin.
2. 將 hadoop 安裝文件放入每台虛擬機新建的目錄 /hadoop 下
3. 在 centos00 上配置 hadoop 系列配置文件。
4. 拓撲: centos00 - master namenode, yarn resource manager node
centos01 centos02 data node 和 task node 的託管伺服器
5. 配置 java hadoop home 目錄
6. 啟動 start-dfs.sh start-yarn.sh
7. hadoop fs -format 瀏覽 HDFS 文件系統
8. 安裝 Hive


第 1,2 步完成。

第 3 步需要考究。防止配錯,先做一份備份。2.7.7 之後,hadoop 的配置文件目錄是 $HADOOP_HOME/etc/hadoop.

需要配置的文件有:

1. core-site.xml
2. hdfs-site.xml
3. yarn-site.xml
4. mapred-site.xml
5. slaves
6. hadoop-env.sh
7. yarn-env.sh
## core-site.xml

&
&


&fs.defaultFS&
&hdfs://centos00:9000&
&true&
& &


## hdfs-site.xml

&
&


&dfs.name.dir&
&file:///hadoop/hadoop-2.7.7/namenonde&
&true&
& &


&dfs.data.dir&
&file:///hadoop/hadoop-2.7.7/datanode&
&true&
& &


## mapred-site.xml

&
&


&mapred.child.java.opts&
&-Xmx200m&
& &


&mapred.tasktracker.map.tasks.maximum&
&2&
& &


&mapred.tasktracker.reduce.tasks.maximum&
&2&
& &


## yarn-site.xml

&

&
&


&yarn.resourcemanager.address&
&localhost:8032&
&

&


&yarn.nodemanager.local-dirs&
&/hadoop/hadoop-2.7.7/datanode&
&

&


&yarn.nodemanager.aux-services&
&mapreduce_shuffle&
&

&


&yarn.nodemanager.resource.memory-mb&
&512&
& &

** 第三步非常重要的一環是:

將配置文件同步到所有列在 slaves 中的伺服器上去。 否則即使 namenode 能順利啟動,但是依然不會看到有 data node 運行在集群環境中。

通過 http://master-node:50070 web UI 可以看到更多詳細的信息。 如果 slaves 中列的伺服器,沒有與 name node 中同樣的配置文件,這些 data node 無法啟動,也無法加入集群。


之前也寫過,正確的啟動 HDFS 的順序是:

1. 先格式化 namenode: hdfs namenode -format

2. 接著啟動 namenode 以及 data node: start-dfs.sh

3. 運行 jps 檢查是否 namenode , datanode 都已經完成啟動

[SparkAdmin@centos00 hadoop]$ jps
3617 SecondaryNameNode
14515 Jps
14215 ResourceManager
3022 NameNode
[SparkAdmin@centos00 hadoop]$ ssh centos01
Last login: Sun Oct 28 15:29:02 2018 from centos00
[SparkAdmin@centos01 ~]$ jps
5440 DataNode
6624 NodeManager
6791 Jps

兩個站點:

http://master-node:50070

這是 HDFS, Name Node 和 Data Node 的狀態看板

http://master-node:8088

這是 YARN, Resource Manager, Application Master 的應用運行狀態看板


更新:Docker直接pull一個更方便。。。

虛擬機。

不過前提就不對。學hadoop和spark完全就不需要搭集群。撘集群是非常浪費時間的。

單機部署加閱讀源碼才是學習的正確道路。

ps: 當然單機也要搭在虛擬機里。


1c1g內存的虛擬機安裝apache hadoop就可以,筆記本機器有8g內存就差不多了;

安裝文檔參見linode的博文,關於內存參數配置和步驟還是寫很好的。

How to Install and Set Up a 3-Node Hadoop Cluster


最快的方法:

  • 安裝docker, 下載相關的docker鏡像
  • 有足夠的主機也可以安裝CDH

內存夠的話開幾個虛擬機唄. 內存不夠可以買幾個VPS. 或者買內存.


本機的話可以裝虛擬機,搭建個偽分散式的集群


用vmware虛擬機虛擬出幾台機器,然後部署hadoop


推薦閱讀:
相关文章