安装前准备
- 关闭防火墙
- 修改主机名
- 配置/etc/hosts文件
- 配置免密登录
- 安装JDK
- 安装zookeeper(集群式安装)
- 解压Hadoop
- selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled
安装步骤
1:进入hadoop安装子目录etc/hadoop/下
2:修改hadoop-env.sh文件。source hadoop-env.sh使其生效
1 2
| export JAVA_HOME=/usr/local/jdk1.8 export HADOOP_CONF_DIR=/home/ldl/software/hadoop-2.7.1/etc/hadoop
|

3:配置core-site.xml;hdfs-site.xml;mapred-site.xml;yarn-site.xml四个xml文件
core-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/ldl/software/hadoop-2.7.1/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property>
|
hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| <property> <name>dfs.nameservices</name> <value>ns</value> </property> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hadoop01:9000</value> </property> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>hadoop01:50070</value> </property> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hadoop02:9000</value> </property> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>hadoop02:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/ldl/software/hadoop-2.7.1/tmp/journal</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>dfs.client.failover.proxy.provider.ns</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/ldl/software/hadoop-2.7.1/tmp/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/ldl/software/hadoop-2.7.1/tmp/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property>
|
mapred-site.xml
1 2 3 4
| <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
|
yarn-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop01</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop02</value> </property> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>ns-yarn</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop01</value> </property>
|
7:编辑slaves(可以决定哪些服务器是数据节点也就是DataNode)
1 2 3
| hadoop01 hadoop02 hadoop03
|
8:拷贝到其他节点
1 2
| scp -r /home/ldl/software/hadoop-2.7.1/ hadoop02:/home/ldl/software/ scp -r /home/ldl/software/hadoop-2.7.1/ hadoop03:/home/ldl/software/
|
9:配置环境变量
1 2
| cd /etc/profile source /etc/profile
|
10:三台虚拟机启动zookeeper
输入./zkServer.sh status查询状态显示“follower”或者“leader”正常

11:三台虚拟机启动JournalNode:
1
| hadoop-daemon.sh start journalnode
|
JournalNode的作用:使三台虚拟进行相互通信,如果没有该进程那么将不能进行namenode格式化
12:在第一台节点上(主机上)格式化NameNode:hdfs namenode -format/hadoop namenode -format
说明
hadoop namenode -format跟hdfs namenode -format是一个东西,作用完全相同。 在hadoop1.x的时候,只有hadoop namenode -format一种方式,到了hadoop2.x之后,引入了新的hdfs namenode -format,作用完全相同,为了兼容老版本,原来的命令仍然可以使用。
13:启动HDFS
1
| start-dfs.sh/start-all.sh
|
说明:start-all.sh包括start-dfs.sh和start-yarn.sh

启动之后如果要设置主备,格式化备用机的NameNode:hdfs namenode -bootstrapStandby
然后在启动备用机的NameNode:hadoop-daemon.sh start namenode(基于前一个命令)
启动RM的命令: yarn-daemon.sh start resourcemanager
14、测试是否成功
访问路径:http://ip:50070/
出现页面:主机为alive状态,其他两台为standby状态则为成功

可能出现的问题

原因: 从日志上看是因为 datanode的clusterID 和 namenode的clusterID 不匹配 根本原因: 其实,是因为第一次格式化namenode后,启动了hadoop集群,生成了clusterID=CID-96ed3103-6cea-49ef-9c3a-b2c056de269c(这是第一次格式化后生成的clusterID)。后来又因某种原因,重新格式化了namenode,又重新生成了另一个新的clusterID=CID-2b6d3a1f-659d-4029-887d-1a20b9a2ecc4。导致,后来重新启动hadoop集群的时候,其他节点还是用第一次生成的clusterID,导致,找不到新的集群的clusterID,报了一个找不到指定目录的异常。 3、根据配置的路径,找到其他的datanode节点下的VERSION文件 例如,我的VERSION文件在以下的目录中: /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current 下 然后将其他datanode节点中的clusterID都修改为最后一次格式化后生成的clusterID

解决方案:检查网络状态,重启hadoop 实在解决不掉的问题就重新格式化namenode 。如果想重新格式化,那么需要先删除每台机器上的${hadoop.tmp.dir}指定路径下的所有内容,然后再格式化:最好也把logs目录下的内容也清空,因为日志内容已经是前一个废弃集群的日志信息了,留着也无用。