偽分布模式
設備: 一臺 linux
特點: 在單機上模擬分布式環境,擁有Hadoop所有功能
配置文件:hadoop-env.sh,? mapred-env.sh、yarn-env.sh、core-site.xml,? hdfs-site.xml, ? mapred-site.xml, yarn-site.xml
一、 設置Hadoop用戶
二、 Hadoop安裝&配置
三 、啟動HDFS & YARN
四、 測試MapReduce Job
五 、總結
一、 設置Hadoop用戶
step1: 創建新的普通用戶hadoop
創建hadoop用戶出于保障 hdfs 的數據安全性,給不同的用戶賦予不同權限
輸入: su? -????????????? ? ? ? ? ?? 切換root用戶
輸入: useradd hadoop?????? 添加hadoop用戶
輸入: passwd hadoop?????? 輸入hadoop用戶的登陸密碼
step2:賦予hadoop用戶sudo權限
?一般root用戶無權修改sudoers, 先手動為root用戶添加寫權限
輸入:chmod? u+w? /etc/sudoers????????? 為root用戶添加寫權限
輸入: vim /etc/sudoers????????? 打開sudoers文件
輸入: i 鍵 進入編輯模式
輸入:hadoop?? ALL=(root)?? NOPASSWD:ALL???????? 添加hadoop權限
輸入: Esc 鍵,輸入 :wq? 保存并退出
在學習環境可將hadoop用戶的權限設置的大一些,但實際生產環境一定要注意普通用戶的權限限制
step3:切換到hadoop用戶
輸入: su? -?? hadoop
二、 Hadoop安裝&配置
step4:解壓hadoop
hadoop下載教程:http://www.lxweimin.com/p/a28e2305a48c
輸入: sudo? mkdir? /opt/modules??????? 創建目錄,存放hadoop文件
輸入: sudo? chown? -R??? hadoop:hadoop???? /opt/modules???????? 將存放hadoop的目錄指定為hadoop用戶,避免hadoop運行過程存在的權限問題
chown??? 命令用來修改目錄的權限
-R???? 遞歸,就是從當前目錄到子目錄
hadoop:hadoop?? 將目錄和文件的owner和group都設成 hadoop
本人已將hadoop壓縮包放在 /opt /software
輸入: cp ? hadoop-2.2.0.tar.gz?? /opt / modules?????? 將hadoop壓縮包復制到 /opt / modules目錄下
輸入: tar?? -zxvf??? hadoop-2.2.0.tar.gz??????? 解壓hadop壓縮包,直接用
step5:配置hadoop環境變量
輸入: sudo? vim?? /etc/profile??????? 打開profile目錄配置環境變量
輸入: i 鍵 進入編輯模式
輸入: export?? HADOOP_HOME = /opt /modules / hadoop-2.2.0
????????? ? export?? PATH = $PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
輸入: Esc 鍵,輸入 :wq? 保存并退出
step6:配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh文件JAVA_HOME參數
輸入: sudo?? vim?? hadoop-env.sh????? 打開 hadoop-env.sh文件
輸入: i 鍵 進入編輯模式
輸入: export?? JAVA_HOME = /usr / local / java / jdk.1.8.0_181?
添加JAVA_HOME路徑?
輸入: Esc 鍵,輸入 :wq? 保存并退出
(可輸入? echo? $JAVA_HOME? 查看? JAVA_HOME? 環境變量)
輸入: source? /etc/profile??????? 重新執行profile 文件使其生效
配置mapred-env.sh、yarn-env.sh文件JAVA_HOME參數,同理
step7:配置 core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 文件
這幾個配置文件放置在 hadoop安裝目錄下 ? /hadoop-2.2.0/etc/hadoop/
若發現沒有存在mapred-site.xml, 但存在mapred-site.xml.template
直接復制,重命名一個mapred-site.xml就可以
輸入 : cp?? mapred-site.xml.template?? ?mapred-site.xml
接下來,逐個來配置這幾個文件
(1)? 配置 core-site.xml
配置參數 :?? fs.defaultFS?? 配置HDFS的NameNode的地址
??????????????????? ? hadoop.temp.dir???? 配置HDFS數據保存的目錄。默認是Linux的tmp目錄,由于系統啟動,會清空默認的tmp目錄,導致NameNode數據丟失,所以需要創建新的tmp目錄
輸入:?? sudo?? mkdir?? -p?? /opt /modules/hadoop-2.2.0/tmp? 本人在hadoop安裝目錄下創建tmp目錄,來存放HDFS數據,你可自行創建別處目錄進行存放
輸入: sudo?? vim?? core-site.xml????? 打開core-site.xml文件
配置core-site.xml參數信息
fs.defaultFS ,hdfs的 ip,默認端口號 8020
(2)? 配置 hdfs-site.xml
配置參數 :?? dfs.replication?????HDFS存儲時的備份數量,默認是3, 偽分布設為1 ????????
輸入: sudo?? vim?? hdfs-site.xml???打開 hdfs-site.xml文件
配置 hdfs-site.xml 參數信息
(3)? 配置 mapred-site.xml
配置參數 :?? mapredure.framework.name?? 配置mapredure程序運行的容器是Yarn
輸入: sudo?? vim?? mapred-site.xml???打開mapred-site.xml文件
配置mapred-site.xml參數信息
(4)? 配置 yarn-site.xml
配置參數 :?? yarn.resourcemanager.hostname????? 配置ResourceManager的主機地址
????????????????????? yarn.nodemanager.aux-services?????? 配置NodeManager運行mapredure任務的方式
輸入: sudo?? vim?? yarn-site.xml???打開yarn-site.xml文件
配置mapred-site.xml參數信息
三 、啟動HDFS & YARN
step8: 格式化 HDFS
格式化是對HDFS中的DataNode進行分塊,并將分塊后的原始元數據存于NameNode中。
輸入: bin/hdfs? namenode?? -format????????? 格式化NameNode
格式化成功后,可在 temp 目錄中生成 dfs 目錄
輸入:? ll?? temp/dfs/name/current?????? 查看NamaNode格式化后的目錄
fsimage??? NameNode在元數據內存滿了后的持久化文件
fsimage*.md5?????? 校驗文件,校驗fsimage的完整性
seen_txid?????? hadoop的版本
vession????? 保存namesopaceID(NameNode的唯一ID)和 clusterID(集群ID)?
輸入: cat??? tmp/dfs/name/current/VERSION????? 可查看vession中內容
step8: 啟動 HDFS & YARN
方法 1 ? ? 同時全部啟動
輸入:? start-all.sh?????? 同時全部啟動
啟動都命令存放于? hadoop-2.2.0 / sbin / 目錄下
輸入:? jps??????? 查看是否啟動成功
方法 2?????? 逐個啟動
輸入: hadoop-daemon.sh?? start?? namenode? ? ? ? ? ? ? ? ??? 啟動NameNode?
輸入: hadoop-daemon.sh?? start?? datanode? ? ? ?????????? ???? 啟動DataNode?
輸入: hadoop-daemon.sh?? start? secondarynamenode??? 啟動SecondaryNameNode??
輸入: yarn-daemon.sh?? start?? resourcemanager? ? ? ? ? ? ? 啟動ResourceManager? ? ??
輸入: hadoop-daemon.sh?? start?? nodemanager? ? ? ? ? ? ?? 啟動NodeManager
輸入:? jps??????? 可查看是否啟動成功??
通過 http://192.168.100.10:8088/ 可以查看YARN的Web頁面,YARN? Web端的端口號是8088
停止 hadoop的命令,對應的使用 stop
四、 測試MapReduce Job
Hadoop 自帶的 WordCount 程序 hadoop-mapreduce-examples-2.2.0.jar,存放于hadoop安裝目錄的 share/hadoop/mapreduce/ 路徑下, 可用該程序來進行測試
Hadoop 自帶的 WordCount程序,單詞統計的功能,因此先創建一個文本作為輸入文件
step9:創建輸入文件
輸入: sudo?? vim?? /opt/data/wc.input?????? 創建wc.input文件
打開文件后, 按 i 鍵進入編輯模式,輸入單詞(it's up to you)
輸入完成后,按 Esc 鍵退出編輯模式,按 :wq? 保存并退出
輸入: hdfs? dfs? -put ? /opt/data/wc.input ? ?? /wordcountdemo/input ? ? ? ?? 將wc.input文件上傳到HDFS的/wordcountdemo/input目錄下
輸入: yarn?? jar?? share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar??? wordcount??? /wordcountdemo/input????? /wordcountdemo/output
運行功能的 .jar 包,wordcount是 jar包 需要運行的主類,wc.input 為輸入的文本參數,輸出結果保存到output目錄下
Hadoop Job的運行記錄中,可知輸入文件有1個(Total input paths to process:1)
這個Job被賦予了一個ID號:job_1535711820644_0001
同時還可以看到map和reduce的job記錄
輸入: hdfs? dfs? -ls?? /wordcountdemo/output?????? 查看輸出結果目錄
_SUCCESS文件? 說明運行成功
part-r-00000? 是輸出結果文件,-r- 說明這個文件是Reduce階段產生的結果。mapreduce程序執行中,可以沒有reduce階段,但是肯定有map階段,如果沒有reduce階段則顯示是-m-
一個reduce會產生一個 part-r-開頭的文件
輸入:? hdfs? dfs? -cat ?? /wordcountdemo/output/part - r -0000 ? ? 查看輸出文件的內容,結果按照鍵值排序而成
五 、總結
Hadoop各模塊的學習理解
1、HDFS 模塊
HDFS 數據存儲功能,負責大數據的存儲,將大文件分塊后進行分布式存儲,突破了服務器硬盤大小的限制,解決了單臺機器無法存儲大文件的問題。HDFS是個相對獨立的模塊,可以為YARN提供服務和HBase等其他模塊提供服務
運行的節點
NameNode,? DataNode,? JobTracker,? TaskTracker,? SecondaryNameNode
節點的區別
從分布式存儲的角度,集群中的結點由一個NameNode和若干個DataNode組成,另有一個SecondaryNameNode作為NameNode的備份
從分布式應用的角度,集群中的結點由一個JobTracker 和若干個TaskTracker組成,JobTracker負責任務的調度,TaskTracker負責并行執行任務。TaskTracker必須運行在DataNode上,這樣便于數據的本地計算
JobTracker和NameNode無須在同一臺機器上
2、YARN 模塊
YARN是通用的資源協同和任務調度框架,為了解決Hadoop1.x中MapReduce里NameNode負載太大和其他問題
YARN是通用框架,可運行MapReduce,還可運行Spark、Storm等其他計算框架
3、MapReduce 模塊
MapReduce是并行計算框架,通過Map階段、Reduce階段來分布式地流式處理數據。它適用于大數據的離線處理,不適用于實時性要求很高的應用