前言
回顧之前講了python文法程式設計 ,必修入門基礎和網絡程式設計,多線程/多程序/協程等方面的内容,後續講到了資料庫程式設計篇MySQL,Redis,MongoDB篇,和機器學習,全棧開發,資料分析前面沒看的也不用往前翻,系列文已經整理好了:
1.跟我一起從零開始學python(一)程式設計文法必修
2.跟我一起從零開始學python(二)網絡程式設計
3.跟我一起從零開始學python(三)多線程/多程序/協程
4.跟我一起從零開始學python(四)資料庫程式設計:MySQL資料庫
5.跟我一起從零開始學python(五)資料庫程式設計:Redis資料庫
6.跟我一起從零開始學python(六)資料庫程式設計:MongoDB資料庫
7.跟我一起從零開始學python(七)機器學習
8.跟我一起從零開始學python(八)全棧開發
9.跟我一起從零開始學python(九)資料分析
本系列文根據以下學習路線展開講述,由于内容較多,:
從零開始學python到進階進階路線圖
關注我:python技術訓練營,學習進階一步到位
适用于零基礎學習和進階人群的python資源:
① 騰訊認證python完整項目實戰教程筆記PDF
② 十幾個大廠python面試專題PDF
③ python全套視訊教程(零基礎-進階進階JS逆向)
④ 百個項目實戰+源碼+筆記
⑤ 程式設計文法-機器學習-全棧開發-資料分析-爬蟲-APP逆向等全套項目+文檔
推薦收藏!2萬字圖解Hadoop
今天我用圖解的方式講解Hadoop的用法,内容較長建議收藏,梳理不易,點贊支援。
學習 Python 程式設計,給我的經驗就是:技術要學會分享、交流,不建議閉門造車。一個人可能走的很快、但一堆人可以走的更遠。
第一部分:初識Hadoop
1.Hadoop介紹
- Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。
- 主要解決海量資料的存儲和海量資料的分析計算的問題。
- 廣義上來說,Hadoop 通常是指一個更廣泛的概念——Hadoop 生态圈。
2.Hadoop的版本
hadoop的三大發行版本:Apache、Cloudera、Hortonworks。
- Apache版本最原始(最基礎),對入門學習最好。
- Cloudera内部內建了很多大資料架構,對應産品CDH。
- Hortonworks文檔較好,對應産品HDP 。
- Hortonwork和Cloudera合并
3.Hadoop的特點
高可靠性:Hadoop底層維護多個資料副本,即使某個計算單元存儲出現故障,也不會導緻資料丢失。
- 高拓展性:在叢集之間配置設定任務資料,可友善的擴充數以萬計節點。
- 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任務處理速度。
- 高容錯性:能夠自動将失敗的任務重新配置設定。
4.Hadoop的組成
Hadoop1.X版本的組成,MapReduce負責計算和計算所需的cpu、記憶體等資源的排程
Hadoop2.X版本的組成,增加了Yarn進行資源排程,原來的MapReduce隻負責計算。
Hadoop3.X版本的組成沒啥差別,在細節上還是有差別的。
5.HDFS
HDFS(Hadoop Distributed File System)是一個分布式檔案系統。 大緻是這樣的:将一個很大的檔案拆成很多部分,然後存儲在一個個DataNode中,而NameNode中隻存儲DataNode的位置資訊,2NN對NameNode進行備份(害怕NameNode挂掉,然後丢失所有資訊。)
- NameNode(nn):存儲檔案的中繼資料,如檔案名、檔案目錄結構、檔案屬性,以及每個檔案的塊清單和塊所在的DataNode等。
- DataNode(dn):在本地檔案系統存儲檔案塊資料,以及塊資料的校驗和。
- Secondary NameNode(2nn):每隔一段時間對NameNode進行備份。
6.YARN
YARN(Yet Another Resource Negotiator),是一種資源協調者,是Hadpood的資料總管。
- ResourceManager(RM):整個叢集資源(記憶體、CPU)的老大。
- NodeManager(NM):單個節點伺服器資源老大。
- ApplicationMaster(AM):單個任務運作的老大。
- client:用戶端
- Container:容器,相當于一台獨立的伺服器,裡面封裝了運作所需的資源,如記憶體、CPU、磁盤、網絡等。
- 用戶端可有多個、叢集上可以運作多個ApplicationMaster、每個NodeManager上可以有多個Container.
7.MapReduce
MapReduce将計算過程劃分為兩個階段:MAP和Reduce
1.Map階段并行處理輸入資料。
2.Reduce階段對Map結果進行彙總。
100T的資料已經被分别存儲到很多台伺服器上,如果需要找尋某個資料,我們就可以要求各個伺服器并行尋找自己的電腦上有沒有對應的内容,然後把結果告訴彙總伺服器。
8.HDFS、YARN和MapReduce三者的關系
9.大資料處理的過程
第二部分:Hadoop之配置java與hadoop環境
我們學習hapood,需要在系統中配置JAVA和Hadoop環境,今天我們就來使用Xshell配置對應環境。一個hadoop伺服器需要這些東西,我們今天的文章隻配置java和hadoop環境。
1.打開虛拟機連接配接xshell
我這裡有三台hadoop虛拟機,我們來配置其中一台的環境,其他2台利用複制的手段就能夠安裝完成。我們先來配置hadoop103的環境。
打開Xshell連接配接上hadoop103.
2.進入到我們安裝軟體的檔案夾
這裡的檔案夾可以自己設定,隻要記得自己東西在哪就行,我一般放在/opt/software目錄下。
3.将檔案複制到該目錄下
我們這裡使用Xftp将檔案從window下拷貝進來,點選Xftp,
把java壓縮包和hadoop壓縮包拖過來。
傳輸完成後我們看看linux中有這倆包嗎?
4.解壓縮檔案安裝java的JDK
将JDK解壓到 /opt/modul/檔案夾下
tar - zxvf jdk-8u212-linux-x64.tar.gz -c/opt/modul/
然後就會出來解壓過程,等他完成就行。 我們來到解壓縮的檔案夾下,看到檔案已經複制成功。
cd/opt/moudl/
5.配置java的JDK的環境變量
使用指令進入環境變量檔案夾
cd jdk1.8.0_212/
sudo cd /etc/profile.d/
11
這個樣子:
我們在這裡建立一個.sh結尾的檔案,将它放在這裡,然後系統啟動時就會加載這個檔案,進而加載環境變量。
sudo vim my_env.sh
在檔案裡輸入以下内容:
#JAVA_HOME
JAVA_HOME=/opt/moudl/jdk1.8.0_212
exprot PATH:$JAVA_HOME/bin
輸入完之後儲存關閉
儲存完畢重新開機服務
source /etc/profile
java
重新開機後輸入java就行。
出現以下内容說明成功!
6.解壓縮Hadoop的壓縮包
将hadoop解壓到 /opt/moudl/檔案夾下
tar -zxvf hadoop-3.1.3.tar.gz -c/opt/modul/
結果如下:
然後又出現複制的過程資訊。就行了。
7.配置Hadoop的環境變量
cd/opt/modul/hadoop-3.1.3/
來到該檔案夾下後
修改環境變量檔案。
sudo vim /etc/profile.d/my_env.sh
添加如下内容
#HADOOP_HOOM
export HADOOP _HOOM =/opt/modul/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOOM/sbin
添加完後是這樣的
儲存之後重新開機資源
source /etc/profile
hapood
出來一大串就成功了
配置結束
第三部分:Hadoop之檔案複制scp和同步rsync
衆所周知,Hadoop主要有三種運作模式
- 單機模式(伺服器一台,資料由linux管理)
- 僞分布式模式(伺服器一台,資料由HDFS管理)
- 完全分布式模式(伺服器節點很多,資料分布在多台裝置HDFS管理)
目前主要學習完全分布式模式。配置完全分布式的步驟如下:
我們這一章主要是進行檔案的拷貝(因為隻完成了一台客戶機的環境配置)
1.scp介紹指令
可以實作伺服器與伺服器資料之間的拷貝
scp -r $pdir/$fname $user@host:$pdir/$fname
指令 遞歸 要拷貝的檔案名/名稱 目的地使用者/主機:目的的路徑/名稱
2.拷貝檔案
2.1我們将hadoop102上的檔案拷貝到hadoop103上
scp -r jdk1.8.0_212/ liuc1997@hadoop103:/opt/modul/
然後叫你輸入密碼,就開始複制了。來hadoop103看一下,複制成功!
2.2 我們這次在hadoop103上将hadoop102上的檔案拿過來
scp -r liuc1997@hadoop102:/opt/modul/hadoop-3.1.3 ./
然後就會叫你輸入hadoop102的密碼。
然後就會出現複制的程序,最後結束後檢視一下:
沒有問題。
2.3利用hadoop103将hadoop102的資料拷貝到hadoop104上
這是兩個跟自己毫無關系的伺服器也可以操控他們。
scp -r liuc1997@hadoop102:/opt/modul/* liuc1997@hadoop104:/opt/modul/
依次輸入hadoop102和hadoop104的密碼
然後就開始了。來到hadoop104上看一下,複制成功。
2.rsync介紹指令
上面介紹的複制指令scp是指把整個檔案夾都拷貝過來,而同步是指對兩個檔案的差異部分進行更新。 第一次同步等同于拷貝
可以實作伺服器與伺服器資料之間的同步
rsync -av $pdir/$fname $user@host:$pdir/$fname
指令 顯示複制過程 要同步的檔案名/名稱 目的地使用者/主機:目的的路徑/名稱
2.1複制差異資訊
我們在hadoop102的主機上hadoop-3.1.3檔案下先建立一個檔案hello.txt,然後将該檔案複制給hadoop104,看看效果。
将更改後的檔案複制給104主句
rsync -av hadoop-3.1.3/ liuc1997@hadoop104:/opt/modul/hadoop-3.1.3/
然後飛快的運作之後,在104的主機上就能看見這個檔案。
2.2制作同步腳本 我們cd~到使用者目錄下,建立一個bin目錄
cd ~
mkdir bin
cd bin
vim xsync
将下面内容粘過去,我們就建立了一個檔案同步工具
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#周遊所有機器
for host in hadoop102 hadoop103 hadoop104
do
echo ___________________host_________________
#3.周遊所有目錄,挨個發送
for file in $@
do
#4.判斷檔案是否存在
if [ -e $file ]
then
#5.擷取父目錄
pdir=$(cd -P $(dirname $file); pwd)
#擷取檔案夾名稱
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
然後我們cd ~ 輸入
同步三台機器的bin目錄
xsync bin/
第四部分:Hadoop之SSH免密登入
我們使用大資料技術時,經常需要通路成百上千台其他伺服器,每次都需要輸入密碼,很繁瑣,于是需要配制SSH免密登入提高效率。
1. SSH原理
SSH的原理就是伺服器A将自己的公鑰給另一台伺服器B,代表我倆可以進行通路,然後伺服器A用自己的私鑰]進行加密資料然後發送給B,B接受後利用A的公鑰解密資料知道了A要什麼,然後B把A所要的資料利用A的公鑰加密傳輸給A。這就完成了資料傳輸的流程。
2. 配置SSH
先轉到自己的使用者目錄下
cd ~
然後檢視所有檔案包括隐藏檔案。
ls-al
檢視是否存在.ssh/的檔案,如果沒有就輸入
ssh-keygen -t rsa
三次回車。出現以下結果,說明成功了。
然後再檢視
ls -al
就會發現存在.ssh/檔案,我們cd進去發現多了兩個檔案,這兩個檔案就是SSH的公鑰和私鑰,我們需要将公鑰複制給我們需要通路的伺服器。
複制公鑰給伺服器hadoop102:
ssh-copy-id hadoop102
配置完後給再給hadoop103
ssh-copy-id hadoop103
完成之後就可以通過SSH指令免密通路其他伺服器了.
ssh hadoop102
第五部分:Hadoop之叢集配置和啟動叢集(完全分布式)
在經曆過前面的環境配置後,接下來我們進行Hadoop的叢集配置,什麼叫做叢集配置,這裡是指我們将每個伺服器配置成功後,每台伺服器的Hadoop并沒有連接配接起來,我們需要進行配置,将Hadoop平台連接配接,具體内容如下:
1.叢集部署
安裝子產品如上:但這裡有幾點需要注意
- NameNode和SecondaryNameNode不要放在一台伺服器上,因為NameNode和SecondaryNameNode都很消耗資源。
- ResourceManager 也很消耗記憶體,不要和NameNode和SecondaryNameNode配置在一台伺服器上。
2.配置檔案
Hadoop的配置檔案分為兩大類,一類是預設配置檔案,一類是自定義配置檔案。當使用者想修改某些預設配置檔案時,才需要自定義配置檔案。
2.1預設配置檔案
2.2自定義配置檔案
具體看一下所在位置:
配置core-site.xml 我們在core-site.xml插入如下語句:
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8080</value>
</property>
<!-- 指定hadoop運作時産生檔案的存儲目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
配置hdfs-site.xml
<!--nn的web-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- nn2的web通路位址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
配置yarn-site.xml
<!--指定MR走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定resourcemanager的位址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</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>
配置mapred-site.xml
<!--指定mapreduce運作在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.分發檔案
我們将配置好的檔案分發給其他伺服器
xsync hadoop/
4.啟動叢集
4.1配置workers
啟動叢集之前,我們需要配置workers
vim /opt/modul/hadoop-3.1.3/etc/hadoop/workers
添加一下内容,不要有空格!
然後分發workers
xsync workers
4.2啟動叢集
4.2.1配置HDFS
第一次啟動叢集,需要在hadoop102主機上格式化NameNode(格式化NameNode會産生新的叢集id,導緻NameNode和DataNode的叢集id不一緻,叢集找不到以往資料。如果叢集在運作中報錯,需要重新格式化NameNode的話,一定要先停止namenode和DataNode程序,并且要删除所有機器的data和logs目錄,再進行格式化。)
#格式化HDFS
hdfs namenode -fromat
沒有報錯的話,就會出來這兩個檔案。 報錯了一定要終止程序并删除掉data和logs這兩個檔案
##終止程序的指令
stop-all.sh
檢查一下檔案内容,有這些東西就是沒有問題了。
接下來我們轉到hadoop-3.1.3目錄下進入sbin目錄
這裡有一個start-dfs.sh啟動叢集的指令。
接着輸入以下指令:
#啟動叢集
sbin/start-dfs.sh
hadoop102啟動成功:
hadoop103啟動成功:
hadoop104啟動成功:
通路網址,會出現以下結果
hadoop102:9870
4.2.2配置YARN
我們的yarn資源ResourceManager是需要在hadoop103上配置,一定要在hadoop103!一定要在hadoop103!一定要在hadoop103!
#啟動yarn
sbin/start-yarn.sh
jps後出現以下界面
hadoop103出現:
hadoop102出現:
hadoop104出現:
yarn的外部界面
hadoop102:8088
關注我:python技術訓練營,學習進階一步到位
适用于零基礎學習和進階人群的python資源:
① 騰訊認證python完整項目實戰教程筆記PDF
② 十幾個大廠python面試專題PDF
③ python全套視訊教程(零基礎-進階進階JS逆向)
④ 百個項目實戰+源碼+筆記
⑤ 程式設計文法-機器學習-全棧開發-資料分析-爬蟲-APP逆向等全套項目+文檔