ljwha
準備
虛擬機準備
1. 概念:集羣是真實環境的多臺機器,共同配合完成一個分佈式文件系統的構建
2. 環境:centos6.5,hadoop2.7.6,jdk1.8+
3. 準備工作:
1. linux,jdk,hadoop-2.7.6, 全程必須使用普通用戶hadoop.
2. 免密登陸
3. 時間同步
4. 防火牆設置開機不啓動:chkconfig iptables off---設置開機不啓動
service iptables stop ----關閉當前運行中的防火牆
5. /etc/hosts映射關係。hostname必須要確定
6. jdk和hadoop的環境變量的配置: ~/.bash_profile
7.最好在/etc/sudoers下面將hadoop加上,不然使用hadoop用戶後面很麻煩
- jdk1.8,配的全局
- 用戶hadoop
- 配置完成ssh
- /opt/apps是解壓完成軟件的路徑
- /opt/software是包文件夾
規劃
- 此處的slave1是一個namenode,我沒有改映射和主機名所以就這樣用了
username | host | 進程 |
---|---|---|
master | 192.168.111.200 | namenode |
slave1 | 192.168.111.201 | namenode |
slave2 | 192.168.111.202 | datanonde |
slave3 | 192.168.111.203 | datanonde |
slave4 | 192.168.111.204 | datanonde |
解壓
-
解壓zookeeper
-
tar -zxvf
-
重要:權限
-
普通用戶所有權限
sudo chmod -R a+w /opt/apps/hadoop-2.7.6/ sudo chown -R hadoop:hadoop /opt/apps/hadoop-2.7.6/
-
-
配置hadoop和zookeeper的環境變量
-
整個:
-
HADOOP_HOME=/opt/apps/hadoop-2.7.6 ZOO_HOME=/opt/apps/zookeeper-3.4.7 PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOO_HOME/bin: export HADOOP_HOME ZOO_HOME PATH
-
source ~/.bash_profile 初始化環境變量
-
-
後面的hadoop也一樣加壓至/opt/apps
zookeeper
-
配置zookeeper-3.4.7/conf/zoo.cfg文件
-
tickTime=2000 initLimit=5 syncLimit=2 dataDir=/opt/apps/zookeeper-3.4.7/tem/zkdata/ clientPort=2181 server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888 server.4=slave3:2888:3888 server.5=slave4:2888:3888
-
在dataDir=/opt/apps/zookeeper-3.4.7/tem/zkdata/下創建myid文件,裏面爲服務的號1,2,3,4,5,根據下面設定的主機名分別修改爲1,2,3,4,5即可
-
zookeeper分發五臺機器,每一臺如果權限不對也需要和全部給到權限
HADOOP
-
解壓完成後用戶權限和組
sudo chown -R hadoop:hadoop hadoop-2.7.6/ sudo chmod -R a+w /opt/apps/hadoop-2.7.6/
-
slaves文件
vi hadoop-2.7.6/etc/hadoop/slaves
- 想讓誰成爲datanode節點就寫上,此處我全部都是datanode
master slave1 slave2 slave3 slave4
-
core-site.xml
vi hadoop-2.7.6/etc/hadoop/core-site.xml
<configuration> <!--指定HDFS的命名空間--> <!-- 默認文件系統的名稱。一個URI的方案和權限決定文件系統的實現。的uri的模式決配置屬性(fs. schema .impl)的命名文件系統實現類。uri的權限用於確定文件系統的主機、端口等--> <property> <name>fs.defaultFS</name> <value>hdfs://ljwha</value> </property> <!--其他臨時目錄的基礎,--> <property> <name>hadoop.tmp.dir</name> <value>/opt/apps/hadoop-2.7.6/hadoopdata/tmp</value> </property> <!--用於序列文件的緩衝區的大小。這個緩衝區的大小應該是硬件的倍數(Intel x86上的4096),它決定有多少數據在讀寫操作期間緩衝。--> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <!--用逗號分隔的ZooKeeper服務器地址列表在自動故障轉移中由 ZKFailoverController使用。--> <!-- 指定zookeeper集羣地址,輔助兩個namenode進行失敗切換 --> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,slave1:2181,slave2:2181,slave3:2181,slave4:2181</value> </property> <property> <name>ipc.client.connect.max.retries</name> <value>100</value> </property> <property> <name>ipc.client.connect.retry.interval</name> <value>10000</value> </property> </configuration>
-
hdfs-site.xml
修改時注意有些地方都需要將我的ljwHA改成自己core文件中的命名空間的,不然永遠都是bug
hadoop-2.7.6/etc/hadoop/hdfs-site.xml
<configuration> <!--配置副本數--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--塊大小--> <property> <name>dfs.block.size</name> <value>134217728</value> </property> <!--下面兩個文件不改默認的配置路徑也沒問題,因爲在core文件中已經配置了hadoop.tmp.dir文件,有了臨時目錄,name和data都存在這個目錄下,但是如果整個路徑都改了不在hadoop文件下的temp這樣,那就需要全部重新制定你的目錄--> <!--HDFS元數據存儲位置--> <property> <name>dfs.namenode.name.dir</name> <value>file:///opt/apps/hadoop-2.7.6/hadoopdata/dfs/name</value> </property> <!--HDFS數據的存儲位置--> <property> <name>dfs.datanode.data.dir</name> <value>file:///opt/apps/hadoop-2.7.6/hadoopdata/dfs/data</value> </property> <!-- 指定hdfs的虛擬服務名 --> <property> <name>dfs.nameservices</name> <value>ljwha</value> </property> <!--指定hdfs的兩虛擬服務名下的namenode名字--> <property> <name>dfs.ha.namenodes.ljwha</name> <value>nn1,nn2</value> </property> <!--指定nameNode的內部通信地址--> <property> <name>dfs.namenode.rpc-address.ljwha.nn1</name> <value>master:8020</value> </property> <!--指定nameNode的內部通信地址--> <property> <name>dfs.namenode.rpc-address.ljwha.nn2</name> <value>slave1:8020</value> </property> <!--NameNode1的web ui通信地址--> <property> <name>dfs.namenode.http-address.ljwha.nn1</name> <value>master:50070</value> </property> <!--NameNode2的web ui 通信地址--> <property> <name>dfs.namenode.http-address.ljwha.nn2</name> <value>slave1:50070</value> </property> <!--指定jouranlnode數據共享目錄--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;slave1:8485;slave2:8485;slave3:8485;slave4:8485/ljwha</value> </property> <!--指定namenode失敗進行自動切換的主類--> <property> <name>dfs.client.failover.proxy.provider.ljwha</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!--防止多個namenode同時active(腦裂)的方式,殺死其中一個--> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!--指定本機的私鑰所在目錄--> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <!-- 指定jouranlnode本地共享目錄--> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/apps/hadoop-2.7.6/hadoopdata/journal/node/local/data</value> </property> <!--開啓hdfs的namenode死亡後自動切換--> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration>
-
yarn-site.xml
<!--指定MapReduce的shuffle--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--是否啓用yarn的ha--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!--yarn的虛擬服務名--> <property> <name>yarn.resourcemanager.cluster-id</name> <value>ljwyarn</value> </property> <!--yarn的虛擬服務名下的具體的rm--> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!--指定rm1所啓動的主機--> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>slave1</value> </property> <!--指定rm1的web ui的通信地址--> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>master:8088</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>slave1:8088</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,slave1:2181,slave2:2181,slave3:2181,slave4:2181</value> </property>
-
map-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> <final>true</final> </property>
-
hadoop-env.sh
此文件加將jdk的路徑改成自己的
分發
-
分發到所有節點
-
scp -r /opt/apps/hadoop-2.7.6/ slave1:/opt/apps/
-
改用戶權限
chowm -R hadoop:hadoop /opt/apps/hadoop-2.7.6/
初始化
- 一定要按照流程
啓動zk
zkServer.sh start
jps查看
2674 Jps
2647 QuorumPeerMain
啓動journalnode服務
hadoop-daemon.sh start journalnode
jps查看
2739 JournalNode
2788 Jps
2647 QuorumPeerMain
挑選兩個namenode之中的一臺來格式化
hdfs namenode -format
然後啓動namenode
hadoop-daemonsh start namenode
在另一臺namenode的機子上拉取元數據
hdfs namenode -bootstrapStandby
格式化zkfc(在namenode節點)
hdfs zkfc -formatZK
-
如果初始化出現問題導致後面namenode節點啓動不了的一系列問題,簡單粗暴,將所有機器的兩個目錄全部幹掉rm -rf /opt/apps/hadoop-2.7.6/logs/ /opt/apps/hadoop-2.7.6/hadoopdata/
-
無任何bug