hadoop介紹及安裝部署

一:Hadoop

1 什么使hadoop

Hadoop是一個由Apache基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序

Hadoop框架的核心設(shè)計(jì):HDFS和MapReduce,一句話來說Hadoop就是存儲加計(jì)算(HDFS為海量的數(shù)據(jù)提供了存儲,而MapReduce為海量的數(shù)據(jù)提供了計(jì)算)

Hadoop由以下幾個項(xiàng)目構(gòu)成



1.1Hadoop框架的主要模塊:

HDFS,Hadoop Distributed File System,Hadoop分布式文件系統(tǒng)

MapReduce,一個計(jì)算框架。它以分布式和并行的方式處理大量的數(shù)據(jù)。當(dāng)你對所有年齡> 18的用戶在上述1 GB文件上執(zhí)行查詢時,將會有“8個映射”函數(shù)并行運(yùn)行,以在其128 MB拆分文件中提取年齡> 18的用戶,然后reduce函數(shù)將運(yùn)行以將所有單獨(dú)的輸出組合成單個最終結(jié)果

YARN,用于作業(yè)調(diào)度和集群資源管理的框架

Hadoop Common,Hadoop體系最底層的一個模塊,為Hadoop各子項(xiàng)目提供各種工具,如:配置文件和日志操作等

1.2 什么是MapReduce:

Thinking:我們有1TB的數(shù)據(jù),如何統(tǒng)計(jì)單詞數(shù)?如何建立倒排索引?

這其實(shí)是很復(fù)雜的過程,如果有10TB,或者1PB數(shù)據(jù)怎么辦呢?這時候單機(jī)就沒辦法做,變得很復(fù)雜需要想辦法來解決。

Map的本質(zhì)實(shí)際上是拆解,比如說有輛紅色的小汽車,把它拆成零件了,這就是Map


Reduce 就是組合,我們有很多汽車零件,還有很多其他各種裝置零件,把他們拼裝成變形金剛,這就是Reduce


MapReduce的6個部分:

Input,

?Split,?

Map,?

Shuffle,

Reduce,

Finalize

split過程,輸入很多文檔,文檔的每一行有很多不同的單詞,分割之后方便找不同的worker來進(jìn)行處理

Shuffle,將map的輸出作為reduce的輸入的過程就是shuffle,通過Shuffle把數(shù)據(jù)拉過來之后,方便后續(xù)Reduce進(jìn)行計(jì)算。

Shuffle的本意是打亂的意思,在MapReduce中,Shuffle是洗牌的逆過程,即將map端的無規(guī)則輸出按指定的規(guī)則“打亂”成具有一定規(guī)則的數(shù)據(jù),相同的Key必須發(fā)送到同一個Reduce端處理

Reduce,把相同的數(shù)據(jù)放一起,計(jì)數(shù)統(tǒng)計(jì),比如Car有3個就寫3,River是2個就寫2


MapReduce:

Map,輸入每一行的ID是key,這一行的單詞是value。這樣后面就可以統(tǒng)計(jì)每個單詞出現(xiàn)的次數(shù)

Reduce,輸入的還是各個單詞,但后面是一個串,表示在里面出現(xiàn)的次數(shù),比如1,1,1。sum的過程就是把value(這里是1)累計(jì)到一起

MapReduce可以幫我們統(tǒng)計(jì)關(guān)鍵詞和它的出現(xiàn)次數(shù)



1.3 MapReduce架構(gòu):

Master Worker,作為用戶的代理來協(xié)調(diào)整個過程,比如讓第一個Worker去拿0號數(shù)據(jù),另一個Worker拿1號數(shù)據(jù)等等 => 分配數(shù)據(jù)的過程

每個Map Worker會在本地把數(shù)據(jù)切分開吧,寫到本地的緩存或者硬盤上

Master讓Reduce Worker去拿數(shù)據(jù),他們就會從Map Worker的本地拿到數(shù)據(jù),然后做完Reduce將結(jié)果寫到最終的文件里(Finalize)


2.1 什么是HDFS

HDFS:

Hadoop分布式文件系統(tǒng)(HDFS)是一種分布式文件系統(tǒng),

HDFS具有高度容錯能力,數(shù)據(jù)自動保存多個副本。如果一個副本丟失后,它可以自動分配到其它節(jié)點(diǎn)作為新的副本

可以部署在低成本硬件上,通過多副本機(jī)制,提高可靠性

數(shù)據(jù)規(guī)模:能夠處理的數(shù)據(jù)規(guī)??梢赃_(dá)到GB,TB,甚至PB級別的數(shù)據(jù)

