寫給後端的Hadoop初級入門教程(四):Hadoop僞分佈式環境搭建

前言:

我又回來了,這兩天學校事情有點多,因此沒有怎麼勤快更新,昨天看到有小夥伴留言催更,別說,第一次被催更的感受仍是挺幸福的,回到正題,在上一篇文章寫給後端的Hadoop初級入門教程(三):Hadoop運行環境搭建中,咱們主要講了一下Hadoop的基本環境的搭建,這個雖然簡單,可是很是重要,若是基本環境都沒有,後面代碼跑不起來講啥都是扯蛋,Hadoop雖然是大數據分佈式框架,但不是誰都能搞起來一套分佈式環境,有的電腦配置比較低,跑一臺虛擬機就已經不堪重負了,跑個集羣直接cpu就爆炸了,可是電腦配置低也想使用hadoop。這怎麼辦呢,因而Hadoop就支持另一種模式運行,那就是僞分佈式運行模式,就是否是分佈式運行,可是比較像分佈式。今天呢,咱們就從僞分佈式運行模式的配置入手,經過一步一步修改配置文件,來詳細實現咱們Hadoop的僞分佈式運行的一個配置過程。php

不說廢話,直接上東西。html

配置並啓動HDFS

首先咱們要作的就是啓動配置並啓動咱們的Hadoop分佈式文件系統,找到咱們的hadoop環境配置文件,hadoop-env.sh,我這裏呢路徑以下:java

/opt/module/hadoop-2.7.2/etc/hadoop
複製代碼

而後就是咱們須要拿到咱們以前配置的JAVA_HOME地址,命令以下:node

[hanshu@hadoop100 hadoop]$ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk/jre/
複製代碼

使用vim編輯器打開hadoop-env.sh文件,我這裏只列舉一部分linux

# The java implementation to use.
export JAVA_HOME=${JAVA_HOME}
 # The jsvc implementation to use. Jsvc is required to run secure datanodes
# that bind to privileged ports to provide authentication of data transfer
# protocol. Jsvc is not required if SASL is configured for authentication of
# data transfer protocol using non-privileged ports.
#export JSVC_HOME=${JSVC_HOME}

export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}

複製代碼

修改JAVA_HOME的值爲咱們上文獲取到的java安裝目錄:git

# The java implementation to use.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre/
複製代碼

保存,配置,一鼓作氣。github

而後咱們須要配置咱們的NameNode 和咱們的DataNode,這個須要在core-site.xml這個配置文件裏面配置,這個配置文件仍然在咱們的etc/hadoop目錄下.web

咱們使用vim打開,內容以下:shell

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- 省去一堆註釋 -->
<configuration>
</configuration>

複製代碼

能夠看到裏面空空如也,如一塊還沒有開墾的荒地,咱們略微一發善心,將它充分利用,在裏面添加以下內容:編程

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- 省去一堆註釋 -->
<configuration>


<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>

<!-- 指定Hadoop運行時產生文件的存儲目錄 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

</configuration>
複製代碼

這還沒完,以前咱們好像提到過,默認hadoop文件是會建立三個副本,這我如今僞分佈式,只有一個電腦,只有一個地方存東西,變不出來仨,因此接下來咱們須要修改hadoop默認副本數量爲1,這個配置文件叫:hdfs-site.xml仍是在這個目錄下,咱們使用vim打開一探究竟:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- 空空如也. -->
<configuration>

</configuration>

複製代碼

啥也沒有,不要緊,加上咱們的配置不就有了嗎,以下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- 空空如也. -->
<configuration>
<!-- 指定HDFS副本的數量 -->
<property>
	<name>dfs.replication</name>
	<value>1</value>
</property>
</configuration>
複製代碼

這個時候是否是就能啓動咱們的HDFS系統了?理論上來講是沒問題的,可是因爲是第一次啓動,仍是建議你們先將NameNode格式化一下,這一步的做用就相似於不少時候咱們剛買來U盤,須要先格式化一下再用是一個道理,固然,沒有人沒事兒就格式化本身U盤,因此除了第一次以後不建議你們沒事兒就給NameNode卡卡格式化一會兒,由於格式化NameNode,會產生新的集羣id,致使NameNode和DataNode的集羣id不一致,集羣找不到已往數據。因此,格式NameNode時,必定記得要先刪除data數據和log日誌,而後再格式化NameNode,要不就有可能致使集羣啓動失敗

格式化NameNode:

[hanshu@hadoop100 hadoop-2.7.2]$ bin/hdfs namenode -format
複製代碼

輸出的內容太多了,我隨便複製給大家看這篇文章分分鐘成萬字長文了,因此若是最後沒有報錯的話,那就是格式化成功了,就跟你格式化優盤同樣,不多會有格式化失敗的狀況。

