hadoop.xiaoxun.com.cn01 JournalNode QuorumPeerMain NameNode DFSZKFailoverController DataNode NodeManager Master Worker
hadoop.xiaoxun.com.cn02 JournalNode QuorumPeerMain NameNode DFSZKFailoverController DataNode NodeManager Worker
hadoop.xiaoxun.com.cn03 JournalNode QuorumPeerMain DataNode ResourceManager NodeManager Worker
hadoop.xiaoxun.com.cn04 DataNode ResourceManager NodeManager Worker
高可用集群安装步骤:
1.修改Linux主机名
vi /etc/sysconfig/network
2.修改主机名和IP的映射关系hosts文件
vi /etc/hosts
里面要配置的是内网IP地址和主机名的映射关系
3.关闭防火墙
service iptables stop
chkconfig iptables off
创建hadoop新用户并赋予root权限
4.ssh免登陆 --hadoop用户
ssh-keygen -t rsa #用于生成公钥
ssh-copy-id 主机名 #用于将公钥发送到对方的私钥中
在家目录的.ssh文件夹下会看到生成的公钥和私钥
5.安装JDK,scala配置环境变量等
解压到/opt/modules/目录下
# mkdir /opt/modules/
# chown hadoop: hadoop /opt/modules/
第一台安装,拷贝jdk目录给后面两台服务器
$ scp -r jdk1.7.0_67/ hadoop.xiaoxun.com.cn02:/opt/modules/
$ scp -r jdk1.7.0_67/ hadoop.xiaoxun.com.cn03:/opt/modules/
环境变量[3台]
# vi /etc/profile --root用户
## JAVA HOME
JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
## SCALA HOME
SCALA_HOME=/opt/modules/scala
export PATH=$PATH:$SCALA_HOME/bin
6.安装配置ZooKeeper
安装:
$ tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/modules/
配置文件:
cd conf/
1)重命名到zoo.cfg
$ mv zoo_sample.cfg zoo.cfg
2)创建zkData文件夹
mkdir zkData
3)修改保存数据的路径
dataDir=/opt/modules/zookeeper-3.4.5/zkData
4)设置ZK服务器的名称和地址
包括一些集群的信息,具体指的是:
服务器编号,服务器地址,LF通信端口,选举端口
格式如下:
server.N=YYY:A:B
N:ZK Server的id
YYY:主机名
A:Leader与Follower之间通信的端口 2888
B:Leader的选举端口 3888
server.1=hadoop.xiaoxun.com.cn01:2888:3888
server.2=hadoop.xiaoxun.com.cn02:2888:3888
server.3=hadoop.xiaoxun.com.cn03:2888:3888
创建myid文件
在(dataDir=/opt/modules/zookeeper-3.4.5/zkData)
创建一个myid文件,里面内容是server.N中的N
(server.1里面内容为1)
将配置好的zk通过scp传到其他服务器
$ scp -r zookeeper-3.4.5/ 192.168.234.102:/opt/modules/
$ scp -r zookeeper-3.4.5/ 192.168.234.103:/opt/modules/
修改myid
192.168.234.102主机上将myid修改为2
192.168.234.103主机上将myid修改为3
启动ZK(逐个启动)
./zkServer.sh start
./zkServer.sh status可以查看到1台是leader,2台follower
并且在一台上的修改会同步到其他2台上。
#####zoo.cfg#####
tickTime=2000
# Zookeeper 服务器之间或客户端与服务器之间维持心跳的
时间间隔,也就是每个 tickTime时间就会发送一个心跳。
tickTime以毫秒为单位。
initLimit=5
# Leader与Follower初始联系的时候,Leader最多能够容忍
Follower的一个tickTime的时间倍数。
在ZK Server刚启动的时候,Leader会等Follower汇报,如果超过了
tickTime*5的时间,还没接到Follower的联系,就认为他出问题了
syncLimit=2
# 在通信过程中,如果超过了2*tickTime的时间,Leader还没有收到
Follower的心跳,就认为出问题了。
dataDir=/opt/modules/zookeeper-3.4.5/zkData
# Zookeeper保存数据的目录,默认情况下,
Zookeeper将写数据的日志文件也保存在这个目录里。
clientPort=2181
# 在ZK启动之后,就会一直监听2181端口,等待客户端的连接。
7.安装hadoop
1.安装hadoop(在第一台上安装)
tar -zxvf hadoop-2.5.0.tar.gz -C /opt/modules/
删除doc文件
rm -rf doc
2.配置环境变量
#HADOOP_HOME
export HADOOP_HOME=/opt/modules/hadoop-2.5.0
export PATH=$PATH:$HADOOP_HOME/bin
3.配置环境文件
hadoop-env.sh
mapred-env.sh
yarn-env.sh
export JAVA_HOME=/opt/modules/jdk1.7.0_67
4.修改xxxx-site.xml文件
8.安装spark
1.安装spark(在第一台上安装)
tar -zxvf spark -C /opt/modules/
2.配置环境变量
#SPARK_HOME
export SPARK_HOME=/opt/modules/spark
export PATH=$PATH:$SPARK_HOME/bin
3.$SPARK_HOME/conf/spark-env.sh
cp spark-env.sh.template spark-env.sh
#配置内容如下:
export SCALA_HOME=/usr/share/scala
export JAVA_HOME=/usr/java/jdk1.8.0_112/
#export SPARK_MASTER_IP=master(单master)
(HA)export SPARK_DAEMON_JAVA_OPTS=”-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 –Dspark.deploy.zookeeper.dir=/spark”
export SPARK_WORKER_MEMORY=1g
export HADOOP_CONF_DIR=/opt/hadoop-2.7.3/etc/hadoop
4.$SPARK_HOME/conf/slaves
cp slaves.template slaves
master
worker1
worker2
5.scp spark-2.1.0-bin-hadoop2.7 root@workerN:/opt
启动:
在所有节点启动Zkserver
zkServer.sh start
zkServer.sh status
启动journalnode(在master上启动所有journalnode)
hadoop-daemons.sh start journalnode
格式化NameNode
hdfs namenode -format
格式化zkfc
hdfs zkfc -formatZK
在master启动HDFS,Yarn,Spark:
#启动NameNode,DataNode,zkfc,JournalNode
start-dfs.sh
#启动ResouceManager,NodeManager
start-yarn.sh
#启动Master,Worker
start-all.sh
++++++++++++++++++++++++++++++++++++++++
core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0/tmp</value>
</property>
</configuration>
<!-- 配置了ZooKeeper来管理集群 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop.xiaoxun.com.cn01:2181,hadoop.xiaoxun.com.cn02:2181,hadoop.xiaoxun.com.cn03:2181</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<description>Size of read/write buffer used inSequenceFiles.</description>
</property>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
hdfs-site.xml
<!-- 自己定义的nameservice的名称 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址,这里实际指定了nn1的地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoop.xiaoxun.com.cn01:9000</value>
</property>
<!-- nn1的http通信地址,web端查看地址及端口 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop.xiaoxun.com.cn01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoop.xiaoxun.com.cn02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hadoop.xiaoxun.com.cn02:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop.xiaoxun.com.cn01:8485;hadoop.xiaoxun.com.cn02:8485;hadoop.xiaoxun.com.cn03:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/modules/hadoop-2.5.0/journal</value>
</property>
<!--
配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行
sshfence:当Active出问题后,standby切换成Active,此时,原Active又没有停止服务,这种情况下会被强制杀死进程。
shell(/bin/true):NN Active和它的ZKFC一起挂了,没有人通知ZK,ZK长期没有接到通知,standby要切换,此时,standby调一个shell(脚本内容),这个脚本返回true则切换成功。
-->
<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>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- 使能自动故障转移 -->
property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置自动切换的实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop.xiaoxun.com.cn04:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop.xiaoxun.com.cn04:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/home/hadoop/mr_history/HAmap</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/home/hadoop/mr_history/HAdone</value>
<description>Directory where history files are managed by the MR JobHistory Server.</description>
</property>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
yarn-site.xml
<!--启用resourcemanager ha-->
<!-- 启动 ResourceManager的HA -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--声明两台resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rmcluster</value>
</property>
<!-- 配置ha下面的每一个ResourceManager的ids
中间用","分隔
-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 指定每一台ResourceManager的主机名 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop.xiaoxun.com.cn03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop.xiaoxun.com.cn04</value>
</property>
<!--指定zookeeper集群的地址
3台zk的主机名加端口号,每一台zk之间用","分隔
-->
<property>
<name>yarn.resourcemanager.zk-address</name> <value>hadoop.xiaoxun.com.cn01:2181,hadoop.xiaoxun.com.cn02:2181,hadoop.xiaoxun.com.cn03:2181</value>
</property>
<!--启用自动恢复,设置为true-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--指定resourcemanager的状态信息存储在zookeeper集群-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>