今日課程內容大綱
01) hadoop的簡介
02) hadoop集羣的搭建
發行版本
集羣規劃
hadoop源碼編譯(瞭解)
hadoop集羣搭建
03) hadoop集羣啓動與初體驗
04) MapReduce的歷史記錄
05) HDFS的垃圾桶機制
01--Apache Hadoop--介紹和發展歷程
01) hadoop的介紹
00) hadoop1.x和hadoop2.x的區別: yarn(資源管理) 解決了單點故障問題 提升資源的利用率
01) 狹義解釋:特指Apache的一款java語言開發的開源軟件,由一下三部分組成:
HDFS: 解決海量數據存儲的hadoop分佈式文件系統
MapReduce: 解決海量數據分佈式計算問題
YARN: 解決分佈式架構中資源管理和任務調度
02) 廣義解釋:整個基於hadoop的生態系統,包括大數據處理流程中的各個階段的軟件
hive hbase zookeeper oozie sqoop flume impala storm spark flink kylin......
02) hadoop發展歷史
01) hadoop的創始人doug cutting lucene(海量數據搜索) -----> nutch (海量數據抓取)-----> 海量數據存儲和海量數據計算問題?
參考: https://www.linkedin.com/in/cutting
02) 2003年Google發表第一篇論文: GFS(Google分佈式文件系統) 解決海量數據存儲
03) 2004年Google發表第二篇論文: Google的MapReduce 解決海量數據計算
04) 同一時期,doug cutting 基於Google的兩篇論文開發出: HDFS(hadoop的分佈式文件系統) MapReduce(基於hadoop的分佈式計算平臺),成爲Apache頂級項目
05) 2006年Google發表第三篇論文: BigTable ,開源界根據論文開發了HBase(基於hadoop平臺的分佈式數據庫)
參考:資料中Google三篇論文
03) hadoop的特性
01) 擴容能力
02) 成本低
03) 高效率
04) 高可靠
02--Apache Hadoop--應用
01) hadoop精準區分: 作什麼(業務) 怎麼作(技術)
02) hadoop提供了大數據存儲能力 分佈式計算能力 不和具體的行業掛鉤 有大量數據的行業都在用hadoop
03) 行業應用:
廣告系統,基於用戶行爲分析的推薦系統,我的徵信分析,股票量化交易,智慧交通,智慧城市等等應用
03--Apache Hadoop--集羣部署安裝--發行版本介紹
01) hadoop社區版: Apache官方維護的版本
01) 優勢: 功能最新 免費
02) 缺點: 穩定性差 兼容性差
03) 下載地址:
官網下載頁面:https://hadoop.apache.org/releases.html
軟件下載頁面:https://archive.apache.org/dist/hadoop/common/
hadoop2.6.0軟件下載地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.6.0/
02) hadoop商業版: 一些商業公司在社區版的基礎上進行商業開發, 保持架構 api 配置文件等不變,僅僅解決bug及軟件兼容性問題
01) 優勢: 穩定性好 軟件兼容性好
02) 缺點: 收費 暫時不能使用最新的hadoop版本
03) 下載地址:http://archive.cloudera.com/cdh5/cdh/5/ 搜索引擎搜索: cdh archive
官網下載頁面:http://archive.cloudera.com/cdh5/cdh/5/ 搜索hadoop-2.6.0-cdh5.14.0.tar.gz
03) hadoop自身版本的發展
01) 歷經1.x 2.x 3.x
02) 1.x退出歷史舞臺, 企業主流版本2.5-2.8的版本(穩定性軟件兼容性最好), 3.x使用很少(軟件間的兼容性還未升級完畢)
04--Apache Hadoop--集羣部署安裝--集羣角色介紹&部署模式
01) 兩個集羣: HDFS集羣和yarn集羣 邏輯上分離,物理上在一塊兒
01) HDFS集羣(主從架構):
主角色: NameNode(nn)
從角色: DataNode(dn)
主角色的輔助角色(祕書角色): secondaryNameNode(snn)
02) yarn集羣(主從架構):
主角色: ResourceManager(rm)
從角色: NodeManager(nm)
03) MapReduce是須要開發的程序組件:
Map組件:
Reduce組件:
02) 部署模式:
01) standalone(單機)模式:
一臺機器,沒有HDFS, 只能測試MapReduce程序(一個進程),處理本地linux系統的文件
02) 僞集羣模式:
一臺機器上模擬一個分佈式環境,具有hadoop的主要功能,用於學習調試
03) 分佈式集羣模式:
hadoop集羣的多個進程運行在多臺服務器上,用於生產環境
04) 高可用(HA high availability)集羣模式:
主要解決單點故障 保證集羣的高可用,提升可靠性
咱們今天的部署模式: 分佈式集羣模式
05--Apache Hadoop--集羣部署安裝--服務器環境準備
01) 準備三臺服務器
1 vmware虛擬機
2 靜態ip
3 主機名稱
4 ip與主機映射
5 關閉防火牆: iptables 和 selinux
6 ssh免密登陸
7 時間同步
8 jdk環境 配置JAVA_HOME環境變量
06--Apache Hadoop--集羣部署安裝--瞭解源碼編譯的含義
01) 爲何要編譯hadoop的源碼?
01) Hadoop是使用Java語言開發的,可是有一些需求和操做並不適合使用java,因此就引入了本地庫(Native Libraries) 的概念.
說白了,就是Hadoop的某些功能,必須經過JNT來協調Java類文件和Native代碼生成的庫文件一塊兒才能工做.
02) linux系統要運行Native 代碼,首先要將Native 編譯成目標CPU 架構的[.so]文件.
而不一樣的處理器架構,須要編譯出相應平臺的動態庫[.so] 文件,
才能被正確的執行,因此最好從新編譯一次hadoop源碼,讓[.so]文件與本身處理器相對應.
注意: windows平臺是動態庫[.dll]文件
總結: 主要是要從新編譯本地庫(Native Libraries) 代碼(Linux下對應[.so]文件,window下對應[.dlI]文件),也就是編譯生成linux下的[.so] 文件。
固然若是本身修改了源碼,也須要本身從新編譯
02) 編譯環境準備
01) 立刻回來進行
01) 安裝jdk1.7
02) 安裝maven
03) 參考詳細筆記
07--Apache Hadoop--集羣部署安裝--集羣規劃
01) 集羣規劃: 在咱們準備的三臺服務器上如何搭建hadoop集羣
原則:
優先知足軟件須要的硬件資源
儘可能避免有衝突的軟件不要在一塊兒
有依賴的軟件儘可能部署在一塊兒
02) 規劃安排:
hadoop01: NameNode DataNode | ResourceManager NodeManager
hadoop02: DataNode SecondaryNameNode | NodeManager
hadoop03: DataNode | NodeManager
03) 將來擴展:
hadoop04: DataNode NodeManager
hadoop05: DataNode NodeManager
hadoop06: DataNode NodeManager
......
08--Apache Hadoop--集羣部署安裝--安裝包目錄結構
01) 上傳編譯好的安裝包到/export/software
rz hadoop-2.6.0-cdh5.14.0-with-centos6.9.tar.gz
02) 解壓安裝包到/export/servers
tar -zxvf hadoop-2.6.0-cdh5.14.0-with-centos6.9.tar.gz -C /export/servers/
03) hadoop的目錄結構
bin: Hadoop最基本的管理腳本和使用腳本的目錄,這些腳本是sbin目錄下管理腳本的基礎實現
etc: hadoop配置文件目錄
include:對外提供的編程庫頭文件(具體動態庫和靜態庫在lib目錄中)
lib: 該目錄包含了Hadoop對外提供的編程動態庫和靜態庫,與include目錄中的頭文件結合使用
libexec: 各個服務對用到的shell配置文件所在的目錄,可用於配置日誌輸出、啓動參數(好比JVM參數)等基本信息。
sbin: hadoop集羣啓動關閉的腳本(單節點逐個啓動 一鍵啓動)
share: Hadoop各個模塊編譯後的jar包所在的目錄 官方案例jar包
09--Apache Hadoop--集羣部署安裝--配置文件詳解--上
01) hadoop-env.sh
vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/export/servers/jdk1.8.0_144
02) xml配置文件(hdfs mapreduce yarn common四個模塊的配置)
參考配置: http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0/
01) core-site.xml
<!-- 指定hadoop所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:8020</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄,默認/tmp/hadoop-${user.name} -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoopdata</value>
</property>
02) hdfs-site.xml
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- secondaryNameNode所在的地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:50090</value>
</property>
03) mapred-site.xml
更名: mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- 指定mr運行時框架,這裏指定在yarn上,默認是local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
04) yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<!-- NodeManager上運行的附屬服務。需配置成mapreduce_shuffle,纔可運行MapReduce程序默認值:"" -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
大量的默認配置: http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0/
10--Apache Hadoop--集羣部署安裝--配置文件詳解--下
01) slaves文件
01) 文件做用
配合一鍵啓動腳本,決定哪些服務器上啓動從角色
經過dfs.hosts 指定文件中的機器才能加入hadoop集羣中
02) 配置內容: 一行一個主機名
vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/slaves
hadoop01
hadoop02
hadoop03
02) 將主節點上的hadoop的安裝包分發到hadoop02 和 hadoop03
cd /export/servers/
scp -r hadoop-2.6.0-cdh5.14.0/ root@hadoop02:/export/servers/
scp -r hadoop-2.6.0-cdh5.14.0/ root@hadoop03:/export/servers/
03) 配置hadoop的環境變量:
vim /etc/profile 添加以下內容:
export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
將主節點上配好的/etc/profile文件 分發到hadoop02 和 hadoop03 上
scp /etc/profile root@hadoop02:/etc/profile
scp /etc/profile root@hadoop03:/etc/profile
將三臺的環境變量生效:(在三臺上執行以下)
source /etc/profile
驗證hadoop環境變量是否生效
hadoop version
11--Apache Hadoop--集羣部署安裝--namenode format
01) 爲何須要format?
01) format主要建立hadoop運行依賴的一些文件和文件夾, 本質就是一些清理和準備工做
02) 首次啓動集羣前,須要針對hdfs進行format操做
03) format操做只須要進行一次(若是成功的話)
02) namenode format操做(在namenode所在的機器上)
hadoop namenode -format (過期的命令)
hdfs namenode -format
成功的標識:
Storage directory /export/data/hadoopdata/dfs/name has been successfully formatted.
能夠查看初始化後的文件內容: cd /export/data/hadoopdata/dfs/name/current
03) 不當心再次執行了format會如何? 怎麼解決?
會如何: 上一次初始化的集羣會出現主從角色互相不識別的狀況 以前集羣的元數據所有丟失
如何解決:將3臺服務器上hadoop.tmp.dir指定的目錄所有刪除,從新format一次(至關於一個新的集羣)
12--Apache Hadoop--集羣兩種啓動方式
01) 單節點逐個啓動:
01) 在主節點上使用如下命令啓動HDFS NameNode
hadoop-daemon.sh start namenode
02) 在每一個從節點上使用如下命令啓動HDFS DataNode
hadoop-daemon.sh start datanode
03) 在主節點上使用如下命令啓動YARN ResourceManager
yarn-daemon.sh start resourcemanager
04) 在每一個從節點上使用如下命令啓動YARN nodemanager
yarn-daemon.sh start nodemanager
05) 在hadoop02上使用以下命令啓動HDFS secondaryNameNode
hadoop-daemon.sh start secondarynamenode
說明: 以上腳本位於$HADOOP_PREFIX/sbin/目錄下.若是想要中止某個節點上某個角色,只須要把命令中的start改成stop便可。
好處: 能夠精準的控制每臺機器上每一個進程的狀態,便於排查單個服務器的異常問題
02) 一鍵啓動腳本:
01) 前提:
配置好ssh免密登陸
配置好slaves文件
02) 啓動hdfs集羣:
start-dfs.sh stop-dfs.sh
03) 啓動yarn集羣:
stat-yarn.sh stop-dfs.sh
04) 一鍵啓動兩個集羣:
start-all.sh stop-all.sh
13--Apache Hadoop--集羣初體驗--感覺hadoop
01) webUI界面
01) namenode的界面: http://hadoop01:50070
50070是webUI端口 以前配置的8020是rpc通訊端口
參考:http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
02) resourceManager的界面: http://hadoop01:8088
02) 初體驗:
01) hdfs存儲文件體驗:
顯示幫助: hadoop fs
建立目錄:hadoop fs -mkdir /test
上傳文件:hadoop fs -put 1.txt /test/
下載文件:hadoop fs -get /test/1.txt ./
體驗:
1 hdfs本質就是文件存儲的
2 結構上也是樹形目錄結構, 從/ 根目錄開始
3 有文件夾和文件
4 操做起來比較慢? 爲何慢? 難道是由於分佈式文件存儲的緣由?
02) yarn體驗,須要結合mr:
01) 運行wordcount
1 /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce
2 hadoop fs -mkdir -p /wordcount/input
3 vim wc.txt
4 hadoop fs -put wc.txt /wordcount/input
5 hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar wordcount /wordcount/input /wordcount/output
6 hadoop fs -cat /wordcount/output/part-r-00000
體驗:
mr程序本質上就是一個jar包(本身寫的程序打成jar包)
mr第一步先去找rm? 申請運行須要的資源嗎?
mr程序分紅了兩個階段: map 和 reduce階段
mr輸出的結果好像有序, 按照字典序進行升序排列(a-z,0-9)
02) 圓周率計算
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi 2 4
14--Apache Hadoop--job history服務的開啓
01) 爲何須要job history服務?
重啓yarn集羣后,上次運行的mr程序的狀態都丟失了,咱們須要保存以前運行的mr程序信息(日誌形式)
02) 如何開啓job history服務?
01) 默認狀況下沒有開啓此功能,須要在mapred-site.xml中配置並手動啓動
02) 關閉hdfs集羣
stop-dfs.sh
03) 修改mapred-site.xml
cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
vim mapred-site.xml
<!-- MapReduce JobHistory Server IPC host:port -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property>
<!-- 查看歷史服務器已經運行完的Mapreduce做業記錄的web地址,須要啓動該服務才行 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value>
</property>
04) 把修改好的配置文件scp給其餘機器
scp mapred-site.xml root@hadoop02:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/mapred-site.xml
scp mapred-site.xml root@hadoop03:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/mapred-site.xml
05)啓動hdfs集羣:
start-dfs.sh
06) 單獨啓動/關閉historyserver服務(只須要在配置的指定機器上啓動便可hadoop01)
啓動: mr-jobhistory-daemon.sh start historyserver
關閉: mr-jobhistory-daemon.sh stop historyserver
07) 訪問job history服務器
http://hadoop01:19888
注意: job history服務須要手動啓動
15--Apache Hadoop--hdfs垃圾桶機制功能
01) 爲何須要垃圾桶機制?
誤操做刪除一些重要文件,能夠進行恢復.
02) 垃圾桶機制的配置
默認誤操做刪除重要文件,沒法恢復.
01) vim core-site.xml
<!-- 刪除文件在回收站的保存時間 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
02) 把配置文件scp給其餘機器
scp core-site.xml root@hadoop02:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml
scp core-site.xml root@hadoop03:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml
03) 重啓hdfs集羣:
stop-dfs.sh
start-dfs.sh
03) 垃圾桶機制驗證
01) 刪除文件: hadoop fs -rm /test/1.txt
02) 開啓垃圾桶機制後: 本質是把刪除的文件移動到一個指定的文件夾中(每一個用戶在/user/root/.Trash下都有本身的垃圾目錄)
03) 如何恢復:
從新移動回來: hadoop fs -mv /user/root/.Trash/Current/test/1.txt /test/
04) 何時真正刪除: 垃圾桶機制配置的時間到了(1天=1440分鐘)
05) 如何跳過垃圾桶直接永久刪除: hadoop fs -rm -skipTrash /test/1.txt
今日課程總結
01) hadoop簡介: 廣義 狹義(hdfs yarn mapreduce)
02) hadoop發展歷史 hadoop (業務 技術) 精準廣告營銷推薦 短視頻推薦系統 我的徵信
03) hadoop的發行版: 社區版 商業版
04) hadoop的角色介紹: nn dn snn rm nm
05) hadoop集羣安裝:
01) hadoop的源碼編譯:
02) hadoop的目錄結構: bin sbin share etc
03) hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml slave
04) 分發安裝包
05) 格式化 hadoop namenode -format 一次性的
06) 單獨啓動 一鍵腳本:
06) hadoop集羣的體驗:
01) hdfs的體驗: 存儲海量數據的文件系統 管理文件 客戶端(命令行 java 瀏覽器客戶端)
02) MapReduce的體驗: jar包(mapper reducer main) 海量數據分佈式並集計算框架 wordcount pi
07) job history服務的開啓
08) 開啓hadoop集羣的垃圾回收機制
今天常見問題:
01) datanode不被namenode識別問題
Namenode在format初始化的時候會造成兩個標識,blockPoolId和clusterId.新的datanode加入時,會獲取這兩個標識做爲本身工做目錄中的標識.
一旦namenode從新format後,namenode的身份標識已變,而datanode若是依然持有原來的id,就不會被namenode識別.
解決辦法,刪除datanode節點中的數據後,再次從新格式化namenode.
html