目前CSDN,博客園,簡書同步發表中,更多精彩歡迎訪問個人gitee pageshtml
準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)node
vim /etc/sysconfig/network
git
三臺機器各自的配置分別爲HOSTNAME=hadoop101;HOSTNAME=hadoop102;HOSTNAME=hadoop103web
vim /etc/hosts
shell
三臺機器都加入下面的映射關係vim
192.168.1.101 hadoop101 192.168.1.102 hadoop102 192.168.1.103 hadoop103
安裝JDK瀏覽器
配置環境變量安全
安裝Hadoopbash
配置環境變量服務器
配置集羣
單點啓動
配置ssh
羣起並測試集羣
因爲在上一章節已經配置好環境並測試了hadoop僞分佈式開發模式,因此在此再也不贅述.
scp(secure copy) 安全拷貝(全量複製)
scp定義
scp能夠實現服務器與服務器之間的數據拷貝.(from server1 to server2)
基本語法
scp -r 源文件用戶名A@主機名1:path1 目標文件用戶名B@主機名2:path2
其餘
rsync 遠程同步工具
rsync主要用於備份和鏡像。具備速度快、避免複製相同內容和支持符號連接的優勢。
rsync和scp區別:用rsync作文件的複製要比scp的速度快,rsync只對差別文件作更新。scp是把全部文件都複製過去。
rsync -rvlt path1 目標文件用戶名B@主機名2:path2
選項 | 功能 |
---|---|
-r | 遞歸 |
-v | 顯示覆制過程 |
-l | 拷貝符號鏈接 |
-t | 基於文件的修改時間進行對比,只同步修改時間不一樣的文件 |
只能將本機的文件同步到其餘機器!
注意:path1是個目錄,目錄以/結尾,只會同步目錄中的內容,不會同步目錄自己!目錄不以/結尾,同步目錄中的內容,也會同步目錄自己!
編寫xsync集羣分發腳本
需求:循環複製文件到全部節點的相同目錄下,即將當前機器的文件,同步到集羣全部機器的相同路徑下!例如:hadoop102:/A/a , 執行腳本後,將此文件同步到集羣中全部機器的 /A/a
需求分析:
dirname /home/atguigu/hi
; pwd -P)basename hi
腳本實現:
[atguigu@hadoop102 ~]$ mkdir bin [atguigu@hadoop102 ~]$ cd bin/ [atguigu@hadoop102 bin]$ touch xsync [atguigu@hadoop102 bin]$ vi xsync
在該文件中編寫以下代碼
#!/bin/bash #校驗參數是否合法 if(($#==0)) then echo 請輸入要分發的文件! exit; fi #拼接要分發文件的絕對路徑 dirpath=$(cd `dirname $1`; pwd -P) filename=`basename $1` echo 要分發的文件的路徑是:$dirpath/$filename #循環執行rsync分發文件到集羣的每臺機器 for((i=101;i<=103;i++)) do echo --------------hadoop$i------------------- rsync -rvlt $dirpath/$filename atguigu@hadoop$i:$dirpath done
修改腳本 xsync 具備執行權限
[atguigu@hadoop102 bin]$ chmod 777 xsync
或者
[atguigu@hadoop102 bin]$ chmod u+x xsync
調用腳本形式:xsync 文件名稱
編寫批量執行同一命令的腳本
#!/bin/bash #在集羣的全部機器上批量執行同一條命令 if(($#==0)) then echo 請輸入您要操做的命令! exit; fi echo 要執行的命令是$* #循環執行此命令 for((i=101;i<=103;i++)) do echo --------------hadoop$i------------------- ssh hadoop$i $* done
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
核心配置文件
[atguigu@hadoop102 hadoop]$ vi core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定Hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
HDFS配置文件
配置hadoop-env.sh
[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置hdfs-site.xml
[atguigu@hadoop102 hadoop]$ vi hdfs-site.xml
在該文件中編寫以下配置
<property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop輔助名稱節點主機配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop103:50090</value> </property>
YARN配置文件
配置yarn-env.sh
[atguigu@hadoop102 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml
[atguigu@hadoop102 hadoop]$ vi yarn-site.xml
在該文件中增長以下配置
<!-- reducer獲取數據的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop101</value> </property>
MapReduce配置文件
配置mapred-env.sh
[atguigu@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置mapred-site.xml
[atguigu@hadoop102 hadoop]$ vi mapred-site.xml
在該文件中增長以下配置
<!-- 指定mr運行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
在集羣上分發配置好的Hadoop配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
查看文件分發狀況
xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
若是集羣是第一次啓動,須要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
在hadoop102上啓動NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode [atguigu@hadoop102 hadoop-2.7.2]$ jps 8118 NameNode
啓動hadoop101,hadoop102,hadoop103上的DataNode
[atguigu@hadoop102 hadoop-2.7.2]$ xcall hadoop-daemon.sh start datanode [atguigu@hadoop101 hadoop]$ xcall jps 要執行的命令是jps --------------hadoop101------------------- 8118 NameNode 13768 Jps 8238 DataNode --------------hadoop102------------------- 8072 DataNode 12959 Jps --------------hadoop103------------------- 7347 DataNode 13950 Jps
免密登陸原理
生成公鑰和私鑰
[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
而後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
將公鑰拷貝到要免密登陸的目標機器上的/home/atguigu/.ssh目錄下的authorized_keys中
如下命令能夠直接完成上述操做
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop101 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
.ssh文件夾下(~/.ssh)的文件功能解釋
known_hosts | 記錄ssh訪問過計算機的公鑰(public key) |
---|---|
id_rsa | 生成的私鑰 |
id_rsa.pub | 生成的公鑰 |
authorized_keys | 存放受權過得無密登陸服務器公鑰 |
Login Shell
是指登陸時,須要提供用戶名密碼的shell,如:su – user1 , 圖形登陸, ctrl+alt+F2-6進入的登陸界面。
Non-Login shell
ssh 目標機器
登陸以後,執行某個命令!
屬於Login-shell,會自動讀取 /etc/profile文件中定義的全部的變量!
ssh 目標機器 命令
屬於Non-Login-shell
不會讀取/etc/profile
若是在使用命令時,咱們須要使用/etc/profile定義的一些變量,須要在目標機器的對應的用戶的家目錄/.bashrc中添加如下代碼
source /etc/profile
若是不添加以上代碼,在執行start-all.sh | stop-all.sh必定會報錯!
羣起腳本的原理是獲取集羣中全部的節點的主機名
默認讀取當前機器 HADOOP_HOME/etc/hadoop/slaves,獲取集羣中全部的節點的主機名
循環執行 ssh 主機名 hadoop-daemon.sh start xxx
保證當前機器到其餘節點,已經配置了ssh免密登陸
保證集羣中全部當前用戶的家目錄/.bashrc中,已經配置source /etc/profile
配置slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves [atguigu@hadoop102 hadoop]$ vi slaves
在文件中增長以下內容:
hadoop101 hadoop102 hadoop103
注意:該文件中添加的內容結尾不容許有空格,文件中不容許有空行。
啓動集羣
若是集羣是第一次啓動,須要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs namenode -format
啓動HDFS
[atguigu@hadoop101 hadoop]$ start-dfs.sh [atguigu@hadoop101 hadoop]$ xcall jps 要執行的命令是jps --------------hadoop101------------------- 8118 NameNode 13768 Jps 8238 DataNode --------------hadoop102------------------- 8072 DataNode 12959 Jps --------------hadoop103------------------- 7473 SecondaryNameNode 7347 DataNode 13950 Jps
啓動YARN
[atguigu@hadoop103 hadoop-2.7.2]$ start-yarn.sh
web端查看SecondaryNameNode
集羣基本測試
hadoop fs -mkdir /wcinput
hadoop fs -put hi /wcinput/
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wcinput/ /wcoutput
各個服務組件逐一啓動/中止
分別啓動/中止HDFS組件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
啓動/中止YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
各個模塊分開啓動/中止(配置ssh是前提)
總體啓動/中止HDFS
start-dfs.sh / stop-dfs.sh
總體啓動/中止YARN
start-yarn.sh / stop-yarn.sh
啓動歷史服務器
mr-jobhistory-daemon.sh start historyserver
每臺虛擬機做以下設置便可保證時間同步
也可設置定時同步時間的任務
crontab -e
* */1 * * * ntpdate -u ntp7.aliyun.com
建議:
只須要配置RM所在機器到其餘機器的SSH免密登陸! 都在RM所在的機器執行羣起和羣停腳本! xsync和xcall只放在RM所在的機器便可!