網(wǎng)站建設(shè)產(chǎn)業(yè)pest分析windows優(yōu)化軟件排行
Hadoop是什么
Hadoop是一 個由Apache基金 會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。主要解決,海量數(shù)據(jù)的存儲和海量數(shù)據(jù)的分析計(jì)算問題。廣義上來說,Hadoop通 常是指一個更廣泛的概念一Hadoop 生態(tài)圈。
Hadoop優(yōu)勢


Hadoop組成

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

缺點(diǎn)

HDFS組成架構(gòu)


常用命令實(shí)操
[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 是當(dāng)前路徑 /sanguo是目標(biāo)路徑,也就是把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)計(jì)文件夾的大小信息
[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ù)量。因?yàn)槟壳爸挥?臺設(shè)備,最多也就3個副本,只有節(jié)點(diǎn)數(shù)的增加到10臺時,副本數(shù)才能達(dá)到10。
YARN架構(gòu)
Yet Another Resource Negotiator簡稱YARN ,另一種資源協(xié)調(diào)者,是Hadoop的資源管理器。

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

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

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

報錯原因
因?yàn)闆]有路徑也沒有權(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)存只有幾百M(fèi)b,最后導(dǎo)致這兩個服務(wù)沒辦法跑起來,然后把虛擬機(jī)的內(nèi)存調(diào)到8G后,發(fā)現(xiàn)還是跑不起來,后來發(fā)現(xiàn)緩存就占了3個G以上,reboot重啟虛擬機(jī)清空緩存,然后一個個的用下面的命令去手動啟動才勉強(qiáng)跑起來
解決辦法
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)進(jì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運(yùn)行內(nèi)存都不夠用,跑了n次,通常都是跑到最后內(nèi)存不足導(dǎo)致spark和hive安裝失敗,后面發(fā)現(xiàn)是緩存占得內(nèi)存太多了,這里我不能理解為什么緩存動不動就是好幾G內(nèi)存,稍微不注意內(nèi)存就滿了,在這里我花費(fèi)了大量的時間來排查和重新部署
在部署成功后通過大數(shù)據(jù)平臺來實(shí)現(xiàn)測試hive數(shù)據(jù)庫是否可用,把mysql的數(shù)據(jù)和hive數(shù)據(jù)庫的數(shù)據(jù)互相進(jìn)行跑批量同步,測試都沒有問題,這里要注意在使用大數(shù)據(jù)平臺的時候是不能直接連接虛擬機(jī)里的hive數(shù)據(jù)庫的,需要做端口轉(zhuǎn)發(fā)同時還要關(guān)閉防火墻才可以成功連接
在部署成功的過程中接觸了很多陌生的技術(shù)概念,特別是hive、spark、hbase這些技術(shù)棧,完全不認(rèn)識,由于時間有限,目前只額外的去了解了hive技術(shù)棧,當(dāng)然也沒有很深入的去了解,了解了hive的定義、架構(gòu)、優(yōu)缺點(diǎn)、常用命令等等,剩下的技術(shù)棧在本周末進(jìn)行了解
目前學(xué)習(xí)主要是對常見的技術(shù)棧進(jìn)行簡單了解,最起碼要知道這些技術(shù)棧是干什么的?有什么優(yōu)勢?架構(gòu)是什么?然后在后續(xù)抽空系統(tǒng)的、深入的去學(xué)習(xí)這些框架,最后通過實(shí)戰(zhàn)來加深對這些框架的理解,目前的學(xué)習(xí)計(jì)劃和思路就是這樣,一口吃不成個大胖子,學(xué)習(xí)要循環(huán)漸進(jìn),而不是一氣呵成!整個學(xué)習(xí)過程中將伴隨著盡可能的詳細(xì)筆記,筆記越多越好,這樣后續(xù)方便我復(fù)習(xí)看。