HDFS:

NameNode和DataNode是HDFS的兩個主要組件

元數(shù)據(jù)存儲在NameNode上,數(shù)據(jù)存儲在DataNode的集群上

NameNode不僅要管理存儲在HDFS上內(nèi)容的元數(shù)據(jù),而且要記錄一些事情,比如哪些節(jié)點(diǎn)是集群的一部分,某個文件有幾份副本等。它還要決定當(dāng)集群的節(jié)點(diǎn)宕機(jī)或者數(shù)據(jù)副本丟失的時候系統(tǒng)需要做什么

存儲在HDFS上的每份數(shù)據(jù)片有多份副本(replica)保存在不同的服務(wù)器上。

在本質(zhì)上,NameNode是HDFS的Master(主服務(wù)器),DataNode是Slave(從服務(wù)器)


2.2 HDFS寫過程

客戶端發(fā)送寫請求給NameNode,要將a.log文件寫入到HDFS,執(zhí)行流程:

Step1,客戶端發(fā)消息給NameNode,說要將a.log寫入

Step2,NameNode發(fā)消息給客戶端,讓客戶端寫到DataNode A、B和D,并直接聯(lián)系DataNode B

Step3,客戶端發(fā)消息給DataNode B,讓它保存一份a.log文件,并且發(fā)送副本給DataNode A和DataNode D

Step4,DataNode B發(fā)消息給DataNode A,讓它保存a.log,并且發(fā)送一份副本給DataNode D

Step5,DataNode A發(fā)消息給DataNode D,讓它保存a.log

Step6,DataNode D發(fā)確認(rèn)消息給DataNode A

Step7,DataNode A發(fā)確認(rèn)消息給DataNode B

Step8,DataNode B發(fā)確認(rèn)消息給客戶端,表示寫入完成



2.3HDFS讀過程

客戶端發(fā)送讀請求給NameNode,想要讀取a.log文件,具體的執(zhí)行流程:

Step1,客戶端詢問NameNode它應(yīng)該從哪里讀取文件

Step2,NameNode發(fā)送數(shù)據(jù)塊的信息給客戶端。數(shù)據(jù)塊信息包含了保存著文件副本的DataNode的IP地址,以及DataNode在本地硬盤查找數(shù)據(jù)塊所需要的數(shù)據(jù)塊ID

Step3,客戶端檢查數(shù)據(jù)塊信息,聯(lián)系相關(guān)的DataNode,請求數(shù)據(jù)塊

Step4,DataNode返回文件內(nèi)容給客戶端,然后關(guān)閉連接,完成讀操作

客戶端并行從不同的DataNode中獲取一個文件的數(shù)據(jù)塊,然后聯(lián)結(jié)這些數(shù)據(jù)塊,拼成完整的文件


3:hadoop安裝

?Ubuntu1804 安裝? hadoop2.10

下載地址:https://hadoop.apache.org/releases.html

選擇二進(jìn)制下載:

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz

解壓到/data/hadoop目錄下:

mkdir /data/hadoop

tar -zxvf hadoop-2.10.0.tar.gz -C? /data/hadoop/

進(jìn)入到hadoop工作目錄:

cd /data/hadoop/hadoop-2.10.0

??? bin :Hadoop 最基本的管理腳本和使用腳本所在目錄,這些腳本是sbin目錄下管理腳本的基礎(chǔ)實(shí)現(xiàn),用戶可以直接使用這些腳本管理和使用Hadoop 。

??? etc :Hadoop 配置文件所在的目錄,包括core-site.xml 、hdfs-site.xml 、mapred-site.xml 等從Hadoop 1.0 繼承而來的配置文件和yarn-site.xml 等Hadoop 2.0 新增的配置文件。

??? include :對外提供的編程庫頭文件(具體動態(tài)庫和靜態(tài)庫在lib 目錄中),這些頭文件均是用C++ 定義的,通常用于C++ 程序訪問HDFS 或者編寫MapReduce 程序。

??? lib :該目錄包含了Hadoop 對外提供的編程動態(tài)庫和靜態(tài)庫,與include目錄中的頭文件結(jié)合使用。

??? libexec :各個服務(wù)對應(yīng)的shell 配置文件所在目錄,可用于配置日志輸出目錄、啟動參數(shù)(比如JVM 參數(shù))等基本信息。

??? sbin :Hadoop 管理腳本所在目錄,主要包含HDFS 和YARN 中各類服務(wù)的啟動/ 關(guān)閉腳本。

