一个完全的hadoop分布式安装至少需要3个zookeeper,3个journalnode,3个datanode,2个namenode组成。
也就是说需要11个节点,但是我云主机有限,只有3个,所以把很多节点搭在了同一个服务器上。
步骤:
1.关闭防火墙
service iptables stop
2.修改主机名
vim /etc/sysconfig/network
三台主机都需要修改
HOSTNAME=hadoop01 # 第一台
HOSTNAME=hadoop02 # 第二台
HOSTNAME=hadoop03 # 第三台
例如:
3.修改hosts文件进行映射
vim /etc/hosts
三台主机都要修改
10.42.127.183 hadoop01 10.42.8.245 hadoop02 10.42.62.96 hadoop03
例如:
4.免密登录
产生秘钥:ssh-keygen
进行复制:ssh-copy-id 用户名@主机
第一台主机操作示例:
ssh-keygen
回车
回车
ssh-copy-id hadoop01@10.42.127.183
ssh-copy-id hadoop02@10.42.8.245
ssh-copy-id hadoop03@10.42.62.96
其余两台进行相同操作。
5.重启三台服务器
reboot
6.安装jdk
7.安装zookeeper
8.启动zookeeper
9.安装hadoop
(1) 编辑 hadoop-env.sh,并且重新生效
vim hadoop-env.sh
export JAVA_HOME=/home/presoftware/jdk1.8 export HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop
(2)编辑 core-site.xml
vim core-site.xml
<!--指定hdfs的nameservice,为整个集群起一个别名--> <property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <!--指定Hadoop数据临时存放目录--> <property> <name>hadoop.tmp.dir</name> <value>/home/software/hadoop-2.7.1/tmp</value> </property> <!--指定zookeeper的存放地址--> <property> <name>ha.zookeeper.quorum</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property>
(3)编辑 hdfs-site.xml
vim hdfs-site.xml
<!--执行hdfs的nameservice为ns,注意要和core-site.xml中的名称保持一致--> <property> <name>dfs.nameservices</name> <value>ns</value> </property> <!--ns集群下有两个namenode,分别为nn1, nn2--> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <!--nn1的RPC通信--> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hadoop01:9000</value> </property> <!--nn1的http通信--> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>hadoop01:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hadoop02:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>hadoop02:50070</value> </property> <!--指定namenode的元数据在JournalNode上存放的位置,这样,namenode2可以从journalnode集 群里的指定位置上获取信息,达到热备效果--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/software/hadoop-2.7.1/tmp/journal</value> </property> <!-- 开启NameNode故障时自动切换 --> <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> <!-- 使用隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!--配置namenode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下--> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/software/hadoop-2.7.1/tmp/hdfs/name</value> </property> <!--配置datanode存放元数据的目录,可以不配置,如果不配置则默认放到hadoop.tmp.dir下--> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/software/hadoop-2.7.1/tmp/hdfs/data</value> </property> <!--配置复本数量--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--设置用户的操作权限,false表示关闭权限验证,任何用户都可以操作--> <property> <name>dfs.permissions</name> <value>false</value> </property>
(4)编辑 mapred-site.xml
vim mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
(5) 编辑 yarn-site.xml
vim yarn-site.xml
<!--配置yarn的高可用--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!--指定两个resourcemaneger的名称--> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!--配置rm1的主机--> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop01</value> </property> <!--配置rm2的主机--> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop03</value> </property> <!--开启yarn恢复机制--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!--执行rm恢复机制实现类--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <!--配置zookeeper的地址--> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property> <!--执行yarn集群的别名--> <property> <name>yarn.resourcemanager.cluster-id</name> <value>ns-yarn</value> </property> <!-- 指定nodemanager启动时加载server的方式为shuffle server --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定resourcemanager地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop03</value> </property>
(6)编辑 slaves
vim slaves
hadoop01
hadoop02
hadoop03
(7)配置环境变量
vim /etc/profile
export HADOOP_HOME=/home/software/hadoop-2.7.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
(8)将hadoop拷贝到另外两个主机
scp -r hadoop-2.7.1 hadoop02:/home/software/
scp -r hadoop-2.7.1 hadoop03:/home/software/
(9)配置另外两个主机的环境变量
export HADOOP_HOME=/home/software/hadoop-2.7.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
10.在任意一个节点上进行Zookeeper格式化注册
hdfs zkfc -formatZK
11.创建指定的目录
cd hadoop-2.7.1/
mkdir tmp
cd tmp
mkdir journal
mkdir hdfs
cd hdfs/
mkdir data
mkdir name
12.在三台节点上分别启动journalnode
hadoop-daemon.sh start journalnode
13.格式化第一个节点
hadoop namenode -format
14.启动第一个节点的namenode
hadoop-daemon.sh start namenode
15.格式化第二个节点上的namenode
hdfs namenode -bootstrapStandby
16.启动第二个点的namenode
hadoop-daemon.sh start namenode
17.在三个节点上分别启动datanode
hadoop-daemon.sh start datanode
18.在第一个节点和第二个节点上启动zkfc实现状态的切换
hadoop-daemon.sh start zkfc
19.在第一个节点上启动yarn
start-yarn.sh
20.在第三个节点上启动resourcemanager
yarn-daemon.sh start resourcemanager
21.浏览器访问
第一个服务器:http://10.42.127.183:50070
第二个服务器:http://10.42.8.245:50070
出现上图所示即为成功。