在青牛的耐心指导下,把hadoop集群给搭建好了。不得不说青牛的功力很深厚啊。
此方案的流程:
1、常规JDK安装以及Linux系统配置
2、集群规划以及集群场景
3、ZooKeeper集群搭建
4、Hadoop2.6.0版本HA集群搭建
5、验证ZooKeeper、Hadoop等集群运行情况
主机名 | 操作系统 | 应用运行的进程 |
---|---|---|
Master | CentOS-6.6-x86_64 | jdk hadoop NameNode DFSZKFailoverController(zkfc) |
Slave1 | CentOS-6.6-x86_64 | jdk hadoop NameNode DFSZKFailoverController(zkfc) |
Slave2 | CentOS-6.6-x86_64 | jdk hadoop ResourceManager |
Slave3 | CentOS-6.6-x86_64 | jdk hadoop ResourceManager |
Slave4 | CentOS-6.6-x86_64 | jdk zookeeper DataNode NodeManager JournalNode |
Slave5 | CentOS-6.6-x86_64 | jdk zookeeper DataNode NodeManager JournalNode |
Slave6 | CentOS-6.6-x86_64 | jdk zookeeper DataNode NodeManager JournalNode |
安装步骤
(一)、基本安装
1.修改Linux主机名
2.修改IP(静态)
3.修改主机名和IP的映射关系
/etc/hosts里面要配置的是内网IP地址和主机名的映射关系
4.关闭防火墙
5.ssh免登陆
6.安装JDK,配置环境变量等
(二)、集群安装
1.安装配置zooekeeper集群(在Slave4上)
1.1解压
tar -zxvf zookeeper-3.4.6.tar.g -C /home/chinahadoop
mv zookeeper-3.4.6/ zookeeper
1.2修改配置
cd /home/chinahadoop/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/home/chinahadoop/zookeeper/zkData
在最后添加:
server.1=Slave4:2888:3888
server.2=Slave5:2888:3888
server.3=Slave6:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir -p /home/chinahadoop/zookeeper/zkData
再创建一个空文件
touch /home/chinahadoop/zookeeper/zkData/myid
最后向该文件写入ID
echo 1 > /home/chinahadoop/zookeeper/zkData/myid
1.3将配置好的zookeeper拷贝到其他节点(首先分别在Slave5、Slave6根目录:/home/chinahadoop/)
scp -r /home/chinahadoop/zookeeper/ Slave5:/home/chinahadoop/
scp -r /home/chinahadoop/zookeeper/ Slave6:/home/chinahadoop/
注意:修改Slave5、Slave6对应/home/chinahadoop/zookeeper/zkData/myid内容
Slave5:
echo 2 >/home/chinahadoop/zookeeper/zkData/myid
Slave6:
echo 3 >/home/chinahadoop/zookeeper/zkData/myid
2.安装配置hadoop集群(在Master上操作)
2.1解压
tar -zxvf hadoop-2.6.0.tar.gz -C /home/chinahadoop/
2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
将hadoop添加到环境变量中
vim /etc/profile
export JAVA_HOME=
export HADOOP_HOME=/home/chinahadoop/hadoop-2.6.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
记得 source /etc/profile
cd /usr/local/hadoop-2.6.0/etc/hadoop
2.2.1修改hadoo-env.sh
export JAVA_HOME=
2.2.2修改core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为masters -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://masters</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/chinahadoop/hadoop-2.6.0/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>Slave4:2181,Slave5:2181,Slave6:2181</value>
</property>
</configuration>
2.2.3修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为masters,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>masters</value>
</property>
<!-- Master下面有两个NameNode,分别是Master,Slave1 -->
<property>
<name>dfs.ha.namenodes.masters</name>
<value>Master,Slave1</value>
</property>
<!-- Master的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.masters.Master</name>
<value>Master:9000</value>
</property>
<!-- Master的http通信地址 -->
<property>
<name>dfs.namenode.http-address.masters.Master</name>
<value>Master:50070</value>
</property>
<!-- Slave1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.masters.Slave1</name>
<value>Slave1:9000</value>
</property>
<!-- Slave1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.masters.Slave1</name>
<value>Slave1:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Slave4:8485;Slave5:8485;Slave6:8485/masters</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/chinahadoop/hadoop-2.6.0/journal</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/chinahadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
2.2.4修改mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2.2.5修改yarn-site.xml
<configuration>
<!-- 开启RM高可靠 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>Slave2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>Slave3</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>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>Slave4:2181,Slave5:2181,Slave6:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.2.6修改slaves文件
Slave4
Slave5
Slave6
2.2.7配置免密码登陆
首先要配置Master到Slave1、Slave2、Slave3、Slave4、Slave5、Slave6的免密码登陆
在Master上生产一对钥匙
ssh-keygen -t rsa
将公钥拷贝到其他节点,包括自己
ssh-copy-id chinahadoop@Master
ssh-copy-id chinahadoop@Slave1
ssh-copy-id chinahadoop@Slave2
ssh-copy-id chinahadoop@Slave3
ssh-copy-id chinahadoop@Slave4
ssh-copy-id chinahadoop@Slave5
ssh-copy-id chinahadoop@Slave6
注意:两个namenode之间要配置ssh免密码登陆,别忘了配置Slave1到Master的免登陆
在Slave1上生产一对钥匙
ssh-keygen -t rsa
ssh-copy-id -i chinahadoop@Master
配置Slave2到Slave3、Slave4、Slave5、Slave6的免密码登陆
在Slave2上生产一对钥匙
ssh-keygen -t rsa
将公钥拷贝到其他节点
ssh-copy-id chinahadoop@Slave3
ssh-copy-id chinahadoop@Slave4
ssh-copy-id chinahadoop@Slave5
ssh-copy-id chinahadoop@Slave6
在Slave3上生产一对钥匙
ssh-keygen -t rsa
将公钥拷贝到其他节点
ssh-copy-id Slave4
ssh-copy-id Slave5
ssh-copy-id Slave6
2.3将配置好的hadoop拷贝到其他节点
scp -r /home/chinahadoop/hadoop-2.6.0/ Slave1:/home/chinahadoop
scp -r /home/chinahadoop/hadoop-2.6.0/ Slave2:/home/chinahadoop
scp -r /home/chinahadoop/hadoop-2.6.0/ Slave3:/home/chinahadoop
scp -r /home/chinahadoop/hadoop-2.6.0/ Slave4:/home/chinahadoop
scp -r /home/chinahadoop/hadoop-2.6.0/ Slave5:/home/chinahadoop
scp -r /home/chinahadoop/hadoop-2.6.0/ Slave6:/home/chinahadoop
注意:严格按照下面的步骤
以下启动过程,是青牛指导的。
hdfs HA 格式化启动过程:
1.启动 zookeeper
./bin/zkServer.sh start
2. 在 主master节点上 格式化zk
./bin/hdfs zkfc -formatZK
3.启动JN,3台
./sbin/hadoop-daemon.sh start journalnode
4.主节点上格式化namenode
./bin/hdfs namenode -format
5.启动主 namenode
./sbin/hadoop-daemon.sh start namenode
6.在备份namenode节点上启动namenode
./bin/hdfs namenode –bootstrapStandby
./sbin/hadoop-daemon.sh start namenode
7.两个namenode节点上启动 zkfc
./sbin/hadoop-daemon.sh start zkfc
8.启动 datanode
可以在主master节点上执行
./sbin/start-dfs.sh
由于当时对meta不了解,在大牛的指导下,把数据清了,然后再重新启动集群。然后集群就起成功了。