java大資料最全課程學習筆記(1)--Hadoop簡介和安裝及偽分散式
阿新 • • 發佈:2020-07-12
> 目前[CSDN](https://blog.csdn.net/weixin_42208775),[部落格園](https://home.cnblogs.com/u/gitBook/),[簡書](https://www.jianshu.com/u/da41700fde04)同步發表中,更多精彩歡迎訪問我的[gitee pages](http://it-it.gitee.io/bigdata)
[toc]
# Hadoop簡介和安裝及偽分散式
## 大資料概念
### 大資料概論
> 大資料(Big Data): 指**無法在一定時間範圍**內用常規軟體工具進行捕捉,管理和處理的資料集合,是需要新處理模式才能具有更強的決策力,洞察發現力和流程優化能力的**海量,高增長率和多樣化的資訊資產.**
- 主要解決海量資料的**儲存**和海量資料的**分析計算**問題.
>按順序給出資料儲存單位:bit,Byte,KB,MB,GB,**TB,PB,EB**,ZB,YB,BB,NB,DB.
>
>1Byte =8bit 1KB=1024Byte 1MB=1024KB 1GB=1024MB 1TB=1024GB 1PB=1024TB
### 大資料特點(4V)
1. Volume(大量):
> 截至目前,人類生產的所有**印刷材料的資料量是200PB**,而歷史上**全人類總共說過的話的資料量大約是5EB**.當前,典型個人計算機硬碟的容量為TB量級,而一些**大企業的資料量已經接近EB**量級.
2. Vekocity(高速):
> 這是大資料區分於傳統資料探勘的最顯著特徵.根據IDC的"數字宇宙"的報告,**預計到2020年,全球資料使用量將達到35.2ZB.**在如此海量的資料面前,處理資料的效率就是企業的生命.
3. Variety(多樣):
> 這種型別的多樣性也讓資料被分為結構化資料和非結構化資料.相對於以往便於儲存的**以資料庫/文字為主的結構化資料**,**非結構化資料**越來越多,包括**網路日誌,音訊,視訊,圖片,地理位置資訊**等,這些多型別的資料對資料的處理能力提出了更高要求.
4. Value(低價值密度):
> 價值密度的高低與資料總量的大小成反比.如何**快速對有價值資料"提純"成為目前大資料背景下待解決的難題.**
### 大資料部門組織結構
> 大資料部門組織結構,適用於大中型企業.
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095344361-1026994554.png)
## 從Hadoop框架討論大資料生態
### Hadoop是什麼
> hadoop的初衷是採用大量的廉價機器,組成一個叢集!完成大資料的儲存和計算!
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095412053-1718258651.png)
### Hadoop三大發行版本
> Hadoop三大發行版本:Apache、Cloudera、Hortonworks。
>
> Apache版本最原始(最基礎)的版本,對於入門學習最好。
>
> Cloudera在大型網際網路企業中用的較多。
>
> Hortonworks文件較好。
### Hadoop的優勢(4高)
1. 高可靠性
> Hadoop底層維護多個數據副本,所以即使Hadoop某個計算元素或儲存出現故障,也不會導致資料的丟失.
2. 高擴充套件性
> 在叢集間分配任務資料,可方便的擴充套件數以千計的節點.
3. 高效性
> 在MapReduce的思想下,Hadoop是並行工作的,以加快任務處理速度.
4. 高容錯性
> 能夠自動將失敗的任務重新分配
### Hadoop組成(面試重點)
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095449902-1879341158.png)
- Hadoop1.x
- HDFS: 負責大資料的儲存
- common: HDFS和MR共有的常用的工具包模組
- MapReduce: 負責計算,負責計算資源的申請的排程
- 完成大資料的計算
- 寫程式.程式需要複合計算框架的要求
- java-->main-->執行
- MapReduce(程式設計模型)-->Map-->Reducer
- 執行程式.申請計算資源(CPU+記憶體,磁碟IO,網路IO)
- java-->JVM-->os-->申請計算資源
- 1.x: MapReduce(程式設計模型)-->JobTracker-->JVM-->申請計算資源
- 2.x: MapReduce(程式設計模型)-->jar-->執行時,將jar包中的任務,提交給YARN,和YARN進行通訊
- 由YARN中的元件-->JVM-->申請計算資源
- 1.x和2.x的區別是將資源排程和管理進行分離!由統一的資源排程平臺YARN進行大資料計算資源的排程!提升了Hadoop的通用性!Hadoop搭建的叢集中的計算資源,不僅可以執行Hadoop中的MR程式!也可以執行其他計算框架的程式!
- 由於MR的低效性,出現了許多更為高效的計算框架!例如:Tez,Storm,Spark,Flink
#### HDFS架構概述
> HDFS: 負責大資料的儲存
- 核心程序(必須程序):
- NameNode(1個):儲存檔案的元資料.如檔名,檔案目錄結構,檔案屬性(生成時間,副本數,檔案許可權),以及每個檔案的塊列表和塊所在的DataNode等.
- 職責
> 接收客戶端的請求!
>
> 接收DN的請求!
>
> 向DN分配任務!
- DataNode(N個):在本地檔案系統儲存檔案塊資料,以及塊資料的校驗和.
- 職責
> 負責接收NN分配的任務!
>
> 負責資料塊(block)的管理(讀,寫)!
- 可選程序:
- Secondary Namenode(N個):用來監控HDFS狀態的輔助後臺程式,每隔一段時間獲取HDFS元資料的快照.
#### MapReduce架構概述
> MapReduce將計算過程分為兩個階段:Map和Reduce
>
> > Map階段並行處理輸入資料
> >
> > Reduce階段對Map結果進行彙總
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095531392-991624860.png)
- MapReduce(程式設計規範): 程式中有Map(簡單處理)和Reducer(合併)
- 遵循MapReduce的程式設計規範編寫的程式打包後,被稱為一個Job(任務)
- Job需要提交到YARN上,向YARN申請計算資源,執行Job中的Task(程序)
- Job會先建立一個進行MRAppMaster(mapReduce應用管理者),由MRMaster向YARN申請資源!MRAppMaster負責監控Job中各個Task執行情況,進行容錯管理!
#### YARN架構概述
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095554735-564665465.png)
> YARN負責叢集中所有計算資源的管理和排程
- 常見程序
- ResourceManager(1個): 負責整個叢集所有資源的管理!
- 職責
> 負責接受客戶端的提交Job的請求!
> 負責向NM分配任務!
> 負責接受NM上報的資訊!
- NodeManager(N個): 負責單臺計算機所有資源的管理!
- 職責
> 負責和RM進行通訊,上報本機中的可用資源!
> 負責領取RM分配的任務!
> 負責為Job中的每個Task分配計算資源!
- Container(容器)
>NodeManager為Job的某個Task分配了2個CPU和2G記憶體的計算資源!
>
>為了防止當前Task在使用這些資源期間,被其他的task搶佔資源!
>
>將計算資源,封裝到一個Container中,在Container中的資源,會被暫時隔離!無法被其他程序所搶佔!
>
>當前Task執行結束後,當前Container中的資源會被釋放!允許其他task來使用!
### 大資料技術生態體系
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095628918-888067540.png)
- 圖中涉及的技術名詞解釋如下:
1. Sqoop:Sqoop是一款開源的工具,主要用於在Hadoop、Hive與傳統的資料庫(MySql)間進行資料的傳遞,可以將一個關係型資料庫(例如 :MySQL,Oracle 等)中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料導進到關係型資料庫中。
2. Flume:Flume是Cloudera提供的一個高可用的,高可靠的,分散式的海量日誌採集、聚合和傳輸的系統,Flume支援在日誌系統中定製各類資料傳送方,用於收集資料;同時,Flume提供對資料進行簡單處理,並寫到各種資料接受方(可定製)的能力。
3. Kafka:Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,有如下特性:
1. 通過O(1)的磁碟資料結構提供訊息的持久化,這種結構對於即使數以TB的訊息儲存也能夠保持長時間的穩定效能。
2. 高吞吐量:即使是非常普通的硬體Kafka也可以支援每秒數百萬的訊息。
3. 支援通過Kafka伺服器和消費機叢集來分割槽訊息。
4. 支援Hadoop並行資料載入。
4. Storm:Storm用於“連續計算”,對資料流做連續查詢,在計算時就將結果以流的形式輸出給使用者。
5. Spark:Spark是當前最流行的開源大資料記憶體計算框架。可以基於Hadoop上儲存的大資料進行計算。
6. Oozie:Oozie是一個管理Hdoop作業(job)的工作流程排程管理系統。
7. Hbase:HBase是一個分散式的、面向列的開源資料庫。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。
8. Hive:Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的SQL查詢功能,可以將SQL語句轉換為MapReduce任務進行執行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。
9. R語言:R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、原始碼開放的軟體,它是一個用於統計計算和統計製圖的優秀工具。
10. Mahout:Apache Mahout是個可擴充套件的機器學習和資料探勘庫。
11. ZooKeeper:Zookeeper是Google的Chubby一個開源的實現。它是一個針對大型分散式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分散式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。
## Hadoop執行環境搭建(開發重點)
#### 虛擬機器環境準備
1. 克隆虛擬機器
2. 修改克隆虛擬機器的靜態IP
3. 修改主機名
4. 關閉防火牆
5. 建立atguigu使用者
```shell
useradd atguigu
passwd atguigu
```
6. 配置atguigu使用者具有root許可權(詳見大資料技術之Linux)
```shell
vim /etc/sudoers
```
- 找到root所在的位置,加入**atguigu ALL=(ALL) NOPASSWD: ALL**
>root ALL=(ALL) ALL
>atguigu ALL=(ALL) NOPASSWD: ALL
7. 在/opt目錄下建立檔案
```shell
sudo mkdir module
sudo mkdir soft
```
- 將/opt目錄下建立的soft目錄和module目錄的所屬主修改為atguigu
```shell
sudo chown -R atguigu:atguigu /opt/soft /opt/module
```
#### 安裝JDK
- 安裝過程(略)
- 配置JDK環境變數
```shell
vim /etc/profile
```
- Shift+G到最後一行新增
```shell
JAVA_HOME=/opt/module/jdk1.8.0_121
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH
```
- wq儲存退出後,讓修改後的檔案生效
```shell
source /etc/profile
```
- 測試JDK是否安裝成功
```shell
java -version
```
> java version "1.8.0_144"
#### 安裝Hadoop
- 安裝過程(略)
- 將Hadoop新增到環境變數
> 最後檔案內容為:
```shell
JAVA_HOME=/opt/module/jdk1.8.0_121
HADOOP_HOME=/opt/module/hadoop-2.7.2
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME PATH HADOOP_HOME
```
#### Hadoop目錄結構
1. 檢視Hadoop目錄結構
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095651420-860642092.png)
2. 重要目錄
1. bin目錄:存放對Hadoop相關服務(HDFS,YARN)進行操作的指令碼
2. etc目錄:Hadoop的配置檔案目錄,存放Hadoop的配置檔案
3. lib目錄:存放Hadoop的本地庫(對資料進行壓縮解壓縮功能)
4. sbin目錄:存放啟動或停止Hadoop相關服務的指令碼
5. share目錄:存放Hadoop的依賴jar包、文件、和官方案例
## Hadoop執行模式
> Hadoop執行模式包括:本地模式、偽分散式模式以及完全分散式模式。
Hadoop官方網站:http://hadoop.apache.org/
### 本地執行模式
#### 官方Grep案例
1. 建立在hadoop-2.7.2檔案下面建立一個input資料夾
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ mkdir input
```
2. 將Hadoop的xml配置檔案複製到input
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ cp etc/hadoop/*.xml input
```
3. 執行share目錄下的MapReduce程式
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
```
4. 檢視輸出結果
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ cat output/*
```
#### 官方WordCount案例
1. 建立在hadoop-2.7.2檔案下面建立一個wcinput資料夾
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ mkdir wcinput
```
2. 在wcinput檔案下建立一個wc.input檔案
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ cd wcinput
[atguigu@hadoop101 wcinput]$ touch wc.input
```
3. 編輯wc.input檔案
```shell
[atguigu@hadoop101 wcinput]$ vi wc.input
```
- 在檔案中輸入如下內容
```shell
hadoop yarn
hadoop mapreduce
atguigu
atguigu
```
- 儲存退出::wq
4. 回到Hadoop目錄/opt/module/hadoop-2.7.2
5. 執行程式
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
```
6. 檢視結果
1.命令檢視
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ cat wcoutput/part-r-00000
atguigu 2
hadoop 2
mapreduce 1
yarn 1
```
2.瀏覽器檢視
http://192.168.1.100:50070
### 偽分散式執行模式
#### 啟動HDFS並執行MapReduce程式
1. 分析
1. 配置叢集
2. 啟動、測試叢集增、刪、查
3. 執行WordCount案例
2. 執行步驟
1. 配置叢集
1. 配置: hadoop-env.sh
- Linux系統中獲取JDK的安裝路徑:
```shell
[atguigu@ hadoop101 ~]# echo $JAVA_HOME
/opt/module/jdk1.8.0_144
```
- 修改JAVA_HOME 路徑:
```shell
export JAVA_HOME=/opt/module/jdk1.8.0_144
```
2. 配置: core-site.xml
```xml
```
3. 配置: hdfs-site.xml
```xml
```
2. 啟動叢集
1. **格式化NameNode**(第一次啟動時格式化,以後就不要總格式化)
```shell
atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -format
```
2. 啟動NameNode
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
```
3. 啟動DataNode
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
```
3. 檢視叢集
1. 檢視是否啟動成功
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ jps
13586 NameNode
13668 DataNode
13786 Jps
```
> 注意:jps是JDK中的命令,不是Linux命令。不安裝JDK不能使用jps
2. web端檢視HDFS檔案系統
http://192.168.1.100:50070/dfshealth.html#tab-overview
3. 檢視產生的Log日誌
*說明:在企業中遇到Bug時,經常根據日誌提示資訊去分析問題、解決Bug。*
- 當前目錄:/opt/module/hadoop-2.7.2/logs
```shell
[atguigu@hadoop101 logs]$ ls
hadoop-atguigu-datanode-hadoop.atguigu.com.log
hadoop-atguigu-datanode-hadoop.atguigu.com.out
hadoop-atguigu-namenode-hadoop.atguigu.com.log
hadoop-atguigu-namenode-hadoop.atguigu.com.out
SecurityAuth-root.audit
[atguigu@hadoop101 logs]# cat hadoop-atguigu-datanode-hadoop101.log
```
4. **思考:為什麼不能一直格式化NameNode,格式化NameNode,要注意什麼?**
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/name/current/
[atguigu@hadoop101 current]$ cat VERSION
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
[atguigu@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/data/current/
clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
```
**注意:格式化NameNode,會產生新的叢集id,導致NameNode和DataNode的叢集id不一致,叢集找不到已往資料。所以,格式NameNode時,一定要先刪除data資料和log日誌,然後再格式化NameNode。**
4. 操作叢集
1. 在HDFS檔案系統上**建立**一個input資料夾
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/atguigu/input
```
2. 將測試檔案內容**上傳**到檔案系統上
```shell
[atguigu@hadoop101 hadoop-2.7.2]$bin/hdfs dfs -put wcinput/wc.input /user/atguigu/input/
```
3. **檢視**上傳的檔案是否正確
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -ls /user/atguigu/input/
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/ input/wc.input
```
4. 執行MapReduce程式
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input/ /user/atguigu/output
```
5. 檢視輸出結果
- 命令列檢視:
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
```
- 瀏覽器檢視:
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095735992-208672439.png)
6. 將測試檔案內容**下載**到本地
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -get /user/atguigu/output/part-r-00000 ./wcoutput/
```
7. **刪除**輸出結果
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -r /user/atguigu/output
```
#### YARN上執行MapReduce 程式
1. 分析
1. 配置叢集YARN上執行
2. 啟動、測試叢集增、刪、查
3. 在YARN上執行WordCount案例
2. 執行步驟
1. 配置叢集
1. 配置yarn-env.sh
> 配置一下JAVA_HOME
```shell
export JAVA_HOME=/opt/module/jdk1.8.0_144
```
2. 配置yarn-site.xml
```xml
```
3. 配置:mapred-env.sh
> 配置一下JAVA_HOME
```shell
export JAVA_HOME=/opt/module/jdk1.8.0_144
```
4. 配置: (對mapred-site.xml.template重新命名為) mapred-site.xml
```shell
[atguigu@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml
[atguigu@hadoop101 hadoop]$ vi mapred-site.xml
```
```xml
```
2. 啟動叢集
1. **啟動前必須保證NameNode和DataNode已經啟動**
2. 啟動ResourceManager
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
```
3. 啟動NodeManager
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
```
3. 叢集操作
1. YARN的瀏覽器頁面檢視
> http://192.168.1.100:8088/cluster
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095755957-709587994.png)
2. 刪除檔案系統上的output檔案
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
```
3. 執行MapReduce程式
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
```
4. 檢視執行結果
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
```
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095811301-1726117772.png)
### 配置歷史伺服器
> 為了檢視程式的歷史執行情況,需要配置一下歷史伺服器
1. 配置mapred-site.xml
```shell
[atguigu@hadoop101 hadoop]$ vi mapred-site.xml
```
在該檔案裡面增加如下配置
```xml
```
2. 啟動歷史伺服器
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
```
3. 檢視歷史伺服器是否啟動
```shell
atguigu@hadoop101 hadoop-2.7.2]$ jps
```
4. 檢視JobHistory
http://192.168.1.100:19888/jobhistory
### 配置日誌的聚集
>日誌聚集概念:應用執行完成以後,將程式執行日誌資訊上傳到HDFS系統上。
>
>日誌聚集功能好處:可以方便的檢視到程式執行詳情,方便開發除錯。
>
>**注意:開啟日誌聚集功能,需要重新啟動NodeManager 、ResourceManager和HistoryManager。**
- 開啟日誌聚集功能具體步驟如下:
1. 配置yarn-site.xml
```shell
[atguigu@hadoop101 hadoop]$ vi yarn-site.xml
```
**在該檔案裡面增加如下配置**
```xml
```
2. 關閉NodeManager 、ResourceManager和HistoryManager
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver
```
3. 啟動NodeManager 、ResourceManager和HistoryManager
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
```
4. 刪除HDFS上已經存在的輸出檔案
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
```
5. 執行WordCount程式
```shell
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
```
- 我wc1裡有檔案,wc3不存在
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095841222-1414735541.png)
- 所以我執行了一個簡單的測試命令
> hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wc1 /wc3
6. 檢視日誌
> http://192.168.1.100:19888/jobhistory
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095855205-364412632.png)
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095915657-114355103.png)
![](https://img2020.cnblogs.com/blog/1577985/202007/1577985-20200712095923563-756239005.png)
## 配置檔案說明及其他注意事項
### 配置檔案說明
> Hadoop配置檔案分兩類:預設配置檔案和自定義配置檔案,只有使用者想修改某一預設配置值時,才需要修改自定義配置檔案,更改相應屬性值。
- 預設配置檔案
| 要獲取的預設檔案 | 檔案存放在Hadoop的jar包中的位置 |
| -------------------- | ---------------------------------------------------------- |
| [core-default.xml] | hadoop-common-2.7.2.jar/ core-default.xml |
| [hdfs-default.xml] | hadoop-hdfs-2.7.2.jar/ hdfs-default.xml |
| [yarn-default.xml] | hadoop-yarn-common-2.7.2.jar/ yarn-default.xml |
| [mapred-default.xml] | hadoop-mapreduce-client-core-2.7.2.jar/ mapred-default.xml |
- 自定義配置檔案
> core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四個配置檔案存放在$HADOOP_HOME/etc/hadoop這個路徑上,使用者可以根據專案需求重新進行修改配置。
### 其他注意事項
- 本次學習使用的虛擬機器系統是centOS6.8,和生產環境普遍使用的centOS7.X的部分命令有差異,請注意識別!
- 在Hadoop中啟動多種不同型別的程序.例如NN,DN,RM,NM,這些程序需要進行通訊!在通訊時,常用主機名進行通訊!
- 在192.168.1.100機器上的DN程序,希望訪問192.168.1.104機器的NN程序!需要在叢集的每臺機器上,配置叢集中所有機器的host對映!
- 配置:
> Linux: /etc/hosts
> Windows: C:\Windows\System32\drivers\etc\hosts
- 不配報錯:DNS對映異常,HOST對映異常
- **Linux配置完hosts檔案後一定要重啟網路配置!!!**
> service network restart
- 注意許可權
- hadoop框架在執行需要產生很多資料(日誌),資料的儲存目錄,必須讓當前啟動hadoop程序的使用者擁有寫許可權!
- 關閉防火牆,設定開機不自啟動
> service iptables stop
> chkconfig iptables off
- HDFS的執行模式的引數設定
> fs.defaultFS在core-default.xml中!
- 本地模式(在本機上使用HDFS,使用的就是本機的檔案系統)
> fs.defaultFS=file:///(預設)
- 分散式模式
> fs.defaultFS=hdfs://
- 提交任務的命令
> hadoop jar jar包 主類名 引數{多個輸入目錄,一個輸出目錄}
**輸入目錄中必須全部是檔案!**
**輸出目錄必須不存