??? share :Hadoop 各個模塊編譯后的jar 包所在目錄

配置hadoop-master的hadoop環(huán)境變量:

vim /etc/profile

export HADOOP_HOME=/data/hadoop/hadoop-2.10.0

export PATH=$PATH:$HADOOP_HOME/bin

生效

source /etc/profile

3.1: 部署:

有3中安裝部署方法:

?單機(jī)安裝部署

偽分布式安裝部署

全分布式安裝部署

我們進(jìn)行偽分布式安裝部署‘

3.2:安裝java

conda install openjdk=8.0.152

java -version? 查看版本

java -verbose 查看java包路徑

配置?hadoop-env.sh文件:

vim?etc/hadoop/hadoop-env.sh

#The java implementation to use.

#export JAVA_HOME=${JAVA_HOME}

export JAVA_HOME=/mnt/d/miniconda3/envs/big_data/jre/

3.3:配置core-site.xml,執(zhí)行vim etc/hadoop/core-site.xml命令,通過fs.defaultFS指定NameNode


<configuration>

    <property>

? ? ? ? ? ? ? ? <name>fs.defaultFS</name>

? ? ? ? ? ? ? ? <value>hdfs://localhost:9000</value>

? ? ? ? ? ? </property>

? ? ? ? ? ? <property>

? ? ? ? ? ? ? ? <name>hadoop.tmp.dir</name>

? ? ? ? ? ? ? ? <value>file:/usr/local/hadoop/tmp</value>

? ? ? ? ? ? ? ? <description>Abase for other temporary directories.</description>

? ? ? ? ? ? </property>

</configuration>

3.4?配置hdfs.-site.xml,執(zhí)行vim etc/hadoop/hdfs-site.xml:(各property的含義)

<configuration>

? ? ? ? ? ? <property>

? ? ? ? ? ? ? ? <name>dfs.replication</name>

? ? ? ? ? ? ? ? <value>1</value>

? ? ? ? ? ? </property>

? ? ? ? ? ? <property>

? ? ? ? ? ? ? ? <name>dfs.namenode.name.dir</name>

? ? ? ? ? ? ? ? <value>file:/usr/local/hadoop/tmp/dfs/name</value>

? ? ? ? ? ? </property>

? ? ? ? ? ? <property>

? ? ? ? ? ? ? ? <name>dfs.datanode.data.dir</name>

? ? ? ? ? ? ? ? <value>file:/usr/local/hadoop/tmp/dfs/data</value>

? ? ? ? ? ? </property>

</configuration>


3.5 配置mapred-site.xml,先復(fù)制mapred-site.xml.template為mapred-site.xml

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

然后修改mapred-site.xml,執(zhí)行vim etc/hadoop/mapred-site.xml:

<configuration>

? ? ? ? <property>

? ? ? ? ? ? <name>mapreduce.framework.name</name>

? ? ? ? ? ? <value>yarn</value>

? ? ? ? </property>

</configuration>

3.6:配置yarn-site.xml,執(zhí)行vim etc/hadoop/yarn-site.xml

<configuration>

? ? ? ? <property>

? ? ? ? ? ? <name>yarn.nodemanager.aux-services</name>

? ? ? ? ? ? <value>mapreduce_shuffle</value>

? ? ? ? </property>

</configuration>

啟動集群

格式化HDFS文件系統(tǒng)

在master節(jié)點(diǎn)執(zhí)行:

?hadoop namenode -format

格式化namenode,第一次啟動服務(wù)前執(zhí)行的操作,以后不需要執(zhí)行。

啟動hadoop集群:

$ sbin/start-all.sh

檢查是否啟動成功 運(yùn)行jps:

72 Jps

32137 DataNode

31931 NameNode

30510 ResourceManager

32382 SecondaryNameNode

瀏覽NameNode和JobTracker的網(wǎng)絡(luò)接口,它們的地址默認(rèn)為:

NameNode?-?http://localhost:50070/

JobTracker?-?http://localhost:50030/

3.7 啟動錯誤一:

connect to host localhost port 22: Connection refused

ssh-keygen

cd ~/.ssh/

cat ./id_rsa.pub >> ./authorized_keys # 加入授權(quán)

sudo service ssh restart? ?# 重新啟動ssh服務(wù)

ssh localhost #?無需輸入密碼就可以直接登陸了

3.8:Error: JAVA_HOME is not set and could not be found

java 的環(huán)境沒用配置好參考3.2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容