初識Hadoop的三種安裝模式
特點:高可靠性(不怕丟)、高效性(處理速度快)、高容錯性
- ps:使用Hadoop版本:
接下來所用到的Hadoop2.8.5,雖然目前Hadoop已經更新到3.x了;但是我們始終秉持一個觀點“用舊不用新”,因為畢竟舊版本較為穩定(目前雖然jdk出到版本為16了,但是我們還是會使用jdk8和jdk11),包括后期使用的各項Hive、Hbase等都需要與hadoop版本相對應,很難去找此類資源;當然如果到公司以后,公司也會給你提供好相應版本的,直接用就可以。
Hadoop
HDFS:分布式文件系統---需要安裝
MapReduce:分布式離線計算框架----不需要安裝----邏輯概念-----需要編碼實現
Yarn:分布式資源調度系統----需要安裝
安裝方式:
- 本地模式
- 偽分布式模式---一台電腦
- 完全分布式
1.本地模式配置
(本模式下:hdfs和yarn組件無法使用,只能使用mapreduce-----一般只用來測試mapreduce)
一般會將目錄設置為(/opt目錄一般存放第三方軟件)---app下放安裝的軟件,software下放第三方軟件的壓縮包
- 解壓hadoop壓縮包至/opt/app目錄下
-
vim /etc/profile來更改系統環境變量(配置Hadoop的環境變量:目的是為了能夠在任何目錄下都能使用hadoop命令)
export HADOOP_HOME=/opt/app/hadoop-2.8.5 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-
source /etc/profile hadoop version
2.偽分布式模式
(本模式下:hadoop的組件hdfs和yarn都在一台機器上,需要去修改配置文件)
前言:一個巨大的文件需要進行存儲,單台計算機肯定是不能存儲這個文件的,因此我們可以將這個文件切割成幾個部分,分別放到不同計算機上。但是這時出現了一個問題:三台機器上存儲的文件互相沒有聯系,大文件怎么能下載呢? 此時可以在每個電腦上安裝HDFS進行 “關系定義”,接下來討論下這個關鍵性技術HDFS
主從模式--分布式軟件:一個主節點,多個從節點
-
熟悉概念
-
HDFS{
NameNode:存儲元數據{領導,知道數據放到哪里}
DataNode:存儲數據(員工)
SecondaryNameNode:(秘書)
}
-
Yarn{
ResourceManager (相當於NameNode:領導) NodeManager (相當於DataNode:員工)
}
-
-
配置項
(.sh文件進行與java相連的jdk配置:配置JAVA_HOME=/opt/app/jdk1.8)
(.xml文件進行相應配置:core(common公共的)、hdfs、mapred、yarn)
1.core-site.xml
<!--指定HDFS中namenode的地址 必須放到core-site中,不能放在hdfs-site.xml中,否則無法使用hdfs-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.0.20:9000</value>
</property>
<!--指定Hadoop運行時產生臨時文件的存儲目錄-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/app/hadoop-2.8.5/temp</value>
</property>
2.hdfs-site.xml
<!--指定HDFS中副本的數量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
3.mapred-site.xml
<!--通過yarn去運行-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4.yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定Yarn的ResourceManager地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.0.20</value>
</property>
-
格式化NameNode
(相當於創建core-site.xml中聲明的temp目錄)
{只能格式化1次,如果非要格式化的話,那么可以將產生的temp文件刪除}
hadoop namenode -format
-
開啟hdfs服務和yarn服務
start-dfs.sh start-yarn.sh
-
訪問驗證
namenode訪問網址{http://ip:50070} yarn的訪問網址{http://ip:8088}
-
補充
通過此種方式,你會發現在啟動各個節點時需要反復輸入密碼,不想要這樣的話,就尋找解決方式:
配置SSH免密鑰登錄
1.生成密鑰
cd ~/.ssh ssh-keygen -t rsa
2.把密碼給別人
ssh-copy-id 192.168.0.20
3.完全分布式
(最少有3台節點組成的集群)----一般在生產部署時使用
1.需要准備3台虛擬機:通過克隆(創建完整克隆)方式創建
2.配置3台虛擬機的靜態網絡
192.168.0.20 、192.168.0.21、192.168.0.22
3.配置3台虛擬機的免密登錄
---過程與偽分布式中所談到的免密登錄一致
(成功界面)
4.同步時間
-
安裝ntp
yum install -y ntp vim /etc/ntp.conf
此處第一個圓圈內,我的網段應該為192.168.0.0
(以上兩張圖片為需要在ntp.conf中修改和添加的)
-
修改/etc/sysconfig/ntpd
添加代碼 SYNC_HWCLOCK=yes
-
添加成開機啟動
systemctl enable ntpd
然后在node2和node3上配置定時任務
crontab -e
*/1 * * * * /usr/sbin/ntpdate 192.168.0.20
每隔1分鍾,同步node1主服務器上的時間
5.正式開始集群配置
core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/app/hadoop/temp</value>
</property>
hdfs-site.xml
<configuration>
<!--在3台機器上各備份一份-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--secondary namenode地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node3:50090</value>
</property>
<!--hdfs取消用戶權限校驗-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!--如果為true(默認值),則namenode要求必須將連接datanode的地址解析為主機名
如果datanode配置的是主機名 那么此項可以不用填寫 默認值為true 但是必須對主機名在/etc/hosts文件中配置主機映射
如果datanode配置的是IP 那么需要將這個值改為false 否則IP會當作主機名進行主機ip校驗
注意:默認情況下配置hadoop使用的是host+hostName的配置方式 datanode需要配置為主機名
-->
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>true</value>
</property>
</configuration>
slaves
vim /opt/app/hadoop/etc/hadoop/slaves
node1
node2
node3
yarn-site.xml
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定Yarn的ResourceManager地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node2</value>
</property>
mapred-site.xml
<configuration>
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>
在node1上更改玩hadoop配置文件后,開始進行分發
scp -r /opt/app/hadoop-2.8.5 root@node2:/opt/app
scp -r /opt/app/hadoop-2.8.5 root@node3:/opt/app
記得分發完每個都記得格式化哦!(或者先格式化再分發到node2和node3節點上)
其它細節的基本項的配置在偽分布式中已經很詳細了,在此就不多說了,大膽嘗試、不斷試錯才能提升!
成功后查看namenode成功界面,可以看到開啟了3個datanode節點