尚硅谷老師揭祕大數據第三節來了!
相關資料可訪問尚硅谷下載:http://www.atguigu.com/opensource.shtml
揭祕大數據(一)從Hadoop框架討論大數據生態
揭祕大數據(二)手把手教你Hadoop運行環境搭建
Hadoop完全分佈式模式
分析:
1)準備3臺客戶機(關閉防火牆、靜態ip、主機名稱)
2)安裝jdk
3)配置環境變量
4)安裝hadoop
5)配置環境變量
6)安裝ssh
7)配置集群
8)啟動測試集群
1. 虛擬機準備
詳見大數據(二):3-4章。
2. 主機名設置
詳見大數據(二): 5章。
3. scp
scp:安全遠程文件複製程序,基於ssh。
缺點:符號連接編程轉變成文件。
1)採用scp實現遠程文件複製
(1)將test文件拷貝到192.168.10.103這個服務器上。
[root@hadoop102 tmp]# scp –r test root@hadoop103:/opt/tmp/
(2)將192.168.10.102服務器上的文件拷貝到當前用戶下。
[root@hadoop102 opt]# scp root@hadoop103:/etc/profile /opt/tmp/
(3)實現兩臺遠程機器之間的文件傳輸(hadoop103主機文件拷貝到hadoop104主機上)
[atguigu@hadoop102 test]$ scp atguigu@hadoop103:/opt/test/haha atguigu@hadoop104:/opt/test/
4. rsync
rsync遠程同步工具,主要用於備份和鏡像。具有速度快、避免複製相同內容的特點。優點:支持符號鏈接、設備等等。
(1)查看rsync使用說明
man rsync | more
(2)文件傳輸拷貝
rsync –rvl /opt/tmp/* root@hadoop103:/op t/tmp
-r 遞歸
-v 顯示覆制過程
-l 拷貝符號連接
5. SSH無密碼登錄
1)配置ssh
(1)兩臺電腦之間切換
ssh 192.168.10.102
(2)ssh連接時出現Host key verification failed的解決方法
[root@hadoop2 opt]# ssh 192.168.10.103
The authenticity of host '192.168.10.103 (192.168.10.103)' can't be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
Host key verification failed.
(3)解決方案如下:
vi /etc/ssh/ssh_config
找到# StrictHostKeyChecking ask
進入vi界面後修改
StrictHostKeyChecking no #登錄時是否詢問
UserKnownHostsFile /dev/null #表示隱藏known_hosts文件
2)無密鑰配置
(1)進入到我的home目錄
cd ~/.ssh
(2)輸入:
ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
(3)將公鑰拷貝到要免密登陸的目標機器上
ssh-copy-id 192.168.10.102
6. 編寫集群分發腳本xsync
分析:循環複製文件到所有節點的相同目錄下。
原始拷貝:
rsync –rvl /opt/module root@hadoop103:/opt/
期望執行命令:
xsync hadoop
具體實現:
1)在/usr/local/bin目錄下創建xsync文件,文件內容如下:
#!/bin/bash
#1 獲取輸入參數個數,如果沒有參數,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 獲取文件名稱
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 獲取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 獲取當前用戶名稱
user=`whoami`
#5 循環
for((host=103; host<105; host++)); do
#echo $pdir/$fname $user@hadoop$host:$pdir
echo --------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
2)修改腳本 xsync 具有執行權限
[root@hadoop102 bin]# chmod a+x xsync
3)調用腳本形式: xsync 文件名稱
7. 編寫分發腳本xcall
需求:在所有主機上執行相同的命令
1)在/usr/local/bin目錄下創建xcall文件,文件內容如下:
#!/bin/bash
pcount=$#
if((pcount==0));then
echo no args;
exit;
fi
echo -------------localhost----------
$@
for((host=101; host<=108; host++)); do
echo ----------hadoop$host---------
ssh hadoop$host $@
done
2)修改腳本 xcall 具有執行權限
[root@hadoop102 bin]# chmod a+x xcall
3)調用腳本形式: xcall 操作命令
[root@hadoop102 ~]# xcall rm -rf /opt/tmp/profile
8. 基於偽分佈式部署集群
1)集群部署規劃
Hadoop102 hadoop103 hadoop104
HDFS
NameNode SecondaryNameNode
DataNode DataNode DataNode
YARN
ResourceManager
NodeManager NodeManager NodeManager
MapReduce
JobHistoryServer
2)配置文件
core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
Hdfs
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
</configuration>
slaves
hadoop102
hadoop103
hadoop104
yarn
yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
</configuration>
mapreduce
mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79
mapred-site.xml
<configuration>
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3)在集群上分發以上所有文件
cd /opt/module/hadoop-2.7.2/etc/hadoop
xsync /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
xsync /opt/module/hadoop-2.7.2/etc/hadoop/slaves
4)查看文件分發情況
xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves
9. 集群啟動及測試
1)啟動集群:sbin/start-dfs.sh
[root@hadoop2 hadoop-2.5.0]# jps
4166 NameNode
4482 Jps
4263 DataNode
[root@hadoop3 桌面]# jps
3218 DataNode
3288 Jps
[root@hadoop4 桌面]# jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
2)啟動yarn
sbin/start-yarn.sh
注意:Namenode和ResourceManger如果不是同一臺機器,不能在NameNode上啟動 yarn,應該在ResouceManager所在的機器上啟動yarn。
3)上傳文件到集群
上傳小文件
bin/hdfs dfs –mkdir –p /user/atguigu/tmp/conf
bin/hdfs dfs –put etc/Hadoop/*-site.xml /user/atguigu/tmp/conf
上傳大文件
[atguigu@hadoop107 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input
4)上傳文件後查看文件存放在什麼位置
文件存儲路徑
[atguigu@hadoop108 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
查看文件內容
[atguigu@hadoop108 subdir0]$ cat blk_1073741825
hadoop
atguigu
atguigu
5)拼接
-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@hadoop107 subdir0]$ cat blk_1073741836>>tmp.file
[atguigu@hadoop107 subdir0]$ cat blk_1073741837>>tmp.file
[atguigu@hadoop107 subdir0]$ tar -zxvf tmp.file
6)下載
[atguigu@hadoop107 hadoop-2.7.2]$ bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz
7)集群測試
(1)基本測試
服務啟動,是否可用,簡單的應用
Hdfs
讀寫操作
bin/hdfs dfs –mkdir –p /user/atguigu/tmp/conf
bin/hdfs dfs –put etc/Hadoop/*-site.xml /user/atguigu/tmp/conf
bin/hdfs dfs –text /user/atguigu/tmp/conf/core-site.xml
Yarn
bin/Hadoop jar share/Hadoop/mapreduce/had…
Mapreduce
bin/yarn jar share/Hadoop/mapreduce/Hadoop*example*.jar wordcount /user/atguigu/……..
(2)性能測試
Hdfs
寫海量數據
讀海量數據
(3)監控集群
Cloudera Manager
部署安裝集群
監控集群
配置同步集群
預警。。。
10. Hadoop啟動方式
(1)各個服務組件逐一啟動
hdfs:
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
yarn:
yarn-daemon.sh start|stop resourcemanager|nodemanager
mapreduce
mr-historyserver-daemon.sh start|stop historyserver
(2)各個模塊分開啟動(配置ssh是前提)
hdfs:
start-dfs.sh
stop-dfs.sh
yarn:
start-yarn.sh
stop-yarn.sh
(3)全部啟動(不建議使用)
start-all.sh
stop-all.sh
11. Hadoop配置文件說明
1)Hadoop配置文件分兩類:
(1)默認配置文件:存放在相應的jar包中
core-default.xml
hdfs-default.xml
yarn-default.xml
mapred-default.xml
(2)自定義配置文件:存放在$HADOOP_HOME/etc/hadoop
core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
hdfs-site.xml
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
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>hadoop102</value>
</property>
mapred-site.xml
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
2)整理Hadoop的所有類庫和配置文件:
(1)解壓縮hadoop.tar.gz到目錄下
(2)整理jar包
拷貝share文件夾下的所有jar到_libs下
_sources
_tests
_conf
(3)抽取所有配置文件
[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
[core-default.xml]
hadoop-mapreduce-client-core-2.7.2.jar/ core-default.xml
12. 修改本地文件存儲目錄
1)查看namenode版本
[atguigu@hadoop102 current]$ pwd
/tmp/hadoop-atguigu/dfs/name/current
[atguigu@hadoop102 current]$ cat VERSION
#Mon Apr 24 10:11:03 CST 2017
namespaceID=1596486549
clusterID=CID-2e06ee71-3f23-421b-b418-32de8273b533
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1067366881-192.168.10.102-1492999863953
layoutVersion=-63
namespaceID:命名空間id
clusterID:集群id
cTime:
storageType:存儲類型
blockpoolID:
layoutVersion:
2)查看datanode版本
[atguigu@hadoop102 current]$ pwd
/tmp/hadoop-atguigu/dfs/data/current
[atguigu@hadoop102 current]$ cat VERSION
#Mon Apr 24 10:11:23 CST 2017
storageID=DS-227037ed-1c55-46c9-aed8-b19964976a76
clusterID=CID-2e06ee71-3f23-421b-b418-32de8273b533
cTime=0
datanodeUuid=45fe93b4-38a0-47f5-8235-93ffffe3df6f
storageType=DATA_NODE
layoutVersion=-56
3)查看文件存儲位置
[atguigu@hadoop102 subdir0]$ pwd
/tmp/hadoop-atguigu/dfs/data/current/BP-1067366881-192.168.10.102-1492999863953/current/finalized/subdir0/subdir0
[atguigu@hadoop102 subdir0]$ ls
blk_1073741825 blk_1073741825_1001.meta
[atguigu@hadoop102 subdir0]$ cat blk_1073741825
hadoop
hadoop
atguigu
atguigu
4)修改本地的臨時存儲目錄
(1)修改hadoop.tmp.dir
[core-site.xml]
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
(2)分發core-site.xml
xsync core-site.xml
(3)停止進程
stop-all.sh
(4)格式化
hadoop namenode -format
(5)啟動所有進程
start-all.sh
(6)重啟系統
Reboot
13. 配置集群常見問題
1)防火牆沒關閉、或者沒有啟動yarn
INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
2)主機名稱配置錯誤
3)ip地址配置錯誤
4)ssh沒有配置好
5)root用戶和atguigu兩個用戶啟動集群不統一
6)配置文件修改不細心
7)未編譯源碼
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
8)datanode不被namenode識別問題
Namenode在format初始化的時候會形成兩個標識,blockPoolId和clusterId。新的datanode加入時,會獲取這兩個標識作為自己工作目錄中的標識。
一旦namenode重新format後,namenode的身份標識已變,而datanode如果依然持有原來的id,就不會被namenode識別。
解決辦法,刪除datanode節點中的數據後,再次重新格式化namenode。