1、在偽分布式基礎上搭建,偽分布式搭建參見VM上Hadoop3.1偽分布式模式搭建
2、虛擬機准備,本次集群采用2.8.3版本與3.X版本差別不大,端口號所有差別
192.168.44.10 vmhome10.com 192.168.44.11 vmhome11.com 192.168.44.12 vmhome12.com
3、關閉防火牆,因為需要打開的端口太多,測試的環境,為了避免干擾先關閉防火牆
systemctl stop firewalld
4、三台虛機之間打開ssh免密登錄,賬戶hadoop
ssh-keygen -t rsa 生產密鑰 ssh-copy-id 192.168.44.10 發布密鑰
5、配置JAVA_HOME
在${HADOOP_HOME}/etc/hadoop目錄下的三個腳本 hadoop-env.sh yarn-env.sh mapred-env.sh 都需要配置JAVA_HOME變量,全路徑: export JAVA_HOME=/home/java/jdk1.8.0_201
6、三個節點分配職能
vmhome10.com:NameNode,DataNode,NodeManager #NameNode與SecondaryNameNode不能在一個節點上 vmhome11.com:DataNode,ResourceManager,NodeManager #ResourceManager需要單獨一個節點 vmhome12.com:SecondaryNameNode,DataNode,NodeManager #DataNode可以每個節點都放一個
7、集群配置
7.1 core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://vmhome10.com:9000</value> <description>HDFS的URI,文件系統://namenode標識:端口號</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/data-2.8.3/tmp</value> <description>namenode上本地的hadoop臨時文件夾</description> </property> </configuration>
7.2 hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>3</value> <description>副本個數,配置默認是3,應小於datanode機器數量</description> </property> <property> <name>dfs.namenode.name.dir</name> <value>/opt/hadoop/data-2.8.3/dfs/name</value> <description>namenode在本地存儲hdfs名字空間元數據 </description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/hadoop/data-2.8.3/dfs/data</value> <description>datanode上數據塊的物理存儲位置</description> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>vmhome12.com:50090</value> <description>指定Hadoop輔助名稱節點主機配置,注意3.x后端口已經改變</description> </property> </configuration>
7.3 yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>vmhome11.com</value>
<description>yarn的主機,運行resoucemanager</description> </property> </configuration>
7.4 mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
7.5 歷史服務配置
mapred-site.xml
<!-- 歷史服務器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>vmhome12.com:10020</value> </property> <!-- 歷史服務器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>vmhome12.com:19888</value> </property>
7.6 日志聚集
yarn-site.xml
<!-- 日志聚集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留時間設置7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
8、slaves
#集群,群起方式需要配置所有的節點在這個文件 vmhome10.com vmhome11.com vmhome12.com
9、復制配置到其他節點
scp -r hadoop-2.8.3/ hadoop@vmhome11.com:/opt/hadoop/ scp -r hadoop-2.8.3/ hadoop@vmhome12.com:/opt/hadoop/
10、群起集群
在NameNode的主機節點上執行(首次啟動集群前,不要忘記先格式化namenode) start-dfs.sh 在ResourceManager的主機節點上執行 start-yarn.sh 注意:NameNode和ResourceManger如果不是同一台機器,不能在NameNode上啟動 YARN,應該在ResouceManager所在的機器上啟動YARN。
10.2 啟動日志服務
在vmhome12.com節點上啟動服務 mr-jobhistory-daemon.sh start historyserver
11、啟停命令
各個服務組件逐一啟動/停止 (1)分別啟動/停止HDFS組件 hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode (2)啟動/停止YARN yarn-daemon.sh start / stop resourcemanager / nodemanager 各個模塊分開啟動/停止(ssh免密) (1)整體啟動/停止HDFS start-dfs.sh / stop-dfs.sh (2)整體啟動/停止YARN start-yarn.sh / stop-yarn.sh
12、web頁面
用yarn的主機節點看yarn資源分配情況 http://192.168.44.11:8088/ 用Namnode的主機節點看hdfs的情況 http://192.168.44.10:50070/
13、停止強制檢查虛擬內存
在etc/hadoop/yarn-site.xml文件中,修改檢查虛擬內存的屬性為false,如下: <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> 目的是在開發環境用的虛擬機一般虛擬內存都不夠hadoop的缺省配置,解除強制檢查,省得測試程序的時候容器被kill。
14、NameNode的本地目錄可以配置成多個,且每個目錄存放內容相同,增加可靠性,如果配置在NFS上,可作為一份元數據備份。即配置的多個目錄里都有相同的內容(元數據信息)。
在hdfs-site.xml里配置name的多個dir,之間用逗號分隔 <property> <name>dfs.namenode.name.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value> </property>
15、DataNode也可以配置成多個目錄,每個目錄存儲的數據不一樣。即:數據不是副本。
在hdfs-site.xml中: <property> <name>dfs.datanode.data.dir</name> <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value> </property>
16、退役節點
16.1 白名單方式,添加到白名單的主機節點,都允許訪問NameNode,不在白名單的主機節點,都會被退出。
在etc/hadoop/下新增一個dfs.hosts文件,文件名可自己定義,在里面添加datanode節點 vi dfs.hosts vmhome10.com vmhome11.com vmhome12.com
在hdfs-site.xml配置文件里新增: <property> <name>dfs.hosts</name> <value>/opt/hadoop/etc/hadoop/dfs.hosts</value> </property> 然后分發到其他節點
刷新NameNode和ResourceManager hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes
節點退役后,如果數據不均衡,可以用命令實現集群的再平衡數據。 start-balancer.sh
16.2 黑名單方式
在hadoop的etc/hadoop/下新增dfs.hosts.exclude文件 里面配置需要退役的節點: vi dfs.hosts.exclude vmhome9.com
在NameNode的hdfs-site.xml配置文件中增加dfs.hosts.exclude屬性 <property> <name>dfs.hosts.exclude</name> <value>/opt/hadoop/etc/hadoop/dfs.hosts.exclude</value> </property>
刷新NameNode和ResourceManager hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes
在Web瀏覽器,退役節點的狀態為decommission in progress(退役中),說明數據節點正在復制塊到其他節點 等待退役節點狀態為decommissioned(所有塊已經復制完成),停止該節點及節點資源管理器。 注意:如果副本數是3,服役的節點小於等於3,是不能退役成功的,需要修改副本數后才能退役。
注意:不允許白名單和黑名單中同時出現同一個主機名稱