1. 程式人生 > >mac搭建hadoop3.1.1偽分佈模式 全網最詳細教程!

mac搭建hadoop3.1.1偽分佈模式 全網最詳細教程!

最近實習使用到了hadoop,那今天就出一個使用mac搭建hadoop3.1.1的詳細教程。幫助大家避免安裝的坑!

首先需要安裝一個mac神器:Homebrew,相信使用mac的童鞋都知道吧!Homebrew是一個包管理器,是Mac上的軟體安裝管理工具,類似於Linux中的apt-get,擁有安裝、解除安裝、更新、檢視等很多實用的功能。簡單的一條指令,就可以實現包管理,十分方便。

1、Homebrew安裝

可以通過如下程式碼進行安裝:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安裝成功後可以通過brew doctor來檢視是否安裝成功。

2、ssh免密登入配置

首先我們開啟系統偏好設定-->共享,進入到如下頁面:

我們將遠端登入、所有使用者勾選,然後開啟終端,輸入:

ssh localhost

這時會讓你輸入密碼,輸入密碼後顯示如下登陸成功頁面:

 

但是hadoop中需要免密登入,比如在啟動datanode、namenode時都需要免密登入,如果不設定,則會出現許可權不允許(Permission denied)的錯誤提示,導致無法啟動DataNode等。

使用如下程式碼設定ssh免密登入:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

接下來在使用ssh localhost命令,我們會發現不用輸入密碼,直接可以登入。 

3、hadoop安裝

前提準備:在安裝hadoop之前確保你的電腦中有jdk,如果沒有,可以通過如下程式碼安裝:

brew install java

這裡說明一下java版本的問題:Hadoop 2.7 以及後續版本需要 Java 7 以上版本,如果你電腦中的java是低於7的版本,那就請你去更新嘍!

可以使用java -version檢視jdk版本,我的java版本如下:

當然如果你使用brew安裝,那大可不必擔心版本問題,因為使用brew安裝的都是最新的版本。

使用如下程式碼進行hadoop安裝:

brew install hadoop

這裡還有一點說明的地方,如果你的電腦中沒有jdk,那麼你使用 brew install hadoop安裝時會提示你先安裝jdk後在安裝hadoop,所以java版本問題我們不用太擔心。

我安裝的是hadoop最新版本,hadoop3.1.1,大小:770MB,下載好預設存放的位置是:

/usr/local/Cellar/hadoop/3.1.1

使用brew安裝會比在官網上下載快很多。(如果你不想安裝了,那可以通過brew uninstall hadoop進行解除安裝,解除安裝的也非常乾淨)

4、偽分散式配置

當大家進行完上一步驟的安裝後,恭喜你,你已經安裝好了hadoop的單機模式!你可以在終端中輸入如下程式碼進行檢視:

hadoop

檢視結果為:

這裡我只截取了一部分圖片!

單機模式是hadoop最簡單的模式,他沒有hdfs,而是直接使用本地作業系統的檔案系統,不擅長處理大資料量。因此我們需要進行搭建偽分散式!

偽分佈模式需要我們對檔案進行配置。下面配置的檔案均在 /usr/local/Cellar/hadoop/3.1.1/libexec/etc/hadoop 路徑中。

a.hadoop-env.sh配置

當你開啟你的hadoop-env.sh時,這部分是備註釋的,也就是前面有一個#,那我們需要去掉#,並將自己的java位置放到我用紅框框圈刪的地方!檢視自己電腦java存放位置使用:

/usr/libexec/java_home

將路徑複製過去即可。

b.core-site.xml配置

將core-site.xml中程式碼修改為:

<configuration>
	<property>
 		<name>fs.defaultFS</name>
 		<value>hdfs://localhost:9000</value>
 	</property>
</configuration>

c.hdfs-site.xml配置

將hdfs-site.xml中程式碼修改為:

<configuration>
	<property>
 		<name>dfs.replication</name>
 		<value>1</value>
 	</property>	 
</configuration>

d.mapred-site.xml配置

將mapred-site.xml中程式碼修改為:

<configuration>
    <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
     </property>
</configuration>

如果檔案字尾是 .xml.example,改為 .xml

e.yarn-site.xml配置

將yarn-site.xml中程式碼修改為:

<configuration>
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property>
    <property> 
        <name>yarn.nodemanager.env-whitelist</name>
                  <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

5、執行

首先對檔案系統進行格式化,先進入到 /usr/local/Cellar/hadoop/3.1.1/libexec/bin 路徑中,輸入程式碼:

hdfs namenode -format

輸入之後會出現很多資訊,在最後會看到:

然後進行啟動NameNode和datanode

進入 /usr/local/Cellar/hadoop/3.1.1/libexec/sbin 路徑中,輸入

start-dfs.sh

這時候NameNode和DataNode都已經啟動成功了,我們可以在網頁中看到Overview頁面了!

NameNode - http://localhost:9870

接下來啟動 ResourceManager 和 NodeManager:

還是在  /usr/local/Cellar/hadoop/3.1.1/libexec/sbin 路徑中,輸入

start-yarn.sh

啟動後可以在瀏覽器中檢視All Applications 介面。

ResourceManager - http://localhost:8088

補充:如果你在輸入以上兩個程式碼時出現了

不要怕,這是由於你沒有配置hadoop的環境變數導致的,無關緊要,我們可以在命令前加上sh,如下

sh start-dfs.sh
sh start-yarn.sh

這樣,就可以順利啟動它們了。

我們可以通過jps檢視程序: 

可以發現所有的程序都已經在運行了!!!

補充:  如果你在啟動Nodemanager和ResourceManager發生了錯誤,導致使用jps檢視程序時出現:

不要擔心,這是java版本的問題,因為自從jdk9以後預設禁止訪問javax.*API,解決辦法:我們可以在路徑  /usr/local/Cellar/hadoop/3.1.1/libexec/etc/hadoop  下找到檔案 yarn-env.sh 

在檔案中找到:

#export YARN_RESOURCEMANAGER_OPTS=

#export YARN_NODEMANAGER_OPTS=

將其修改為:

export YARN_RESOURCEMANAGER_OPTS="--add-modules=ALL-SYSTEM"
export YARN_NODEMANAGER_OPTS="--add-modules=ALL-SYSTEM"

然後在執行 sh start-yarn.sh 重新啟動就OK了。

當你不再使用hadoop時,可以進行關閉,在  /usr/local/Cellar/hadoop/3.1.1/libexec/sbin  路徑中輸入
 

sh stop-all.sh

可以關閉所有的程序。

本教程親測有效,我也是剛剛搭建好,由於網上的教程有些地方不詳細,導致搭建過程中出現問題,本教程相對詳細,如果大家有什麼疑問,請在評論區留言,歡迎一起討論!

 

此文章作者原創,如有轉載,請註明出處:https://blog.csdn.net/liaoningxinmin/article/details/85992752