確保5臺linux系統節點已準備
|主機名| 內存|cpu
|nna|2G|2核
|nns|2G|2核
|dn1|1G|1核
|dn2|1G|1核
dn3|1G|1核
1、給系統設置靜態IP,可以參照我之前的hadoop 集羣部署中靜態ip設置
https://mp.csdn.net/mdeditor/84073712#
2、所有linux系統配置hosts系統文件。添加ip映射,
vi /etc/hosts
3、創建hadoop 賬號,用來專門管理集羣環境
useradd hadoop
passwd hadoop
//創建後再sudoers文件添加hadoop
3.1 添加 sudoers 寫權限
chmod +w /etc/sudoers
3.2 vi在末尾添加:hadoop ALL=(root)NOPASSWD:ALL
3.3 關閉寫權限
chmod -w /etc/sudoers
4.SSH 免密登錄
4.1 在nna 節點下 生成該節點的私鑰和公鑰
ssh-keygen -t rsa
4.2 認證授權,將id-rsa.pub 文件內容追加到authorized_keys 文件中,如果在、~/.ssh 目錄下沒有authorized_keys 文件,自己手動添加即可。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/suthorized_keys
4.3 文件授權,賦予600權限
chmod 600 ~/.ssh/authorized_keys
4.4 其他節點通過使用hadoop 賬號授權,然後將各個節點的id_rsa.pub 追加到nna 節點的authorized_keys 中
,生成公鑰後,使用 ssh-copy-id nna,即可
4.5 在完成所有節點公鑰追加之後,將nna節點下的authorized_keys 文件通過scp,分發到其他節點的hadoop ~/.ssh 目錄下。
5 、關閉防火牆
所有linux系統都執行下面語句關閉防火牆,當然我的是centos7,不同版本關閉防火牆命令不同,自行百度。
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啓動**
6修改時區。確保hadoop集羣各個節點時間同步。
能與當前網絡的時間有誤差。下面介紹一下與時間服務器上的時間同步的方法
- 安裝ntpdate工具
yum -y install ntp ntpdate
(如果安裝不了,請在/etc/sysconfig/network_scripts 下面的ifcfg-ens33, 添加域名)
- 設置系統時間與網絡時間同步
ntpdate cn.pool.ntp.org - 將系統時間寫入硬件時間
hwclock --systohc
7,zookeeper 部署
zookeeper 3.4.10 下載地址
http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.10/
7.1 解壓,
tar -zxvf zookeeper-3.4.10.tar.gz
//重命名
mv zookeeper-3.4.10 zookeeper
![//](https://img-blog.csdnimg.cn/20181120160846904.png
//在 zookeeper目錄下創建狀態數據存儲文件夾data
mkdir data
7.2配置zoo.cfg 文件
在data 文件下面創建myid 文件,在該文件下入一個0-255之間的整數,每個節點這個數字都是唯一的,本書的這些數字從1開始。
比如server.1=dn1:2888:3888,那麼在節點dn1,就應該填數字1.
然後scp同步dn1節點上的zookeeper文件到其他節點
7.3 安裝jdk ,可以參照下面文章中的jdk 環境變量配置
https://mp.csdn.net/mdeditor/84073712#
7.4 配置zookeeper 環境變量:dn1,dn2,dn3 節點都需要
在 /etc/profile 下添加
export ZK_HOME=/home/hadoop/zookeeper
export PATH=$ PATH:$ZK_HOME/bin
7.5 驗證 ,在dn1,dn2,dn3終端輸入jps命令:如下圖,有了QuorumPeerMian
8、部署安裝hadoop
下載hadoop 安裝包,並解壓到/home/hadoop 目錄下
,配置環境變量:
export HADOOP_HOME=/home/hadoop/hadoop-2.7.7
exprot PATH=HADOOP_HOME
8.2 配置 core-site.xml
<configuration>
<!--指定分佈式系統文件存儲的nameservice 爲cluster1-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<!-- 指定hadoop臨時目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.7.7/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>dn1:2181,dn2:2181,dn3:2181</value>
</property>
<!-- 所有賬戶都可以訪問 -->
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<!-- 所有IP都可以訪問 -->
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
</configuration>
配置 yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- RM(Resource Manager)失聯後重新鏈接的時間 -->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>2000</value>
</property>
<!-- 開啓Resource Manager HA,默認爲false -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 配置Resource Manager -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>dn1:2181,dn2:2181,dn3:2181</value>
</property>
<!-- 開啓故障自動切換 -->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- rm1配置開始 -->
<!-- 配置Resource Manager主機別名rm1角色爲NameNode Active-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>nna</value>
</property>
<!-- 配置Resource Manager主機別名rm1角色爲NameNode Standby-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>nns</value>
</property>
<!-- 在nna上配置rm1,在nns上配置rm2,將配置好的文件遠程複製到其它機器上,但在yarn的另一個機器上一定要修改-->
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm1</value>
</property>
<!-- 開啓自動恢復功能 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 配置與zookeeper的連接地址 -->
<property>
<name>yarn.resourcemanager.zk-state-store.address</name>
<value>dn1:2181,dn2:2181,dn3:2181</value>
</property>
<!--用於持久化RM(Resource Manager簡稱)狀態存儲,基於Zookeeper實現 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!-- Zookeeper地址用於RM(Resource Manager)實現狀態存儲,以及HA的設置-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>dn1:2181,dn2:2181,dn3:2181</value>
</property>
<!-- 集羣ID標識 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1-yarn</value>
</property>
<!-- schelduler失聯等待連接時間 -->
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value>5000</value>
</property>
<!-- 配置rm1,其應用訪問管理接口 -->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>nna:8132</value>
</property>
<!-- 調度接口地址 -->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>nna:8130</value>
</property>
<!-- RM的Web訪問地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>nna:8188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>nna:8131</value>
</property>
<!-- RM管理員接口地址 -->
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>nna:8033</value>
</property>
<property>
<name>yarn.resourcemanager.ha.admin.address.rm1</name>
<value>nna:23142</value>
</property>
<!-- rm1配置結束 -->
<!-- rm2配置開始 -->
<!-- 配置rm2,與rm1配置一致,只是將nna節點名稱換成nns節點名稱 -->
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>nns:8132</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>nns:8130</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>nns:8188</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>nns:8131</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>nns:8033</value>
</property>
<property>
<name>yarn.resourcemanager.ha.admin.address.rm2</name>
<value>nns:23142</value>
</property>
<!-- rm2配置結束 -->
<!-- NM(NodeManager得簡稱)的附屬服務,需要設置成mapreduce_shuffle才能運行MapReduce任務 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 配置shuffle處理類 -->
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- NM(NodeManager得簡稱)本地文件路徑 -->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/hadoop-2.7.7/yarn/local</value>
</property>
<!-- NM(NodeManager得簡稱)日誌存放路徑 -->
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/home/hadoop/hadoop-2.7.7/yarn/log</value>
</property>
<!-- ShuffleHandler運行服務端口,用於Map結果輸出到請求Reducer -->
<property>
<name>mapreduce.shuffle.port</name>
<value>23080</value>
</property>
<!-- 故障處理類 -->
<property>
<name>yarn.client.failover-proxy-provider</name>
<value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
</property>
<!-- 故障自動轉移的zookeeper路徑地址 -->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
<value>/yarn-leader-election</value>
</property>
<property>
<name>mapreduce.jobtracker.address</name>
<value>http://nna:9001</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir-suffix</name>
<value>logs</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>259200</value>
</property>
<property>
<name>yarn.log-aggregation.retain-check-interval-seconds</name>
<value>3600</value>
</property>
<property>
<name>yarn.web-proxy.address</name>
<value>nna:8090</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/data/soft/new/hadoop/etc/hadoop/fair-scheduler.xml</value>
</property>
-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4.2</value>
</property>
</configuration>
配置mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定mr框架爲yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
</configuration>
配置hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice爲...,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nna,nns</value>
</property>
<!-- nna的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nna</name>
<value>nna:9000</value>
</property>
<!-- nna的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nna</name>
<value>nna:50070</value>
</property>
<!-- nns的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.cluster1.nns</name>
<value>nns:9000</value>
</property>
<!-- nns的http通信地址 -->
<property>
<name>dfs.namenode.http-address.cluster1.nns</name>
<value>hostbb:50070</value>
</property>
<!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://dn1:8485;dn2:8485;dn3:8485/cluster1</value>
</property>
<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop-2.7.7/journaldata</value>
</property>
<!-- 開啓NameNode失敗自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失敗自動切換實現方式 -->
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔離機制方法-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用sshfence隔離機制時需要ssh免登陸 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔離機制超時時間 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- 指定元數據冗餘分數 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定datanode 數據存儲地址 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoop-2.7.7/nodedata</value>
</property>
<!-- 指定web 訪問hdfs目錄 -->
<property>
<name>dfs.webhdfs.enable</name>
<value>true</value>
</property>
<!-- 實現自動故障切換 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>dn1:2181,dn2:2181,dn3:2181</value>
</property>
</configuration>
8.3 啓動journalnode
8.3.1 在任意一臺namdnode節點上啓動Journalnode
sbin/hadoop-daemon.sh start journalnode
8.3.2 輸入jps
查看終端是否 顯示對應線程(journalNode)
8.4,啓動hadoop
初次啓動集羣時,需要格式化namenode節點,
bin/hdfs namenode -format
8.5 向zookeeper 註冊
bin/hdfs zkfc -formatZK
8.6啓動集羣
bin/hdfs start-all.sh
hadoop訪問地址:
http://nna:50070
http://nna:8188
我的是在windows 系統下訪問,記得修改win的hosts 地址映射,
加上