商融建設(shè)集團有限公司網(wǎng)站廣州網(wǎng)站seo推廣
Hadoop是什么
Hadoop是一 個由Apache基金 會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。主要解決,海量數(shù)據(jù)的存儲和海量數(shù)據(jù)的分析計算問題。廣義上來說,Hadoop通 常是指一個更廣泛的概念一Hadoop 生態(tài)圈。
Hadoop優(yōu)勢


Hadoop組成

HDFS架構(gòu)
Hadoop Distributed File System,簡稱HDFS,是一個分布式文件系統(tǒng)。
HDFS優(yōu)缺點
優(yōu)點

缺點

HDFS組成架構(gòu)


常用命令實操
[atguigu@hadoop102 hadoop-3.1.3]$ bin/hadoop fs
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] <path> ...]
[-cp [-f] [-p] <src> ... <dst>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-d] [-h] [-R] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] <localsrc> ... <dst>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
<acl_spec> <path>]]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
上傳
1)-moveFromLocal:從本地剪切粘貼到HDFS
[atguigu@hadoop102 hadoop-3.1.3]$ vim shuguo.txt
輸入:shuguo
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -moveFromLocal ./shuguo.txt /sanguo
(./shuguo.txt 是當前路徑 /sanguo是目標路徑,也就是把shuguo.txt剪切到hdfs的/sanguo路徑下去)
2)-copyFromLocal:從本地文件系統(tǒng)中拷貝文件到HDFS路徑去
[atguigu@hadoop102 hadoop-3.1.3]$ vim weiguo.txt
輸入:weiguo
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -copyFromLocal weiguo.txt /sanguo
3)-put:等同于copyFromLocal,生產(chǎn)環(huán)境更習(xí)慣用put
[atguigu@hadoop102 hadoop-3.1.3]$ vim wuguo.txt
輸入:wuguo
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -put ./wuguo.txt /sanguo
4)-appendToFile:追加一個文件到已經(jīng)存在的文件末尾
[atguigu@hadoop102 hadoop-3.1.3]$ vim liubei.txt
輸入:liubei
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt
下載
1)-copyToLocal:從HDFS拷貝到本地
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -copyToLocal /sanguo/shuguo.txt ./
2)-get:等同于copyToLocal,生產(chǎn)環(huán)境更習(xí)慣用get
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt
HDFS直接操作
1)-ls: 顯示目錄信息
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -ls /sanguo
2)-cat:顯示文件內(nèi)容
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -cat /sanguo/shuguo.txt
3)-chgrp、-chmod、-chown:Linux文件系統(tǒng)中的用法一樣,修改文件所屬權(quán)限
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -chmod 666 /sanguo/shuguo.txt
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -chown atguigu:atguigu /sanguo/shuguo.txt
4)-mkdir:創(chuàng)建路徑
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /jinguo
5)-cp:從HDFS的一個路徑拷貝到HDFS的另一個路徑
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -cp /sanguo/shuguo.txt /jinguo
6)-mv:在HDFS目錄中移動文件
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /sanguo/wuguo.txt /jinguo
7)-tail:顯示一個文件的末尾1kb的數(shù)據(jù)
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -tail /jinguo/shuguo.txt
8)-rm:刪除文件或文件夾
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -rm /sanguo/shuguo.txt
9)-rm -r:遞歸刪除目錄及目錄里面內(nèi)容
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /sanguo
10)-du統(tǒng)計文件夾的大小信息
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -du -s -h /jinguo
27 81 /jinguo
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -du -h /jinguo(分別查看文件李的每個文件所占容量大小,第一個數(shù)是單個文件的容量,第二個數(shù)字是多個副本共同所占的容量)
14 42 /jinguo/shuguo.txt
7 21 /jinguo/weiguo.txt
6 18 /jinguo/wuguo.tx
說明:27表示文件大小;81表示27*3個副本;/jinguo表示查看的目錄
11)-setrep:設(shè)置HDFS中文件的副本數(shù)量
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -setrep 10 /jinguo/shuguo.txt

這里設(shè)置的副本數(shù)只是記錄在NameNode的元數(shù)據(jù)中,是否真的會有這么多副本,還得看DataNode的數(shù)量。因為目前只有3臺設(shè)備,最多也就3個副本,只有節(jié)點數(shù)的增加到10臺時,副本數(shù)才能達到10。
YARN架構(gòu)
Yet Another Resource Negotiator簡稱YARN ,另一種資源協(xié)調(diào)者,是Hadoop的資源管理器。

