圖片沒上傳 湊活看
- 在HDFS中有兩種節點,分別是NameNode和DataNode。NameNode負責集羣中與存儲相關的調度,DataNode負責具體的存儲任務。
(1) 具體來說NameNode維護了整個文件系統的元數據信息,這些信息以兩種形式的文件存儲,一種是鏡像文件(image文件),另一種是編輯日誌(edit log)。NameNode會在文件系統啓動時,動態地加載這些文件到內存中以響應客戶端的讀寫請求。
(2) DataNode用來執行具體的存儲任務:存儲文件塊。另外它也會定時的通過心跳向NameNode報告自己的狀態(包括存儲的文件塊的信息)。 - ResourceManager 即資源管理,在YARN中,ResourceManager負責集羣中所有資源的統一管理和分配,它接收來自各個節點(NodeManager)的資源彙報信息,並把這些信息按照一定的策略分配給各個應用程序(實際上是ApplicationManager)。
RM包括Scheduler(定時調度器)和ApplicationManager(應用管理器)。Schedular負責嚮應用程序分配資源,它不做監控以及應用程序的狀態跟蹤,並且不保證會重啓應用程序本身或者硬件出錯而執行失敗的應用程序。ApplicationManager負責接受新的任務,協調並提供在ApplicationMaster容器失敗時的重啓功能。
NodeManager是ResourceManager在每臺機器上的代理,負責容器管理,並監控它們的資源使用情況,以及向ResourceManager/Scheduler提供資源使用報告
兩個NameNode爲了數據同步,會通過一組稱作JournalNodes的獨立進程進行相互通信。
kafka將zookeeper做小型數據庫
hbase通過zookeeper選舉master,也就是說zookeeper提高了hbase集羣的穩定性
zkfc是一個ZooKeeper客戶端,它還監視和管理NameNode的狀態。運行NameNode的每臺機器也運行ZKFC,他們之間是一對一的關係。
ZKFC負責:
•
健康監測-
ZKFC定期使用健康檢查命令調用其本地NameNode。只要NameNode以健康的狀態及時響應,ZKFC就會認爲節點是健康的。
如果節點已崩潰、凍結或以其他方式進入不健康狀態,則健康監視器將將其標記爲不健康。
•
•
ZooKeeper會話管理
當本地NameNode健康時,ZKFC在ZooKeeper中舉行一個開放的會話。
如果本地NameNode是活動的,它也持有一個特殊的“鎖”。此鎖使用ZooKeeptor對“臨時”節點的支持;如果會話過期,則將自動刪除鎖節點。
•
基於ZooKeeper的選舉
如果本地NameNode是健康的,而ZKFC認爲目前沒有其他節點持有鎖,
它本身就會嘗試獲取鎖。如果它成功了,那麼它已經“贏得了選舉”,並負責運行故障轉移以使其本地NameNode活動。故障轉移過程類似於上面描述的手動故障轉移:首先,如果需要,對前一個活動進行隔離,然後本地NameNode轉換到活動狀態。
-
裝centos32
-
修改vbox虛擬機網絡 爲host-only
-
在/etc/sudoers文件中複製root ALL一行 修改root爲用戶名
-
修改hostname
在/etc/sysconfig/network中 HOSTNAME=修改的主機名 -
/etc/hosts增加(ip hostname)
-
安裝ssh 命令yum imstall openssh-server
-
免密登
簡單方法 -
Ssh-keygen -t rsa 生成密鑰文件 一路回車即可
-
Sshcopy-id 目標主機名
麻煩方法 -
Ssh-keygen -t rsa 生成密鑰文件 一路回車即可
-
Cd .ssh 複製id_rsa.pub 到目標主機
-
登陸目標主機
-
Cd ~/.ssh
-
Touch authorized_keys
-
Chmod 600 authorized_keys
-
追加源主機的公鑰到目標機的authorized_keys
-
cat ~/id_rsa.pub >> authorized_keys
-
完成源主機免密登陸目標機
-
關防火牆servic
-
禁止防火牆自啓 chkconfig iptables off
-
安裝jdk 修改/etc/profile環境變量(路徑根據需要自己調整,沒有目錄自己建)
#set java environment
JAVA_HOME=/usr/java/jdk1.7.0_80/us
JRE_HOME=/usr/java/jdk1.7.0_80/jre
CLASS_PATH=.:JAVA_HOME/lib/tools.jar:PATH:JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH -
source /etc/profile
-
解壓hadoop
-
修改hadoop-env.sh中export JAVA_HOME=/usr/java/jdk1.7.0_80
-
修改core-site.xml
fs.defaultFS
hdfs://sc1:9000/
11.修改hdfs-site.xml
dfs.replication
1
12.修改mapred
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
- yarn框架修改
1.3. 指定哪些機器啓動datanode
1.3.1. Vi /home/sc/app/hadoop-2.4.1/etc/hadoop/slaves (localhost不該爲hostname也可以)
1.3.2. 修改localhost 爲hostname 依次添加新的hostname
1.4. 啓動yarn
1.4.1. start-yarn.sh
1.4.2. 查看啓動進程
1.4.3. jps
1.4.4. 10378 Jps
1.4.5. 9803 SecondaryNameNode
1.4.6. 9652 DataNode
1.4.7. 9994 ResourceManager
1.4.8. 10281 NodeManager
1.4.9. 9536 NameNode
1.5. 測試
1.5.1. 修改宿主機hosts文件 增加被測試機器ip 主機名
1.5.1.1. 瀏覽器登錄 http://hostname:50070/
1.5.1.2.
1.5.1.3. 上傳測試
1.5.1.4. hadoop fs -put 測試文件 hdfs://sc1:9000/
1.5.1.5.
1.5.1.6. Linux 取文件
1.5.1.7. hadoop fs -get hdfs://sc1:9000/測試文件 ./
1.5.1.8. Jar測試
1.5.1.9. Cd app/hadoop-2.4.1/share/hadoop/mapreduce/
1.5.1.10. hadoop jar hadoop-mapreduce-examples-2.4.1.jar pi 5 5
1.6. Zookeeper 提供分佈式鎖服務,協調分佈式應用 ,也是一種小集羣: 提供對數據節點的監聽器 提供少量數據的存儲和管理 如 配置信息
1.7. 分佈式應用需要一個主控、協調器、來管理物理分佈的子進程(資源 任務分配)
1.8. Zookeeper 角色通過啓動時選舉決定:
1.8.1. Leader :主節點 負責寫操作,通知其他follwer,超過一半節點更新數據成功則認爲更新成
1.9 zookeeper安裝
解壓縮安裝包
Mkdir /home/sc/app/zookeeper-3.4.5/data
Cd /home/sc/app/zookeeper-3.4.5/conf
mv zoo_sample.cfg zoo.cfg
Vi zoo.cfg
修改dataDir=/home/sc/app/zookeeper-3.4.5/data
最後添加(指定集羣中機器 2888 3888 爲選舉端口):
server.1=sc1:2888:3888
server.2=sc2:2888:3888
server.3=sc3:2888:3888
Cd /home/sc/app/zookeeper-3.4.5/data
echo 1 > myid (1代表在zoo.cfg中主機編號即server.1中的1,每臺機器寫相應的編號)
Scp -r zookeeper-3.4.5 其他主機/app/
修改data/myid
啓動zookeeper(分別啓動)
在/home/sc/app/zookeeper-3.4.5/bin下
./zkServer.sh start
Zkfc管理namenode的狀態,依賴於zookeeper
Zkfc防止腦裂(即active節點出現假死)
Standby進程發現active進程死了,不會立馬切換,而是ssh殺死active進程
返回成功 則狀態切換
超時 則執行自定義腳本 以上稱之爲fencing機制
集羣安裝
前提:
-
有一對namenode 在配置文件中指明其名字,指明namenode是哪兩個及其對應的主機
-
指明journalnode,(edits存放)
-
指明zookeeper集羣
-
指明zkfc的防腦裂方式(兩種都用或只用一個 ssh無密碼登陸)
-
在/etc/sudoers文件中複製root ALL一行 修改root爲用戶名
-
修改hostname
(1) 在/etc/sysconfig/network中 HOSTNAME=修改的主機名 -
/etc/hosts增加(其他機器ip hostname)
-
安裝ssh 命令yum imstall openssh-server
-
免密登
(1) 簡單方法
① Ssh-keygen -t rsa 生成密鑰文件 一路回車即可
② Sshcopy-id 目標主機名
(2) 麻煩方法
① Ssh-keygen -t rsa 生成密鑰文件 一路回車即可
② Cd .ssh 複製id_rsa.pub 到目標主機
③ 登陸目標主機
④ Cd ~/.ssh
⑤ Touch authorized_keys
⑥ Chmod 600 authorized_keys
⑦ 追加源主機的公鑰到目標機的authorized_keys
⑧ cat ~/id_rsa.pub >> authorized_keys
⑨ 完成源主機免密登陸目標機 -
關防火牆service iptables stop
-
禁止防火牆自啓 chkconfig iptables off
-
修改/etc/profile的配置
#set java environment
JAVA_HOME=/usr/java/jdk1.7.0_80
JRE_HOME=/usr/java/jdk1.7.0_80/jre
CLASS_PATH=.:JAVA_HOME/lib/tools.jar:PATH:JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH -
修改namenode配置:
-
修改hadoop-env.sh中javahome 爲絕對路徑export JAVA_HOME=/usr/java/jdk1.7.0_80
-
修改core-site.xml
(1)
(2)
(3) fs.defaultFS
(4) hdfs://ns1/
(5)
(6)
(7) hadoop.tmp.dir
(8) /home/sc/app/hadoop-2.4.1/data/
(9)
(10)
(11)
(12) ha.zookeeper.quorum
(13) sc1:2181,sc2:2181,sc3:2181
(14)
(15) -
修改完創建/home/sc/app/hadoop-2.4.1/tmp/
-
hdfs-site.xml
將hadoop 複製到其他主機
Zookeeper 參照單機配置
- 啓動zookeeper(分別在需要啓動zookeeper主機啓動)
① Cd zookeeper/bin/
② ./zkServer.sh start
③ Jps查看有QuorumPeerMain
---------------第一次安裝需要做---------------- - 啓動journalnode (分別啓動 第一次必須手動啓動 以後會包含在start 腳本中 )
① Cd /home/sc/app/hadoop-2.4.1/sbin
② hadoop-daemon.sh start journalnode
③ Jps查看JournalNode - 格式化HDFS
① 在Node1上執行命令:
② hdfs namenode -format
③ 將node1的TMP拷貝到sc2 sc3中 爲了保持數據一致
④ scp -r TMP/ sc2:/home/sc/app/hadoop-2.4.1 - 格式化ZKFC(sc1上執行)
① ZKFC 用來做兩個namenode的狀態切換管理的
② hdfs zkfc -formatZK
- 啓動HDFS(sc1上執行)
① /home/sc/app/hadoop-2.4.1/sbin 目錄下
② ./start-dfs.sh
③ Jps查看有datanode namenode DFSZKFailoverController - 啓動yarn (在sc3上啓動)
① /home/c/app/hadoop-2.4.1/sbin 目錄下
② ./start-yarn.sh
③ Jps查看有NodeManager ResourceManager - 在另一個yarn主機啓動
① ./yarn-daemon.sh start resourcemanager
② Jps查看同上
Hostname Node1 Node2 Node3 Node4
namenode ✓完成 ✓完成
datanode ✓完 ✓完 ✓完 ✓完
resourcemanager ✓完 ✓
zookeeper ✓完 ✓完 ✓完
journalnode ✓完 ✓完 ✓完
zkfc ✓完 ✓完
Hbse安裝
修改hbase-env.sh
export JAVA_HOME =/usr/java/jdk1.7.0_80
export HBASE_MANAGES_ZK=false
修改hbase-site.xml
hbase.rootdir
hdfs://ns1/hbase/
hbase.cluster.distributed
true
hbase.zookeeper.quorum
node1:2181,node2:2181,node3:2181
修改regionservers
添加其他主機名
Scp到其他主機
Bin/start-hbase.sh
其他主機 : ./hbase-daemon.sh start master
Eclipse寫hbase相關 需要添加hdfs及hbase的配置文件*-site.xml
Kafka 安裝
使用公共的zookeeper
集羣安裝
- 修改config/server.properties
① broker.id=3 //序號每個機器不同
② zookeeper.connect=sc1:2181,sc2:2181,sc3:2181 - 啓動kafka
① 每臺機器kafa目錄下啓動 查看bin權限
② bin/kafka-server-start.sh config/server.properties & 後臺啓動
③ 啓動完成標記 INFO [Kafka Server 1], started (kafka.server.KafkaServer)
④ Jps 查看 有kafka
⑤ 創建話題 最後一個單詞爲話題名稱
⑥ bin/kafka-topics.sh --create --zookeeper sc1:2181 --replication-factor 3 --partitions 1 --topic mygirls
⑦ 查看創建的話題
⑧ bin/kafka-topics.sh --list --zookeeper sc1:2181
⑨ 啓動生產者
⑩ bin/kafka-console-producer.sh --broker-list sc1:9092 --topic sc
11 消費者
12 bin/kafka-console-consumer.sh --zookeeper sc1:2181 --from-beginning --topic sc
執行hadoop shell
Bin目錄下
./hadoop fs -ls /