Hadoop 完全分布式部署
完全分布式部署Hadoop
分析:
1)準備3臺客戶機(關閉防火墻、靜態ip、主機名稱)
2)安裝jdk
3)配置環境變量
4)安裝hadoop
5)配置環境變量
6)安裝ssh
7)集群時間同步
7)配置集群
8)啟動測試集群
- 1. 虛擬機準備
準備三臺裝有Centos系統的虛擬機,可以參考https://www.cnblogs.com/Transkai/p/10404127.html
然後對靜態ip進行配置,可以參考 https://www.cnblogs.com/Transkai/p/10404253.html
- 2. 主機名設置
0)查看主機名基本語法:
[root@hadoop-001 /]#hostname
1)修改linux的hosts文件
(1)進入Linux系統查看本機的主機名。通過hostname命令查看
[root@hadoop ~]# hostname
hadoop-001
(2)如果感覺此主機名不合適,我們可以進行修改。通過編輯/etc/sysconfig/network文件
[root@hadoop-001 /]# vi /etc/sysconfig/network
文件中內容
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME= hadoop-001
註意:主機名稱不要有“_”下劃線
(3)打開此文件後,可以看到主機名。修改此主機名為我們想要修改的主機名hadoop-001。
(4)保存退出。
(5)打開/etc/hosts
[root@hadoop-001 /]# vim /etc/hosts
添加如下內容
192.168.137.188 hadoop001
(6)並重啟設備,重啟後,查看主機名,已經修改成功
2)修改window10的hosts文件
(1)進入C:\Windows\System32\drivers\etc路徑
(2)打開hosts文件並添加如下內容
192.168.137.188 hadoop-001
並按以上步驟配置好hadoop-002,hadoop-003
- 3. 安裝jdk,Hadoop,配置環境變量
配置jdk文件
1、解壓jdk軟件
jdk-8u161-linux-x64.tar.gz
1、配置環境變量
export JAVA_HOME=/home/hadoop/bigdatasoftware/jdk1.8.0_161
PATH=$PATH:$JAVA_HOME/bin
配置hadoop(本地模式)
1、解壓hadoop軟件
tar -zxvf hadoop-2.7.2.tar.gz
2、配置hadoop的環境變量
a、vi ~/.bash_profile
添加以下內容:
export HADOOP_HOME=/home/hadoop/bigdatasoftware/hadoop-2.7.2
PATH=$PATH:$HADOOP_HOME/bin:$$HADOOP_HOME/sbin/
b、source ~/.bash_profile
3、hadoop version
Hadoop 2.7.2
- 4. SSH無密碼登錄
(1)進入到我的home目錄
cd ~/.ssh
(2)生成公鑰和私鑰:
ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
(3)將公鑰拷貝到要免密登錄的目標機器上
ssh-copy-id 192.168.1.102
.ssh文件夾下的文件功能解釋
(1)~/.ssh/known_hosts :記錄ssh訪問過計算機的公鑰(public key)
(2)id_rsa :生成的私鑰
(3)id_rsa.pub :生成的公鑰
(4)authorized_keys :存放授權過得無秘登錄服務器公鑰
- 5. 配置集群
1)集群部署規劃
|
hadoop-001 |
hadoop-002 |
hadoop-003 |
HDFS
|
NameNode DataNode |
DataNode |
SecondaryNameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
2)配置文件
(1)core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs:// hadoop-001:9000</value> </property> <!-- 指定hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property> |
(2)Hdfs
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79 |
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value> hadoop-003:50090</value> </property> </configuration> |
slaves
hadoop-001 hadoop-002 hadoop-003 |
(3)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>Hadoop-002</value> </property> </configuration> |
(4)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> |
6.scp指令
1)scp可以實現服務器與服務器之間的數據拷貝。
2)案例實操
(1)將hadoop-001中/home/hadoop文件拷貝到hadoop-002、hadoop-003上。
[hadoop@hadoop-001 /]# scp -r /home/hadoop/bigdatasoftware hadoop@hadoop-002:/home/hadoop/
[hadoop@hadoop-001 /]# scp -r /home/hadoop/bigdatasoftware hadoop@hadoop-003:/home/hadoop/
(2)將192.168.1.102服務器上的文件拷貝到當前用戶下。
[root@hadoop101 opt]# scp root@hadoop102:/etc/profile /opt/tmp/
(3)實現兩臺遠程機器之間的文件傳輸(hadoop103主機文件拷貝到hadoop104主機上)
[hadoop@hadoop102 test]$ scp hadoop@hadoop103:/opt/test/haha hadoop@hadoop104:/opt/test/
7.集群啟動及測試
1)啟動集群
(0)如果集群是第一次啟動,需要格式化namenode
[[email protected]]# bin/hdfs namenode -format
(1)啟動HDFS:
[root@hadoop-001 hadoop-2.7.2]# sbin/start-dfs.sh
[root@hadoop-001 hadoop-2.7.2]# jps
4166 NameNode
4482 Jps
4263 DataNode
[root@hadoop-002 桌面]# jps
3218 DataNode
3288 Jps
[root@hadoop-003 桌面]# jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps
(2)啟動yarn
sbin/start-yarn.sh
註意:Namenode和ResourceManger如果不是同一臺機器,不能在NameNode上啟動 yarn,應該在ResouceManager所在的機器上啟動yarn。
2)集群基本測試
(1)上傳文件到集群
上傳小文件
bin/hdfs dfs -mkdir -p /home/hadoop/tmp/conf
bin/hdfs dfs -put etc/hadoop/*-site.xml /home/hadoop/tmp/conf
上傳大文件
[hadoop@hadoop-001 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/hadoop/input
(2)上傳文件後查看文件存放在什麽位置
文件存儲路徑
[hadoop@hadoop102 subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0
查看文件內容
[hadoop@hadoop102 subdir0]$ cat blk_1073741825
hadoop
hadoop
hadoop
(3)拼接
-rw-rw-r--. 1 hadoop hadoop 134217728 5月 23 16:01 blk_1073741836
-rw-rw-r--. 1 hadoop hadoop 1048583 5月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r--. 1 hadoop hadoop 63439959 5月 23 16:01 blk_1073741837
-rw-rw-r--. 1 hadoop hadoop 495635 5月 23 16:01 blk_1073741837_1013.meta
[hadoop@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file
[hadoop@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file
[hadoop@hadoop102 subdir0]$ tar -zxvf tmp.file
(4)下載
[hadoop@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get /user/hadoop/input/hadoop-2.7.2.tar.gz
3)性能測試集群
寫海量數據
讀海量數據
7、集群時間同步
時間同步的方式:找一個機器,作為時間服務器,所有的機器與這臺集群時間進行定時的同步,比如,每日十分鐘,同步一次時間。
配置時間同步:
1)時間服務器配置
(1)檢查ntp是否安裝
[root@hadoop102 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
(2)修改ntp配置文件
vi /etc/ntp.conf
修改內容如下
a)修改1
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap為
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b)修改2
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst為
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
c)添加3
server 127.127.1.0
fudge 127.127.1.0 stratum 10
3)修改/etc/sysconfig/ntpd 文件
vim /etc/sysconfig/ntpd
增加內容如下
SYNC_HWCLOCK=yes
4)重新啟動ntpd
[root@hadoop102 桌面]# service ntpd status
ntpd 已停
[root@hadoop102 桌面]# service ntpd start
正在啟動 ntpd: [確定]
5)執行:
chkconfig ntpd on
2)其他機器配置(必須root用戶)
(1)在其他機器配置10分鐘與時間服務器同步一次
[root@hadoop103 hadoop-2.7.2]# crontab -e
編寫腳本
*/10 * * * * /usr/sbin/ntpdate hadoop102
(2)修改任意機器時間
date -s "2019-2-26"
(3)十分鐘後查看機器是否與時間服務器同步
date
Hadoop 完全分布式部署