MapReduce架構(gòu)
MapReduce是一個分布式運算程序的編程框架,MapReduce將計算過程分為兩個階段:Map和Reduce
Map階段并行處理輸入數(shù)據(jù)
Reduce階段對Map結(jié)果進行匯總
MapReduce優(yōu)缺點
優(yōu)點
1)MapReduce易于編程
它簡單的實現(xiàn)一些接口,就可以完成一個分布式程序,這個分布式程序可以分布到大量廉價的PC機器上運行。也就是說你寫一個分布式程序,跟寫一個簡單的串行程序是一模一樣的。就是因為這個特點使得MapReduce編程變得非常流行。
2)良好的擴展性
當你的計算資源不能得到滿足的時候,你可以通過簡單的增加機器來擴展它的計算能力。
3)高容錯性
MapReduce設(shè)計的初衷就是使程序能夠部署在廉價的PC機器上,這就要求它具有很高的容錯性。比如其中一臺機器掛了,它可以把上面的計算任務(wù)轉(zhuǎn)移到另外一個節(jié)點上運行,不至于這個任務(wù)運行失敗,而且這個過程不需要人工參與,而完全是由Hadoop內(nèi)部完成的。
4)適合PB級以上海量數(shù)據(jù)的離線處理
可以實現(xiàn)上千臺服務(wù)器集群并發(fā)工作,提供數(shù)據(jù)處理能力。
缺點
1)不擅長實時計算
MapReduce無法像MySQL一樣,在毫秒或者秒級內(nèi)返回結(jié)果。
2)不擅長流式計算
流式計算的輸入數(shù)據(jù)是動態(tài)的,而MapReduce的輸入數(shù)據(jù)集是靜態(tài)的,不能動態(tài)變化。這是因為MapReduce自身的設(shè)計特點決定了數(shù)據(jù)源必須是靜態(tài)的。
3)不擅長DAG(有向無環(huán)圖)計算
多個應(yīng)用程序存在依賴關(guān)系,后一個應(yīng)用程序的輸入為前一個的輸出。在這種情況下,MapReduce并不是不能做,而是使用后,每個MapReduce作業(yè)的輸出結(jié)果都會寫入到磁盤,會造成大量的磁盤IO,導(dǎo)致性能非常的低下。
MapReduce核心思想

(1)分布式的運算程序往往需要分成至少2個階段。
(2)第一個階段的MapTask并發(fā)實例,完全并行運行,互不相干。
(3)第二個階段的ReduceTask并發(fā)實例互不相干,但是他們的數(shù)據(jù)依賴于上一個階段的所有MapTask并發(fā)實例的輸出。
(4)MapReduce編程模型只能包含一個Map階段和一個Reduce階段,如果用戶的業(yè)務(wù)邏輯非常復(fù)雜,那就只能多個MapReduce程序,串行運行。
總結(jié):分析WordCount數(shù)據(jù)流走向深入理解MapReduce核心思想。
MapReduce進程
一個完整的MapReduce程序在分布式運行時有三類實例進程:
(1)MrAppMaster:負責(zé)整個程序的過程調(diào)度及狀態(tài)協(xié)調(diào)。
(2)MapTask:負責(zé)Map階段的整個數(shù)據(jù)處理流程。
(3)ReduceTask:負責(zé)Reduce階段的整個數(shù)據(jù)處理流程。
HDFS、YARN、MapReduce三者關(guān)系

遇到的bug
bug1
報錯信息
在使用自動化部署的腳本的時候,報錯連接不上數(shù)據(jù)庫
報錯原因
在確定數(shù)據(jù)庫賬號密碼和ip地址無誤的情況下,還是連接不上數(shù)據(jù)庫,最后發(fā)現(xiàn)是自動化腳本不支持mysql8.0+
解決辦法
在虛擬機上安裝mysql5.7.41
bug2
參考文章:https://blog.csdn.net/qq_20780541/article/details/122035569安裝mysql有很多報錯
報錯信息

報錯原因
因為沒有路徑也沒有權(quán)限,所以創(chuàng)建此路徑并授權(quán)給mysql用戶
解決辦法
mkdir /var/log/mariadb
touch /var/log/mariadb/mariadb.log
# 用戶組及用戶
chown -R mysql:mysql /var/log/mariadb/
/usr/local/mysql/support-files/mysql.server start
報錯信息

解決辦法
mkdir /var/lib/mysql
chmod 777 /var/lib/mysql
報錯信息

