Hadoop官方網站 http://hadoop.apache.org/ Hadoop運行模式 本地模式:單機運行,只是用來演示一下官方案例。生產環境不用。 偽分散式模式:也是單機運行,但是具備Hadoop集群的所有功能,一臺伺服器模擬一個分散式的環境。個別缺錢的公司用來測試,生產環境不用。 完全分 ...
Hadoop官方網站
Hadoop運行模式
-
本地模式:單機運行,只是用來演示一下官方案例。生產環境不用。
-
偽分散式模式:也是單機運行,但是具備Hadoop集群的所有功能,一臺伺服器模擬一個分散式的環境。個別缺錢的公司用來測試,生產環境不用。
-
完全分散式模式:多台伺服器組成分散式環境。生產環境使用。
本地運行模式(官方 WordCount)
-
創建在hadoop-3.1.3文件下麵創建一個wcinput文件夾
[root@hadoop102 hadoop-3.1.3]$ mkdir wcinput
-
在wcinput文件下創建一個word.txt文件
[root@hadoop102 hadoop-3.1.3]$ cd wcinput
-
編輯word.txt文件
[root@hadoop102 wcinput]$ vim word.txt
hadoop
yarn
hadoop
mapreduce
atguigu
atguigu
-
回到 Hadoop 目錄/opt/module/hadoop-3.1.3
-
執行程式
[root@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
-
查看結果
[root@hadoop102 hadoop-3.1.3]$ cat wcoutput/part-r-00000
看到如下結果:
atguigu 2
hadoop 2
mapreduce 1
yarn 1
偽分散式模式
完全分散式模式(開發重點)
-
準備3台客戶機(關閉防火牆、靜態IP、主機名稱)
-
安裝JDK
-
配置環境變數
-
安裝Hadoop
-
配置環境變數
-
配置集群
-
單點啟動
-
配置ssh
-
群起並測試集群
虛擬機準備
編寫集群分發腳本xsync
1、scp(secure copy)安全拷貝
-
定義
scp可以實現伺服器與伺服器之間的數據拷貝。(from server1 to server2)
-
基本語法
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 遞歸 要拷貝的文件路徑/名稱 目的地用戶@主機:目的地路徑/名稱
scp -r $pdir/$fname $user@$host:$pdir/$fname
-
實操
-
前提:在 hadoop102、hadoop103、hadoop104 都已經創建好的/opt/module、 /opt/software 兩個目錄
-
在hadoop102上,將hadoop102中/opt/module/jdk1.8.0_212目錄拷貝到hadoop103上。
[root@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_212 root@hadoop103:/opt/module
-
在hadoop103上,將hadoop102中/opt/module/hadoop-3.1.3目錄拷貝到hadoop103上。
[root@hadoop103 ~]$ scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
-
在hadoop103上操作,將hadoop102中/opt/module目錄下所有目錄拷貝到hadoop104上。
[root@hadoop103 opt]$ scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module
-
2、rsync遠程同步工具
-
定義
rsync主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。
-
rsync和scp區別:
用rsync做文件的複製要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都複製過去。
-
基本語法
rsync -av $pdir/$fname $user@$host:$pdir/$fname
命令 選項參數 要拷貝的文件路徑/名稱 目的地用戶@主機:目的地路徑/名稱
rsync -av pdir/fname user @user@host:pdir/fname
選線參數說明
選項 功能 -a 歸檔拷貝 -v 顯示覆制過程 -
實操
-
刪除hadoop103中/opt/module/hadoop-3.1.3/wcinput
[root@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/
-
同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103
[root@hadoop102 module]$ rsync -av hadoop-3.1.3/ root@hadoop103:/opt/module/hadoop-3.1.3/
-
3、xsync集群分發腳本
-
需求:迴圈複製文件到所有節點的相同目錄下
-
在/home/bin目錄下創建xsync文件
[root@hadoop102 opt]$ cd /home/atguigu
[root@hadoop102 ~]$ mkdir bin
[root@hadoop102 ~]$ cd bin
[root@hadoop102 bin]$ vim xsync -
在該文件編寫代碼
-
修改腳本xsync的許可權
[root@hadoop102 bin]$ chmod 777(+x) xsync
-
測試腳本
[atguigu@hadoop102 ~]$ xsync /home/atguigu/bin
-
將腳本複製到/bin中,以便全局調用
[root@hadoop102 bin]$ sudo cp xsync /bin/
-
同步環境變數配置(root所有者)
[root@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
SSH免密登錄
配置ssh
-
基本語法
ssh 另一臺電腦的 IP 地址
-
ssh 連接時出現 Host key verification failed 的解決方法
[atguigu@hadoop102 ~]$ ssh hadoop103
-
如果出現如下內容
Are you sure you want to continue connecting (yes/no)?
-
輸入 yes,並回車
-
-
退回到 hadoop102
[atguigu@hadoop103 ~]$ exit
-
查看sshd的狀態:
systemctl status sshd
無密鑰配置
免密登錄原理
生成公鑰和密鑰
[root@hadoop102 .ssh]$ pwd /home/atguigu/.ssh [root@hadoop102 .ssh]$ssh-keygen -t rsa
-
然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
將公鑰拷貝到免密登錄的目標機器上
[root@hadoop102 .ssh]$ ssh-copy-id hadoop102
[root@hadoop102 .ssh]$ ssh-copy-id hadoop103
[root@hadoop102 .ssh]$ ssh-copy-id hadoop104
註意:
-
還需要在hadoop103上採用root賬號配置一下無密登錄到hadoop102、hadoop103、hadoop104伺服器上。
-
還需要在hadoop104上採用root賬號配置一下無密登錄到hadoop102、hadoop103、hadoop104伺服器上。
-
還需要在hadoop102上採用root賬號,配置一下無密登錄到hadoop102、hadoop103、hadoop104;
ssh的文件功能
known_hosts | 記錄ssh訪問過電腦的公鑰(public key) |
---|---|
id_rsa | 生成的私鑰 |
id_rsa.pub | 生成的公鑰 |
authorized_keys | 存放授權過的無密登錄伺服器公鑰 |
集群配置
集群部署
hadoop102 | Hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNodeDataNode | DataNode | SecondaryNameNodeDataNode |
YARN | NodeManager | ResourceManagerNodeManager | NodeManager |
-
註意:
-
NameNode和SecondaryNameNode不要安裝在同一臺伺服器
-
ResourceManager也很消耗記憶體,不要和NameNode、SecondaryNameNode配置在同一臺機器上。
-
配置文件
-
Hadoop配置文件分為兩類:預設配置文件和自定義配置文件,只有用戶想修改某一預設配置值時,才需要修改自定義配置文件,更改相應屬性值。
-
預設配置文件
要獲取的預設文件 文件存放在 Hadoop 的 jar 包中的位置 [core-default.xml] hadoop-common-3.1.3.jar/core-default.xm [hdfs-default.xml] hadoop-hdfs-3.1.3.jar/hdfs-default.xml [yarn-default.xml] hadoop-yarn-common-3.1.3.jar/yarn-default.xm [mapred-default.xml] hadoop-yarn-common-3.1.3.jar/yarn-default.xm -
自定義配置文件
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四個配置文件存放在 $HADOOP_HOME/etc/hadoop 這個路徑上,用戶可以根據項目需求重新進行修改配置。
配置集群
-
核心配置文件
配置 core-site.xml
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop [atguigu@hadoop102 hadoop]$ vim core-site.xml
文件內容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value> </property> <!-- 指定 hadoop 數據的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value> </property> <!-- 配置 HDFS 網頁登錄使用的靜態用戶為 atguigu --> <property> <name>hadoop.http.staticuser.user</name> <value>atguigu</value> </property> </configuration>
-
HDFS配置文件
配置 hdfs-site.xml
[atguigu@hadoop102 hadoop]$ vim hdfs-site.xml
文件內容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 3 <configuration> 4 <!-- nn web 端訪問地址--> 5 <property> 6 <name>dfs.namenode.http-address</name> 7 <value>hadoop102:9870</value> 8 </property> 9 <!-- 2nn web 端訪問地址--> 10 <property> 11 <name>dfs.namenode.secondary.http-address</name> 12 <value>hadoop104:9868</value> 13 </property> 14 </configuration>
-
YARN配置文件
配置 yarn-site.xml
[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
文件內容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 3 <configuration> 4 <!-- 指定 MR 走 shuffle --> 5 <property> 6 <name>yarn.nodemanager.aux-services</name> 7 <value>mapreduce_shuffle</value> 8 </property> 9 <!-- 指定 ResourceManager 的地址--> 10 <property> 11 <name>yarn.resourcemanager.hostname</name> 12 <value>hadoop103</value> 13 </property> 14 <!-- 環境變數的繼承 --> 15 <property> 16 <name>yarn.nodemanager.env-whitelist</name> 17 <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO 18 NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP 19 RED_HOME</value> 20 </property> 21 </configuration>
-
MapReduce配置文件
配置 mapred-site.xml
[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
文件內容如下:
-
分發Hadoop配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop3.1.3/etc/hadoop/
-
查看分發情況
[atguigu@hadoop103 ~]$ cat /opt/module/hadoop•3.1.3/etc/hadoop/core-site.xml
[atguigu@hadoop104 ~]<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- 指定 MapReduce 程式運行在 Yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
$ cat /opt/module/hadoop•3.1.3/etc/hadoop/core-site.xml
群起集群
-
配置 workers
[atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop•3.1.3/etc/hadoop/workers
在該文件中增加如下內容:
hadoop102
hadoop103
hadoop104-
註意:該文件中添加的內容結尾不允許有空格,文件中不允許有空行。
同步所有節點配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc
-
-
啟動集群
-
如果集群是第一次啟動,需要在 hadoop102 節點格式化 NameNode(註意:格式 化 NameNode,會產生新的集群 id,導致 NameNode 和 DataNode 的集群 id 不一致,集群 找不到已往數據。如果集群在運行過程中報錯,需要重新格式化 NameNode 的話,一定要 先停止 namenode 和 datanode 進程,並且要刪除所有機器的 data 和 logs 目錄,然後再進行 格式化。)
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
-
啟動 HDFS
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
-
在配置了 ResourceManager 的節點(hadoop103)啟動 YARN
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
-
Web 端查看 HDFS 的 NameNode
瀏覽器中輸入:http://hadoop102:9870
查看 HDFS 上存儲的數據信息
-
Web 端查看 YARN 的 ResourceManager
瀏覽器中輸入:http://hadoop103:8088
查看 YARN 上運行的 Job 信息
-
-
集群基本測試
-
上傳文件到集群
上傳小文件
[atguigu@hadoop102 ~]$ hadoop fs -mkdir /input
[atguigu@hadoop102 ~]$ hadoop fs -put
$HADOOP_HOME/wcinput/word.txt /input上傳大文件
[atguigu@hadoop102 ~]$ hadoop fs -put /opt/software/jdk-8u212-
linux-x64.tar.gz / -
上傳文件後查看文件存放在什麼位置
查看 HDFS 文件存儲路徑
[atguigu@hadoop102 subdir0]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-
192.168.10.102-1610603650062/current/finalized/subdir0/subdir0查看 HDFS 在磁碟存儲文件內容
[atguigu@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
atguigu
atguigu -
拼接
-rw-rw-r--. 1 atguigu atguigu 134217728 5 月 23 16:01 blk_1073741836
-rw-rw-r--. 1 atguigu atguigu 1048583 5 月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 atguigu atguigu 63439959 5 月 23 16:01 blk_1073741837
-rw-rw-r--. 1 atguigu atguigu 495635 5 月 23 16:01 blk_1073741837_1013.meta
[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.tar.gz
[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.tar.gz
[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.tar.gz -
下載
[atguigu@hadoop104 software]$ hadoop fs -get /jdk-8u212-linux•x64.tar.gz ./
-
執行wordcount程式
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar
wordcount /input /output
-
配置歷史伺服器
為了查看程式的歷史運行情況,需要配置一下歷史伺服器。具體配置步驟如下:
-
配置 mapred-site.xml
[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
在該文件裡面增加如下配置。
1 <!-- 歷史伺服器端地址 --> 2 <property> 3 <name>mapreduce.jobhistory.address</name> 4 <value>hadoop102:10020</value> 5 </property> 6 <!-- 歷史伺服器 web 端地址 --> 7 <property> 8 <name>mapreduce.jobhistory.webapp.address</name> 9 <value>hadoop102:19888</value> 10 </property>
-
分發配置
[atguigu@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
-
在 hadoop102 啟動歷史伺服器
[atguigu@hadoop102 hadoop]$ mapred --daemon start historyserver
-
在 hadoop102 啟動歷史伺服器
[atguigu@hadoop102 hadoop]$ jps
-
查看 JobHistory
配置日誌的聚集
-
日誌聚集概念:應用運行完成以後,將程式運行日誌信息上傳到 HDFS 系統上。
-
日誌聚集功能好處:可以方便的查看到程式運行詳情,方便開發調試。
-
註意:開啟日誌聚集功能,需要重新啟動 NodeManager 、ResourceManager 和 HistoryServer。
-
配置 yarn-site.xml
[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
在該文件裡面增加如下配置。
1 <!-- 開啟日誌聚集功能 --> 2 <property> 3 <name>yarn.log-aggregation-enable</name> 4 <value>true</value> 5 </property> 6 <!-- 設置日誌聚集伺服器地址 --> 7 <property> 8 <name>yarn.log.server.url</name> 9 <value>http://hadoop102:19888/jobhistory/logs</value> 10 </property> 11 <!-- 設置日誌保留時間為 7 天 --> 12 <property> 13 <name>yarn.log-aggregation.retain-seconds</name> 14 <value>604800</value> 15 </property>
-
分發配置
[atguigu@hadoop102 hadoop]$ xsync $HADOOP_HOME/etc/hadoop/yarn•site.xml
-
關閉 NodeManager 、ResourceManager 和 HistoryServer
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[atguigu@hadoop103 hadoop-3.1.3]$ mapred --daemon stop historyserver -
啟動 NodeManager 、ResourceManage 和 HistoryServer
[atguigu@hadoop103 ~]$ start-yarn.sh
[atguigu@hadoop102 ~]$ mapred --daemon start historyserver -
刪除 HDFS 上已經存在的輸出文件
[atguigu@hadoop102 ~]$ hadoop fs -rm -r /output
-
執行 WordCount 程式
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar
wordcount /input /output -
查看日誌
-
歷史伺服器地址
-
歷史伺服器地址
-
查看任務運行日誌
-
運行日誌詳情
-
集群啟動/停止方式總結
-
各個模塊分開啟動/停止(配置 ssh 是前提)常用
-