啓動NameNode:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-hanshu-namenode-hadoop100.out
複製代碼

提示:

這裏面用的都是相對路徑,注意個人目錄,注意個人目錄,注意個人目錄。

啓動DataNode:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
starting datanode, logging to /opt/module/hadoop-2.7.2/logs/hadoop-hanshu-datanode-hadoop100.out
複製代碼

弄完以後,這下咱們以前點名配置的java 開發插件jps就派上用場了,以下所示:

[hanshu@hadoop100 hadoop-2.7.2]$ jps
4243 Jps
4038 NameNode
4157 DataNode
複製代碼

至此,咱們的Hdfs算是配置完成了,固然,這還不夠,你口口聲聲說什麼分佈式文件系統,那難道就沒有什麼文件管理器這種讓我能看着(zao)的東西嗎?固然有,hadoop提供了web端來幫助咱們直觀的查看HDFS文件系統,網址以下:

http://localhost:50070/dfshealth.html#tab-overview

打開後長這樣

不過首頁咱們通常不怎麼用,真正查看文件的地方在,算了,懶得打字了,直接看圖吧:

課外小知識:

hadoop 日誌文件在 /opt/module/hadoop-2.7.2/logs 路徑下面,若是集羣啓動失敗,或者出現錯誤,能夠在這裏查看錯誤信息。

既然是文件系統,那確定得支持什麼建立文件夾,建立文件這種常規操做吧,要不都很差意思叫本身文件系統,那必須的,因爲今天咱們的重點是配置,不是使用,因此我就簡單列舉幾個先,往後我寫到HDFS的時候,再詳細地列舉各類花式文件操做的命令 。

建立一個文件夾:

