Hadoop叢集搭建
- 前言
- 搭建
-
- 域名設定
- 伺服器免密登入
- 下載下傳
- 配置
-
- 建立hdfs
- 修改XML檔案
-
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
- hadoop-env.sh
- slaves
- 發送
- 啟動
-
- 格式化
- 拓展
- 啟動叢集
前言
hadoop叢集搭建一般都采用3條伺服器來演練,為什麼是3呢?之前以為跟redis類似,由主從投票政策決定,後來想了想應該不是,因為主節點是nameNode節點,而從節點是dataNode節點,你的從節點在此時更新為master也沒用吧。。。
後邊找到一些資料說是跟hadoop的副本政策有關系,預設為3。是以,伺服器數量小于3,意味着一台機器至少存有2個副本,大于3對于目的隻是模拟測試來說、又有點浪費。。
搭建
hadoop不同版本似乎有些差别,下面是搭建的基本環境:
官網下載下傳連結
- 本文采用Hadoop 2.10.0版本
- CentOS Linux release 7.6.1810 (Core)
- 3台伺服器(一台master、兩台salve)
- 已安裝JDK1.8
hadoop version
域名設定
為了友善檔案傳輸總得标記一個ip,采用域名可以減少這種麻煩。
在3台機器的hosts檔案輸入如下内容:
192.168.0.28 master
192.168.0.14 node2
192.168.0.23 node1
在master機器的hostname檔案中輸入如下内容,slave節點的機器的hostname檔案則分别輸入node1、node2
master
注意,如果域名設定好了之後,後邊想更改機器時,比如把ndoe2配置設定給其他機器,此時可能因為DNS緩存設定不成功。
service nscd restart
伺服器免密登入
master連接配接slave節點時如果需要密碼,可能連接配接會失敗,是以需要設定下免密登入:
安裝openssh-server服務
yum install openssh-server
master伺服器輸入以下指令一直回車,生成公鑰和私鑰:
ssh-keygen -t rsa
在master上将公鑰放入authorized_keys(linux 作業系統下,專門用來存放公鑰的地方,隻要公鑰放到了伺服器的正确位置,并且擁有正确的權限,你才可以通過你的私鑰,免密登入linux伺服器),指令如下
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
發送公鑰到node1、node2節點上,然後在master主機上試試
ssh node1
或者
ssh node2
能不能成功。一開始可能還會提示輸入一遍密碼,後邊就不用了
scp ~/.ssh/authorized_keys [email protected]:~/.ssh/
scp ~/.ssh/authorized_keys [email protected]:~/.ssh
下載下傳
最好将下載下傳的包移動到一個差別其他目錄的目錄。
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
解壓
tar zxvf hadoop-2.10.0.tar.gz
添加hadoop檔案路徑到配置檔案中:
export PATH=$PATH:/hadoop/hadoop-2.10.0/bin:/hadoop/hadoop-2.10.0/sbin
source /etc/profile
配置
建立hdfs
建立我們的HDFS(hadoop file system)檔案系統。資料存儲于該位置。
進入hdfs檔案,分别建立如下目錄:
name 存儲namenode檔案
data 存儲資料
tmp 存儲臨時檔案
修改XML檔案
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
- hadoop-env.sh
- slaves
上述檔案都在hadoop的
etc/hadoop/
目錄中:(圖中漏了一個slaves的标記)
core-site.xml
注意,name屬性不是想設定啥就設定啥的,它們是經過專業訓練的,一開始傻傻的設定了一套,結果啟動一直不行,重新改了回來,後來想想就覺得搞笑,如果可以随便設定的話,那hadoop啟動掃描時豈不是得有很多繁瑣的判斷。
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:8000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.10.0/hdfs/tmp</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>hdfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/hadoop/hadoop-2.10.0/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/hadoop/hadoop-2.10.0/hdfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-service</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
hadoop-env.sh
這個檔案主要配置了JDK的路徑,注意!待會會将hadoop所有檔案發送到從節點上,如果從節點的jdk路徑跟master節點不一樣,記得修改!!!
slaves
主要配置從節點的主機名,也就是node1和node2:
發送
将hadoop整個目錄發送至node1和node2節點上:
scp -r hadoop-2.10.0 [email protected]:/hadoop/
scp -r hadoop-2.10.0 [email protected]:/hadoop/
啟動
格式化
master運作如下指令,格式化後,name目錄會多出current目錄。
hadoop namenode -format
拓展
Current:裡面包含edits、fsimage、seen_txid、VERSION檔案。
- edits 日志檔案:用戶端執行寫操作會先寫入edits日志,并且在記憶體中保留。
- fsimage檔案:nameNode的鏡像檔案,每次checkpoing(合并所有edits到一個fsimage的過程)産生的最終的fsimage,同時會生成一個.md5的檔案用來對檔案做完整性校驗。
- Seen_txid :非常重要,代表namenode的edits*檔案尾數,namenode重新開機時會循序從頭跑 edits_0000001~到 seen_txid 的數字。但format格式化之後會是0。
- Version :記錄了叢集的資訊,如上圖所示,它的資訊有namespaceID/clusterID/blockpoolID。
在叢集中,會有多個 NameNode 獨立工作,每個NameNode 提供唯一的命名空(namespaceID),并管理一組唯一的檔案塊池(blockpoolID)。
cTime 存儲系統建立時間,首次格式化檔案系統為 0,當檔案系統更新之後,該值會更新到更新之後的時間戳。
啟動叢集
start-all.sh
master啟動上述指令,輸入JPS檢視master程序
node節點輸入jps檢視程序
輸入master網址,預設端口50070 http://192.168.0. 28:50070/