安装基于hadoop集群的高可用完全分布式的spark高可用集群

高可用集群规划:


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>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值