[hanshu@hadoop100 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/hanshu/input
複製代碼

把我剛剛建立的hanshuzuishuai.txt這個文件傳到剛纔建立的文件夾裏面去:

[hanshu@hadoop100 hadoop-2.7.2]$ bin/hdfs dfs -put hanshuzuishuai.txt /user/hanshu/input/
複製代碼

查看上傳的文件是否正確:

[hanshu@hadoop100 hadoop-2.7.2]$ bin/hdfs dfs -ls  /user/hanshu/input/
Found 1 items
-rw-r--r--   1 hanshu supergroup         13 2019-12-20 15:07 /user/hanshu/input/hanshuzuishuai.txt
複製代碼

查看文件內容:

[hanshu@hadoop100 hadoop-2.7.2]$ bin/hdfs dfs -cat  /user/hanshu/input/hanshuzuishuai.txt
韓數最帥
複製代碼

你看看,這虛擬機,瞎說什麼大實話,管不住了,你們見諒,別和小虛擬機通常見識(滑稽)。

在web端看看咱們文件傳上去了沒:

也能夠在這直接下載文件。

下載文件內容:

[hanshu@hadoop100 hadoop-2.7.2]$ hdfs dfs -get /user/hanshu/input/hanshuzuishuai.txt
複製代碼

刪除文件內容:

[hanshu@hadoop100 hadoop-2.7.2]$ hdfs dfs -rm -r /user/hanshu/input/hanshuzuishuai.txt
複製代碼

到這纔算Hdfs簡單地寫完了,累死我了,從兩點敲到三點多,早知道出個三部曲了,分開寫,一天寫一點,算了,都寫到這了,今天寫完吧,繼續幹:

配置並啓動Yarn:

HDFS咱們是配置完了,剩下的就是配置咱們的Yarn了,真的,若是如今你Yarn還不知道是啥,我建議你把我上上一篇組成部分看看再來看這塊內容,配置Yarn也不復雜,也是修改那幾個配置文件就好了。

首先第一個落網的就是yarn-env.sh,第一個就改它,仍是在那個etc/hadoop路徑下面。使用vim打開:

# User for YARN daemons
export HADOOP_YARN_USER=${HADOOP_YARN_USER:-yarn}
 # resolve links - $0 may be a softlink
export YARN_CONF_DIR="${YARN_CONF_DIR:-$HADOOP_YARN_HOME/conf}"
 # some Java parameters
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/

複製代碼

配置JAVA_HOME:

export JAVA_HOME= /usr/lib/jvm/java-1.8.0-openjdk/jre/
複製代碼

第二個不幸要被改的是yarn-site.xml,使用vim打開:

<?xml version="1.0"?>
<configuration>

<!-- 依然空空如也 -->

</configuration>
複製代碼

不要緊,立刻就不空了,添加以下內容:

<?xml version="1.0"?>
<configuration>
<!-- Reducer獲取數據的方式 -->
<property>
 		<name>yarn.nodemanager.aux-services</name>
 		<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
</configuration>
複製代碼

第三個輪到咱們的mapred-env.sh 配置文件了,使用vim打開,

看到JAVA_HOME了嗎,OMG,兄弟們,朋友們,就這個,配他!(李佳奇梗)

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre/
複製代碼

最後就是修改mapred-site.xml了,這個時候有人要問了,我沒找着啊,完了,我沒這個文件,我和韓數的教程脫軌了,這之後咋學啊,學不會了,仍是回去賣哈密瓜賣烤紅薯吧。

淡定,看到那個mapred-site.xml.template文件了嗎,咱們把它改爲mapred-site.xml,而後再配它就好了:

[hanshu@hadoop100 hadoop]$ mv mapred-site.xml.template mapred-site.xml
複製代碼

使用vim打開,你們猜裏面會是什麼?每錯,空空如也,修改配置文件以下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!-- 指定MR運行在YARN上 -->
<property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
</property>
</configuration>

複製代碼

到這,咱們的yarn也算配好了,那是否是能啓動了?

且慢,咱們以前說過,Yarn是幹啥的,作資源調度的,因此啓動Yarn以前咱們的NameNodeDataNode必定要啓動起來,要不Yarn啓動的時候一看,沒資源讓本身調度,心想那還不如回家睡覺呢。

啓動ResourceManager:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-hanshu-resourcemanager-hadoop100.out
複製代碼

啓動NodeManager:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-hanshu-nodemanager-hadoop100.out
複製代碼

用jps命令看看啓動成功了沒:

[hanshu@hadoop100 hadoop-2.7.2]$ jps
5986 Jps
5620 ResourceManager
4038 NameNode
4157 DataNode
5870 NodeManager
複製代碼

歐了,這個時候確定會有人內心面想,你怎麼這麼熟練呢,hhh,緣由很簡單,我怎麼可能把我中間配錯的那些坑寫文章裏(得意)。

一樣的,Yarn也提供了相關的web端來幫助咱們查看和使用:

http://localhost:8088/cluster

到這一步,咱們Yarn也算是配置完成了。

配置並啓動歷史服務器

爲了查看程序的歷史運行狀況,須要配置一下歷史服務器。這個就好配多了,打開咱們的mapred-site.xml配置文件,加入如下內容:

<!-- 歷史服務器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<!-- 歷史服務器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>localhost:19888</value>
</property>
複製代碼

啓動歷史服務器:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /opt/module/hadoop-2.7.2/logs/mapred-hanshu-historyserver-hadoop100.out
複製代碼

使用jps查看是否啓動成功:

[hanshu@hadoop100 hadoop-2.7.2]$ jps
5620 ResourceManager
6565 Jps
4038 NameNode
4157 DataNode
5870 NodeManager
6479 JobHistoryServer
複製代碼

不用多說,web端,也有

http://localhost:19888/jobhistory

結束了嗎?沒有,感受有好多東西要配啊。我也以爲。

配置並啓動日誌彙集

什麼是日誌彙集呢,就是班委收做業,咱們把日誌都收集起來放一塊,之後程序再出了什麼問題,方便調試:

由於要從新開始彙集日誌,因此要從新啓動NodeManagerResourceManagerHistoryManager

一樣須要修改配置文件,感受本身又學會了一項編程方法:

面向配置編程

配置yarn-site.xml

增長以下配置:

<!-- 日誌彙集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>

<!-- 日誌保留時間設置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
複製代碼

關閉NodeManager:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager
stopping resourcemanager
複製代碼

關閉ResourceManager:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager
複製代碼

關閉HistoryManager:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver
stopping historyserver
複製代碼

啓動NodeManager:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-hanshu-nodemanager-hadoop100.out
複製代碼

啓動ResourceManager:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /opt/module/hadoop-2.7.2/logs/yarn-hanshu-resourcemanager-hadoop100.out
複製代碼

啓動HistoryManager:

[hanshu@hadoop100 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /opt/module/hadoop-2.7.2/logs/mapred-hanshu-historyserver-hadoop100.out
複製代碼

到這裏咱們的僞分佈式運行環境就真的已經配置完成了。

真的,不騙你。

下面開始技術總結:

今天咱們主要寫了Hadoop僞分佈式環境的配置,我想已經不能再詳細了,固然後面還有一個番外篇,畢竟如今咱們HDFS和Yarn都配了,MR尚未,因此,咱們下面將以咱們此次配置的爲基礎,將出一期番外篇,運行官方自帶的WordCount案例,看看咱們的日誌收集,Yarn是如何調度的。最後:

很是感謝能讀到這裏的朋友,大家的支持和關注是我堅持高質量分享下去的動力。

相關代碼已經上傳至本人github。必定要點個star啊啊啊啊啊啊啊

萬水千山老是情,給個star行不行

韓數的開發筆記

歡迎點贊,關注我,有你好果子吃(滑稽)

相關文章
相關標籤/搜索