解決辦法
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
報錯信息
Host is not allowed to connect to this MySQL server
解決辦法
use mysql;
update user set user.Host='%' where user.User='root';
flush privileges;
或
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'Admin123@qwe' WITH GRANT OPTION;
flush privileges;
報錯信息
ERROR 1130: Host '192.168.10.173' is not allowed to connect to this MySQL ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
解決辦法
不用管他,使用flush privileges;刷新一下權(quán)限就可
忘記數(shù)據(jù)庫密碼教程:https://blog.csdn.net/m0_70556273/article/details/126490767
bug3
報錯信息
ssh: connect to host master port 22: No route to host
報錯原因
可能是防火墻或者網(wǎng)絡(luò)的問題,但是我的防火墻是關(guān)閉了的,然后發(fā)現(xiàn)是vi /etc/hosts配置的ip有問題
解決辦法
修改成正確的host配置即可
bug4
報錯信息
在使用自動化部署腳本的時候發(fā)現(xiàn)hive和spark起不來,一直報錯
報錯原因
通過free -h查看后發(fā)現(xiàn)是內(nèi)存不夠,這里主要是緩存占的內(nèi)存太多了,動不動就是3G以上,導(dǎo)致可用內(nèi)存只有幾百Mb,最后導(dǎo)致這兩個服務(wù)沒辦法跑起來,然后把虛擬機的內(nèi)存調(diào)到8G后,發(fā)現(xiàn)還是跑不起來,后來發(fā)現(xiàn)緩存就占了3個G以上,reboot重啟虛擬機清空緩存,然后一個個的用下面的命令去手動啟動才勉強跑起來
解決辦法
cd /usr/lib/python2.7/site-packages/deployment*-py2.7.egg/deployment/hadoop/
python manager_hadoop.py-----------------------------------------------------------------------------------------------
restart_all 重啟所有Hadoop相關(guān)組件,包括重啟 Hadoop、Hive、Spark、Hbase、Phoenix-QueryServer
stop_all 停止所有Hadoop相關(guān)組件,包括停止 Hadoop、Hive、Spark、Hbase、Phoenix-QueryServer
start_all 啟動所有Hadoop相關(guān)組件,包括啟動 Hadoop、Hive、Spark、Hbase、Phoenix-QueryServer
start_hadoop 啟動Hadoop,包括啟動 Hdfs、Yarn、JobHistoryServer
stop_hadoop 停止Hadoop,包括停止 Hdfs、Yarn、JobHistoryServer
start_hive 啟動Hive,包括啟動 Hive元數(shù)據(jù)服務(wù)、HiveServer2
stop_hive 停止Hive所有相關(guān)進程,包括停止 Hive元數(shù)據(jù)服務(wù)、HiveServer2、Hive客戶端連接等
start_spark 啟動Spark,包括啟動 Master、Worker
stop_spark 停止Spark,包括停止 Master、Worker
start_hbase 啟動Hbase,包括啟動 HMaster、HRegionServer
stop_hbase 停止Hbase,包括停止 HMaster、HRegionServer
start_phoenix_queryserver 啟動Phoenix的QueryServer,用于支持瘦客戶端連接方式
stop_phoenix_queryserver 停止Phoenix的QueryServer
help 使用幫助
------------------------------python manager_hadoop.py stop_all
Hadoop學(xué)習(xí)總結(jié)
本次在部署Hadoop時采用的是自動化腳本部署,一開始以為幾分鐘就可以弄好,后面發(fā)現(xiàn)在跑腳本的時候各種各樣的錯誤,特別是內(nèi)存導(dǎo)致的問題,我開三臺服務(wù),每臺8G運行內(nèi)存都不夠用,跑了n次,通常都是跑到最后內(nèi)存不足導(dǎo)致spark和hive安裝失敗,后面發(fā)現(xiàn)是緩存占得內(nèi)存太多了,這里我不能理解為什么緩存動不動就是好幾G內(nèi)存,稍微不注意內(nèi)存就滿了,在這里我花費了大量的時間來排查和重新部署
在部署成功后通過大數(shù)據(jù)平臺來實現(xiàn)測試hive數(shù)據(jù)庫是否可用,把mysql的數(shù)據(jù)和hive數(shù)據(jù)庫的數(shù)據(jù)互相進行跑批量同步,測試都沒有問題,這里要注意在使用大數(shù)據(jù)平臺的時候是不能直接連接虛擬機里的hive數(shù)據(jù)庫的,需要做端口轉(zhuǎn)發(fā)同時還要關(guān)閉防火墻才可以成功連接
在部署成功的過程中接觸了很多陌生的技術(shù)概念,特別是hive、spark、hbase這些技術(shù)棧,完全不認識,由于時間有限,目前只額外的去了解了hive技術(shù)棧,當然也沒有很深入的去了解,了解了hive的定義、架構(gòu)、優(yōu)缺點、常用命令等等,剩下的技術(shù)棧在本周末進行了解
目前學(xué)習(xí)主要是對常見的技術(shù)棧進行簡單了解,最起碼要知道這些技術(shù)棧是干什么的?有什么優(yōu)勢?架構(gòu)是什么?然后在后續(xù)抽空系統(tǒng)的、深入的去學(xué)習(xí)這些框架,最后通過實戰(zhàn)來加深對這些框架的理解,目前的學(xué)習(xí)計劃和思路就是這樣,一口吃不成個大胖子,學(xué)習(xí)要循環(huán)漸進,而不是一氣呵成!整個學(xué)習(xí)過程中將伴隨著盡可能的詳細筆記,筆記越多越好,這樣后續(xù)方便我復(fù)習(xí)看。