hadoop和spark主备HA配置说明

hadoopspark主备HA配置说明

1.  环境说明

  集群中包括4个节点:2Master(主备)2Salve,节点之间局域网连接,可以相互ping。节点IP地址分布如下:

  

Hadoop HA集群:

IP地址

hostname

role

10.12.0.240

master

ActiveNameNode

10.12.0.243 

standyMaster

StandByNameNode

10.12.0.241

slave1

DataNode1

10.12.0.242

slave2

DataNode2

 

 





Spark HA集群:

IP地址

hostname

role

10.12.0.240

master

Master

10.12.0.243

standyMaster

StandBy Master

10.12.0.241

slave1

worker

10.12.0.242

slave2

worker

 

 




2.  环境配置

2.1关闭防火墙

在root用户关闭防火墙

永久关闭防火墙,重启后不变:

chkconfig iptablesoff/on                     

 

  

关闭防火墙:( 即时生效,重启后失效。先关闭防火墙,再永久关闭防火墙。)           

service iptables stop       

/etc/init.d/iptables stauts    查看防火墙状态    

 

2.2创建用户组(CentOS 6.5)

[root@master ~]#groupadd hadoop

[root@master ~]#useradd -g hadoop hadoop

[root@master ~]#passwd hadoop

[root@master ~]# 两次输入密码

 

测试创建用户

[root@master ~]# suhadoop

[hadoop@master root]$

 

su root 回到root用户

vim /etc/sudoers

为hadoop用户分配权限,需先修改sudoers文件的权限。

执行命令: chmod u+w /etc/sudoers

再添加:hadoop ALL=(ALL)       ALL

 

2.3网络配置

  下面的例子我们将以Master机器为例,即主机名为"Master "IP"10.12.0.93"进行一些主机名配置的相关操作。其他的Slave机器以此为依据进行修改。

 

 1)查看当前机器名称

  用下面命令进行显示机器名称,如果跟规划的不一致,要按照下面进行修改。

 

hostname

 

   

  上图中,用"hostname""master"机器的名字为"master ",与我们预先规划的一致。其他2台机器分别改为slave1slave2

 2)修改当前机器名称

  假定我们发现我们的机器的主机名不是我们想要的,通过对"/etc/sysconfig/network"文件修改其中"HOSTNAME"后面的值,改成我们规划的名称。

  这个"/etc/sysconfig/network"文件是定义hostname和是否利用网络的不接触网络设备的对系统全体定义的文件。

  设定形式:设定值=值

  "/etc/sysconfig/network"的设定项目如下:

NETWORKING 是否利用网络

GATEWAY 默认网关

IPGATEWAYDEV 默认网关的接口名

HOSTNAME 主机名

DOMAIN 域名

  用下面命令进行修改当前机器的主机名(备注:修改系统文件一般用root用户) 

vim/etc/sysconfig/network

  通过上面的命令我们从"/etc/sysconfig/network"中找到"HOSTNAME"进行修改,查看内容如下:

 

 3)修改当前机器IP

    假定我们的机器连IP在当时安装机器时都没有配置好,那此时我们需要对"ifcfg-eth0"文件进行配置,该文件位于"/etc/sysconfig/network-scripts"文件夹下。

  在这个目录下面,存放的是网络接口(网卡)的制御脚本文件(控制文件),ifcfg- eth0是默认的第一个网络接口,如果机器中有多个网络接口,那么名字就将依此类推ifcfg-eth1ifcfg-eth2ifcfg- eth3……

  这里面的文件是相当重要的,涉及到网络能否正常工作。

  设定形式:设定值=

  设定项目项目如下:

 

DEVICE 接口名(设备,网卡)

BOOTPROTO IP的配置方法(static:固定IP dhcpHCP none:手动)

HWADDR MAC地址

ONBOOT 系统启动的时候网络接口是否有效(yes/no

TYPE 网络类型(通常是Ethemet

NETMASK 网络掩码

IPADDR IP地址

IPV6INIT IPV6是否有效(yes/no

GATEWAY 默认网关IP地址

DSN1   DSN服务器地址

 

查看"/etc/sysconfig/network-scripts/ifcfg-eth1内容,此处实际网卡名称eth1

 

 

 

  如果上图中IP与规划不相符,用下面命令进行修改: 

vim/etc/sysconfig/network-scripts/ifcgf-eth1

  修改完之后可以用"ifconfig"进行查看。

 

 

   

4)配置hosts文件(必须

  "/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName和IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。

  vi /etc/hosts 

 

 

2.4配置Master无密码登录所有Salve

1)SSH无密码原理

masterNameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器salveDataNode | Tasktracker)上时,需要在master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当master通过SSH连接salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给mastermaster收到加密数之后再用私钥解密,并将解密数回传给slaveslave确认解密数无误之后就允许master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端master复制到slave上。

(注:无密码说明从网上拷贝过来,图片Master对应masterSlave1对应slave1

2)mater机器上生成密码对

 mater节点上执行以下命令:

ssh-keygen -t rsa -P '' 

  这条命是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsaid_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。

 

 

  查看"/home/hadoop/"下是否有".ssh"文件夹,且".ssh"文件下是否有两个刚生产的无密码密钥对。

 

 

  接着在master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。

 

cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys

 

 

  在验证前,需要做两件事儿。第一件事儿是修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效。

1)修改文件"authorized_keys"

    

chmod 600~/.ssh/authorized_keys  

 

   

 备注:如果不进行设置,在验证时,扔提示你输入密码,

(如果600权限仍要密码就修改为500chmod 600 ~/.ssh/authorized_keys

 

    2)设置SSH配置

  用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。

 

 

RSAAuthentication yes#启用 RSA认证

PubkeyAuthenticationyes #启用公钥私钥配对认证方式

AuthorizedKeysFile.ssh/authorized_keys #公钥文件路径(和上面生成的文件同)

 

  设置完之后记得重启SSH服务,才能使刚才设置有效。

 

service sshd restart

    

  退出root登录,使用hadoop普通用户验证是否成功。

 

ssh localhost

 

   

  从上图中得知无密码登录本级已经设置完毕,接下来的事儿是把公钥复制所有slave机器上。使用下面的命令格式进行复制公钥:

 

scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP:~/

  例如:

scp ~/.ssh/id_rsa.pub hadoop@10.12.0.92:~/

 

  上面的命令是复制文件"id_rsa.pub"到服务器IP为"10.12.0.92"的用户为"hadoop"的"/home/hadoop/"下面。

 

  下面就针对IP为"10.12.0.92"的slave1的节点进行配置。

3)把master上的公钥复制到slave1

 

$ scp  ~/.ssh/id_rsa.pub hadoop@10.12.0.92: ~/ 
chenlb@10.12.0.92's password:
id_rsa.pub                                    100%  223     0.2KB/s   00:00

  从上我们得知,已经把文件"id_rsa.pub"传过去了,因为并没有建立起无密码连接,所以在连接时,仍然要提示输入输入Slave1.Hadoop服务器用户hadoop的密码。为了确保确实已经把文件传过去了,用SecureCRT登录Slave1.Hadoop:192.168.1.3服务器,查看"/home/hadoop/"下是否存在这个文件。

 

 

  从上面得知我们已经成功把公钥复制过去了。

4)在"/home/hadoop/"下创建".ssh"文件夹

  这一步并不是必须的,如果在Slave1.Hadoop"/home/hadoop"已经存在就不需要创建了,因为我们之前并没有对Slave机器做过无密码登录配置,所以该文件是不存在的。用下面命令进行创建。(备注:hadoop登录系统,如果不涉及系统文件修改,一般情况下都是用我们之前建立的普通用户hadoop进行执行命令。)

 

mkdir ~/.ssh

 

  然后是修改文件夹".ssh"的用户权限,把他的权限修改为"700",用下面命令执行:

 

chmod 700 ~/.ssh

 

  备注:如果不进行,即使你按照前面的操作设置了"authorized_keys"权限,并配置了"/etc/ssh/sshd_config",还重启了sshd服务,在Master能用"sshlocalhost"进行无密码登录,但是对Slave1.Hadoop进行登录仍然需要输入密码,就是因为".ssh"文件夹的权限设置不对。这个文件夹".ssh"在配置SSH无密码登录时系统自动生成时,权限自动为"700",如果是自己手动创建,它的组权限和其他权限都有,这样就会导致RSA无密码远程登录失败。

 

 

  对比上面两张图,发现文件夹".ssh"权限已经变了。

3)追加到授权文件"authorized_keys"

  到目前为止Maste的公钥也有了,文件夹".ssh"也有了,且权限也修改了。这一步就是把Master.Hadoop的公钥追加Slave1的授权文件"authorized_keys"中去。使用下面命令进行追加并修改"authorized_keys"文件权限:

 

cat ~/id_rsa.pub>> ~/.ssh/authorized_keys

chmod 600~/.ssh/authorized_keys

 

4)用root用户修改"/etc/ssh/sshd_config"

具体步骤参考前面master."设置SSH配置",具体分为两步:第1是修改配置文件;第2是重启SSH服务。

5)用master使用SSH无密码登录Slave1

  当前面的步骤设置完毕,就可以使用下面命令格式进行SSH无密码登录了。

 

ssh 远程服务器IP

 

 

  从上图我们主要3个地方,第1个就是SSH无密码登录命令,第23个就是登录前后"@"后面的机器名变了,由"Master"变为了"Slave1",这就说明我们已经成功实现了SSH无密码登录了。

  最后记得把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉。

 

rm –r ~/id_rsa.pub

 

 

  到此为止,我们经过前5步已经实现了从"master ""slave1 "SSH无密码登录,下面就是重复上面的步骤把剩余的两台(Slave2.HadoopSlave3.HadoopSlave服务器进行配置。这样,我们就完成了"配置Master无密码登录所有的Slave服务器"

 

2.3 配置所有Slave无密码登录Master

  和master无密码登录所有slave原理一样,就是把slave的公钥追加master".ssh"文件夹下的"authorized_keys"中,记得是追加(>>

3.  Java环境安装

  所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以"root"的身份进行。

 

3.1 安装JDK

  首先用root身份登录"Master.Hadoop"后在"/usr"下创建"java"文件夹,再把用FTP上传到"/home/hadoop/"下的"jdk-6u31-linux-i586.bin"复制到"/usr/java"文件夹中。

 

检验系统原版本

[root@localhost ~]# java -version

java version "1.7.0_45"

OpenJDK Runtime Environment(rhel-2.4.3.3.el6-x86_64 u45-b15)

OpenJDK 64-Bit Server VM (build 24.45-b08,mixed mode)

[root@ls4 hadoop]#进一步查看JDK信息:

[root@localhost ~]# rpm -qa | grep java

java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

tzdata-java-2013g-1.el6.noarch

卸载OpenJDK,执行以下操作:

[root@localhost ~]# rpm -e --nodepstzdata-java-2012c-1.el6.noarch

[root@localhost ~]# rpm -e --nodepsjava-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

[root@localhost ~]# rpm -e --nodeps ava-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

 

安装java

tar -zxvf jdk-7u51-linux-x64.tar.gz -C /usr/local/java

 

配置新JDK

export JAVA_HOME=/usr/local/jdk1.7.0_51

export JRE_HOME=/usr/local/jdk1.7.0_51/jre

exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin

 

重启"/etc/profile" 

source /etc/profile

4.  安装scala

而最新版本的spark-1.3需要最低版本的scala版本为2.10.x,先使用apt-get remove scala将机器上的老版本scala清除干净。

在这个位置下载 http://www.scala-lang.org/download/2.10.5.html scala

现在好后,解压,

最后编辑/etc/profile,设置如下环境变量:

export SCALA_HOME=/usr/local/scala-2.10.4

export PATH=$PATH:$ SCALA_HOME

最后可以看到,scala的版本为2.10.5的了

~/spark-evn/scala-2.10.5$ scala -version
Scala code runner version 2.10.5 -- Copyright 2002-2013, LAMP/EPFL

5.  安装Maven

1.首先到Maven官网下载安装包,目前最新版本为3.2.5,下载文件为apache-maven-3.2.5-bin.tar.gz,下载可以使用wget命令;

2.进入下载文件夹,找到下载的文件,运行如下命令解压

tar -xvf  apache-maven-3.2.5-bin.tar.gz


解压后的文件夹名为apache-maven-3.2.5

3.使用mv命令将apache-maven-3.2.3文件夹拷贝到自己指定的文件夹,比如/usr/local/下

mvapache-maven-3.2.3 /usr/local/


4.配置环境变量,编辑/etc/profile文件,添加如下代码

exportMAVEN_HOME=/usr/local/apache-maven-3.2.5
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$ANTX_HOME/bin:$ANT_HOME/bin


5.保存文件,并运行如下命令使环境变量生效

source /etc/profile

 

6.在控制台输入如下命令,如果能看到Maven相关版本信息,则说明Maven已经安装成功

mvn -v

6.  Zookeeper安装

  zookeeper-3.5.0-alpha.tar.gz解压到/home/hadoop目录。

  #配置zoo.cfg文件

  cd /home/hadoop/zookeeper-3.5.0-alpha

  mkdir data

  mkdir datalog

  cd conf

  cp zoo_sample.cfg  zoo.cfg

  vi zoo.cfg

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/home/hadoop/labsp/zookeeper-3.4.6/data

dataLogDir=/home/hadoop/labsp/zookeeper-3.4.6/datalog

# the port at which the clients will connect

clientPort=2181

# the maximum number of client connections.

# increase this if you need to handle more clients

#maxClientCnxns=60

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server.1=master:2888:3888

server.2=standyMaster:2888:3888

server.3=slave1:2888:3888

#注意:服务个数最好是奇数个如357......

输入1进入SY-0134的zookeeper中的myid文件

echo "1"> /home/hadoop/zookeeper-3.5.0-alpha/data/myid

使用scp命令把zookeeper拷贝到其他机器上面

cd /home/hadoop

scp –r zookeeper-3.5.0-alpha hadoop@standyMaster:~/

scp –r zookeeper-3.5.0-alpha hadoop@slave1:~/

 

 另外一点,ZoookeeperServer在不同节点上,myid文件内容不一样。

 echo "1"> home/hadoop/zookeeper-3.5.0/data/myid   #master

 echo "2"> home/hadoop/zookeeper-3.5.0/data/myid   #standyMaster

 echo "3"> home/hadoop/zookeeper-3.5.0/data/myid   #slave1

3个节点上分别启动zookeeper .

[hadoop@masterzookeeper-3.5.0]$ bin/zkServer.shstart

[hadoop@stardyMasterzookeeper-3.5.0]$ bin/zkServer.sh start

[hadoop@slave1zookeeper-3.5.0]$ bin/zkServer.shstar

 

 

7.  配置Hadoop集群

上传hadoop-2.6.0-cdh5.4.0.tar.gz到master服务器/home/hadoop目录。使用hadoop用户登入。

1)   解压hadoop包

tar –xzvf hadoop-2.6.0-cdh5.4.0.tar.gz –C/CDH

2)   添加环境变量

vi /etc/profile

 

exportHADOOP_HOME=/home/hadoop/CDH5/hadoop-2.6.0-cdh5.4.0

exportHADOOP_CONF_DIR=/home/hadoop/CDH5/hadoop-2.6.0-cdh5.4.0/etc/hadoop

exportPATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$MAVEN_HOME/bin

 

3)   6.3配置

cd /home/hadoop/CDH5/hadoop-2.6.0-cdh5.4.0/etc/hadoop

1)vi hadoop-env.sh

增加
export JAVA_HOME=/usr/java/jdk1.7.0_51

 

2)vi core-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Licensed under the Apache License, Version 2.0 (the "License"); you

       may not use this file except in compliance with the License. You may obtain

       a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless

       required by applicable law or agreed to in writing, software distributed

       under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES

       OR CONDITIONS OF ANY KIND, either express or implied. See the License for

       the specific language governing permissions and limitations under the License.

       See accompanying LICENSE file. -->

 

<!-- Put site-specific property overrides in this file. -->

 

<configuration>

       <!-- 指定hdfs的nameservice为cluster1,是NameNode的URI。hdfs://主机名:端口/ -->

       <property>

              <name>fs.defaultFS</name>

              <value>hdfs://cluster1</value>

              <description>The name of the default file system. A URI whose

                     schemeand authority determine the FileSystem implementation. The

                     uri'sscheme determines the config property (fs.SCHEME.impl) naming

                     theFileSystem implementation class. Theuri's authority is used to

                     determine the host, port, etc. for a filesystem.

              </description>

       </property>

       <property>

              <name>fs.trash.interval</name>

              <value>10080</value>

       </property>

       <property>

              <name>fs.trash.checkpoint.interval</name>

              <value>10080</value>

       </property>

       <property>

              <name>hadoop.tmp.dir</name>

              <value>/home/hadoop/tmp/hadoop-${user.name}</value>

              <description>A base for other temporary directories.</description>

       </property>

       <property>

            <name>hadoop.proxyuser.hadoop.hosts</name>

              <value>master</value>

         </property>

         <property>

             <name>hadoop.proxyuser.hadoop.groups</name>

            <value>hadoop</value>

      </property>

      <property>

          <name>mapreduce.jobhistory.address</name>

          <value>master:10020</value>

      </property>

      <property>

          <name>mapreduce.jobhistory.webapp.address</name>

          <value>master:19888</value>                

      </property>

      <!-- 指定zookeeper地址 -->

      <property>

        <name>ha.zookeeper.quorum</name>

        <value>master:2181,standyMaster:2181,slave1:2181</value>

   </property>

</configuration>

 

3)vi hdfs-site.xml

<configuration>

      

      

       <!--指定hdfs的nameservice为cluster1,需要和core-site.xml中的保持一致 -->

       <property>

              <name>dfs.nameservices</name>

              <value>cluster1</value>

       </property>

       <!-- cluster1下面有两个NameNode,分别是nn1,nn2 -->

       <property>

              <name>dfs.ha.namenodes.cluster1</name>

              <value>nn1,nn2</value>

  </property>

  <!-- 数据分块 -->

  <property>

              <name>dfs.replication</name>

              <value>2</value>

              <description>Default block replication.

                Theactual number of replications can be specified when the file is created.

                Thedefault is used if replication is not specified in create time.

              </description>

       </property>

       <!-- namenode数据目录 -->

       <property>

              <name>dfs.namenode.name.dir</name>

              <value>file:/data/hadoop/name/hadoop-${user.name}</value>

       </property>

       <!-- datanode数据目录 -->

       <property>

              <name>dfs.datanode.data.dir</name>

              <value>file:/data/hadoop/data/hadoop-${user.name}</value>

       </property>

       <!-- nn1的rpc通信地址 -->

  <property>

              <name>dfs.namenode.rpc-address.cluster1.nn1</name>

              <value>master:9000</value>

       </property>

       <property>

              <name>dfs.namenode.rpc-address.cluster1.nn2</name>

              <value>standyMaster:9000</value>

       </property>

       <!-- nn1的http通信地址 -->

       <property>

              <name>dfs.namenode.http-address.cluster1.nn1</name>

                     <value>master:50070</value>

       </property>

       <property>

              <name>dfs.namenode.http-address.cluster1.nn2</name>

                     <value>standyMaster:50070</value>

       </property>

       <property>

    <name>dfs.namenode.servicerpc-address.cluster1.nn1</name>

    <value>master:53310</value>

</property>

<property>

    <name>dfs.namenode.servicerpc-address.cluster1.nn2</name>

    <value>standyMaster:53310</value>

</property>

<!-- 指定NameNode读写JNs组的uri -->

       <property>

              <name>dfs.namenode.shared.edits.dir</name>

                     <value>qjournal://master:8485;standyMaster:8485;slave1:8485/cluster1</value>

       </property>

       <property>

<!-- 配置失败自动切换实现方式 -->

       <name>dfs.client.failover.proxy.provider.cluster1</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>/home/hadoop/.ssh/id_rsa_nn1</value>

       </property>

        <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>ha.failover-controller.cli-check.rpc-timeout.ms</name>

       <value>60000</value>

   </property>

 

   <property>

       <name>ipc.client.connect.timeout</name>

       <value>60000</value>

   </property>

 

   <property>

       <name>dfs.image.transfer.bandwidthPerSec</name>

       <value>4194304</value>

   </property>

  

  <property>

       <name>dfs.journalnode.edits.dir</name>

              <value>/home/hadoop/tmp/journal</value>

  </property>

 

  <!--保证数据恢复 --> 

    <property> 

              <name>dfs.journalnode.http-address</name> 

              <value>0.0.0.0:8480</value> 

    </property> 

    <property> 

                 <name>dfs.journalnode.rpc-address</name> 

                 <value>0.0.0.0:8485</value> 

     </property>

 

 <property>

              <name>dfs.namenode.secondary.http-address</name>

              <value>slave1:9001</value>

       </property>

       <property>

              <name>dfs.webhdfs.enabled</name>

              <value>true</value>

       </property>

       <property>

              <name>dfs.datanode.max.transfer.threads</name>

              <value>8192</value>

       </property>

       <property>

         <name>dfs.namenode.handler.count</name>

         <value>100</value>

         <description>The number of server threads for the namenode.</description>

       </property>

       <property>

         <name>dfs.namenode.safemode.threshold-pct</name>

         <value>0.999f</value>

         <description>

              Specifies the percentage of blocks that should satisfy

              the minimal replication requirement defined by dfs.namenode.replication.min.

              Values less than or equal to 0 mean not to wait for any particular

              percentage of blocks before exiting safemode.

              Values greater than 1 will make safe mode permanent.

         </description>

       </property>

       <property>

         <name>dfs.namenode.safemode.min.datanodes</name>

         <value>0</value>

         <description>

              Specifies the number of datanodes that must be considered alive

              before the name node exits safemode.

              Values less than or equal to 0 mean not to take the number of live

              datanodes into account when deciding whether to remain in safe mode

              during startup.

              Values greater than the number of datanodes in the cluster

              will make safe mode permanent.

         </description>

       </property>

       <property>

         <name>dfs.datanode.balance.bandwidthPerSec</name>

         <value>1048576</value>

         <description>

                     Specifies the maximum amount of bandwidth that each datanode

                     can utilize for the balancing purpose in term of

                     the number of bytes per second.

         </description>

       </property>

</configuration>

注意:在上面的配置中有一个地方要特别说明一下,dfs.ha.fencing.ssh.private-key-files这里指向的是一个本地文件。上面我们是配置了两个namenode来实现HDFS的HA的,分别是nn1和nn2,在nn2的~/.ssh/目录下需要将nn1的~/.ssh/目录下的id_rsa文件copy过来,并且应该重命名成如id_rsa_nn1这样的文件名,以免覆盖了本地的文件。

4)vi mapred-site.xml

<configuration>

       <property>

              <name>mapreduce.framework.name</name>

              <value>yarn</value>

       </property>

       <property>

              <name>mapreduce.map.memory.mb</name>

              <value>8192</value>

       </property>

       <property>

              <name>mapreduce.reduce.memory.db</name>

              <value>8192</value>

       </property>

      

       <property>

     <name>mapreduce.map.output.compress</name>

     <value>true</value>

 </property>

 <property>

     <name>mapreduce.map.output.compress.codec</name>

        <value>com.hadoop.compression.lzo.LzoCodec</value>

 </property>

 <property>

     <name>mapred.child.env</name>

         <value>LD_LIBRARY_PATH=/home/hadoop/hadoop-2.6.0-cdh5.4.0/lib/native</value>

 </property>

 

       <property>

              <name>mapreduce.map.java.opts</name>

              <value>-Xmx3072m</value>

       </property>

       <property>

              <name>mapreduce.reduce.java.opts</name>

              <value>-Xmx5120m</value>

       </property>

 

       <property>

              <name>mapred.child.java.opts</name>           

              <value>-Xmx4096m -XX:-UseGCOverheadLimit</value>

       </property>

      

      <property>

          <name>mapreduce.jobhistory.address</name>

          <value>master:10020</value>

      </property>

       <property>

          <name>mapreduce.jobhistory.webapp.address</name>

          <value>master:19888</value>

      </property>

      <property>

              <name>mapreduce.jobhistory.intermediate-done-dir</name>

              <value>file:/home/hadoop/history/done_intermediate</value>

      </property>

      <property>

              <name>mapreduce.jobhistory.done-dir</name>

              <value>file:/home/hadoop/history/done</value>

      </property>

</configuration>

 

5) vi yarn-site.xml 

<?xml version="1.0"?>

<!--

  Licensed under the Apache License, Version 2.0 (the "License");

  you may not use this file except in compliance with the License.

  You may obtain a copy of the License at

 

    http://www.apache.org/licenses/LICENSE-2.0

 

  Unless required by applicable law or agreed to in writing, software

  distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License. See accompanying LICENSE file.

-->                

<configuration>

<!--rm失联后重新链接的时间-->

<property>

   <name>yarn.resourcemanager.connect.retry-interval.ms</name>

   <value>2000</value>

</property>

<!--开启resource manager HA,默认为false--> 

<property>

   <name>yarn.resourcemanager.ha.enabled</name>

   <value>true</value>

</property>

<!--配置resource manager -->

<property>

  <name>yarn.resourcemanager.ha.rm-ids</name>

  <value>rm1,rm2</value>

</property>

<property>

  <name>ha.zookeeper.quorum</name>

  <value>master:2181,standyMaster:2181,slave1:2181</value>

</property>

 

<!--开启故障自动切换-->

<property>

   <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>

   <value>true</value>

</property>

<property>

  <name>yarn.resourcemanager.hostname.rm1</name>

  <value>master</value>

</property>

                  

<property>

   <name>yarn.resourcemanager.hostname.rm2</name>

   <value>standyMaster</value>

</property>

<!--namenode1上配置rm1,namenode2上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在YARN的另一个机器上一定要修改-->

<property>

  <name>yarn.resourcemanager.ha.id</name>

  <value>rm1</value>

<description>If we want to launch more than one RM in single node, we need this configuration</description>

</property>

<!--开启自动恢复功能-->

<property>

  <name>yarn.resourcemanager.recovery.enabled</name>

  <value>true</value>

</property>

<!--配置与zookeeper的连接地址-->

<property>

  <name>yarn.resourcemanager.zk-state-store.address</name>

  <value>master:2181,standyMaster:2181,slave1:2181</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>master:2181,standyMaster:2181,slave1:2181</value>

</property>

<property>

  <name>yarn.resourcemanager.cluster-id</name>

  <value>gagcluster-yarn</value>

</property>

<!--schelduler失联等待连接时间-->

<property>

  <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>

  <value>5000</value>

</property>

<!--配置rm1-->  

<property>

  <name>yarn.resourcemanager.address.rm1</name>

  <value>master:8132</value>

</property>

<property>

  <name>yarn.resourcemanager.scheduler.address.rm1</name>

  <value>master:8130</value>

</property>

<property>

  <name>yarn.resourcemanager.webapp.address.rm1</name>

  <value>master:8188</value>

</property>

<property>

   <name>yarn.resourcemanager.resource-tracker.address.rm1</name>

   <value>master:8131</value>

</property>

<property>

  <name>yarn.resourcemanager.admin.address.rm1</name>

  <value>master:8033</value>

</property>

<property>

  <name>yarn.resourcemanager.ha.admin.address.rm1</name>

  <value>master:23142</value>

</property>

<!--配置rm2-->

<property>

  <name>yarn.resourcemanager.address.rm2</name>

  <value>standyMaster:8132</value>

</property>

<property>

  <name>yarn.resourcemanager.scheduler.address.rm2</name>

  <value>standyMaster:8130</value>

</property>

<property>

  <name>yarn.resourcemanager.webapp.address.rm2</name>

  <value>standyMaster:8188</value>

</property>

<property>

  <name>yarn.resourcemanager.resource-tracker.address.rm2</name>

  <value>standyMaster:8131</value>

</property>

<property>

  <name>yarn.resourcemanager.admin.address.rm2</name>

  <value>standyMaster:8033</value>

</property>

<property>

  <name>yarn.resourcemanager.ha.admin.address.rm2</name>

  <value>standyMaster:23142</value>

</property>

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>

<property>

  <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

  <value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

  <name>yarn.nodemanager.local-dirs</name>

  <value>/data/hadoop/yarn/local</value>

</property>

<property>

  <name>yarn.nodemanager.log-dirs</name>

  <value>/data/log/hadoop</value>

</property>

<property>

  <name>mapreduce.shuffle.port</name>

  <value>23080</value>

</property>

<!---->

<property>

  <name>yarn.client.failover-proxy-provider</name>

 <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>

</property>

<property>

    <name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>

    <value>/yarn-leader-election</value>

    <description>Optional setting. The default value is /yarn-leader-election</description>

</property>

</configuration>

 

6)vi slaves

slave1

slave2

 

4)   拷贝文件到其他机器

使用scp命令拷贝hadoop文件夹到slave1和slave2机器上面:

scp -r /home/hadoop/hadoop-2.6.0-cdh5.4.0 hadoop@sdardyMaster: /home/hadoop/

 

scp -r /home/hadoop/hadoop-2.6.0-cdh5.4.0 hadoop@slave1: /home/hadoop/

 

scp –r /home/hadoop/hadoop-2.6.0-cdh5.4.0 hadoop@slave2: /home/hadoop/

 

配置stardyMaster, slave1slave2环境变量,跟master环境变量一样

在所有机器上创建配置文件所需目录,不然运行会报错,同时注意权限问题

5)   启动hadoop

Step 1 在某一个namenode节点执行如下命令,创建命名空间
[hadoop@master bin]$ cd $HADOOP_HOME

[hadoop@master]$ ./bin/hdfs zkfc -formatZK



-- Step 5.2 启动JournalNode进程(3台服务器上分别执行)
[hadoop@master bin]$HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode
[hadoop@stardyMaster bin]$HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode

[hadoop@slave1]$HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode


--Step 3格式化Hadoop集群并启动:
--  master上执行:
[hadoop@master bin] $HADOOP_HOME/bin/hdfsnamenode -format mycluster

[hadoop@master bin]$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode

-- 上步执行完后,在 stardyMaster上执行:
[hadoop@stardyMasterbin] $HADOOP_HOME/bin/hdfsnamenode -bootstrapStandby

[hadoop@stardyMaster bin]$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode

master启动:

$HADOOP_HOME/sbin/start-all.sh

-- 
因为是配置的自动故障转移,所以不能手工切换namenodeactivestadby角色。
-- 
可以通过haadmin查看每个Service的角色状态:

--Step 4可以用过kill命令关闭master上的namenode,如何查看是否出现切换

通过web界面查看

6)   查看
jps

32213 JournalNode

32343 NameNode

526 ResourceManager

22412 Jps

7428 QuorumPeerMain

439 DFSZKFailoverController

 

 

http://10.12.0.240:50070http://10.12.0.243:50070 登录Web控制可以查看HDFS集群的状况

 

 

http:// 10.12.0.240:8188(配置文件配置了)可以通过Web控制台查看运行状态

 

 

7配置spark集群

上传spark-1.4.1-bin-2.6.0-cdh5.4.1.tgz到master服务器/home/hadoop目录。使用hadoop用户登入。

7.1解压spark包

tar –xzvf spark-1.4.1-bin-2.6.0-cdh5.4.1.tgz–C/

mv spark-1.4.1-bin-2.6.0-cdh5.4.1spark-1.4.1

7.2配置

cd /home/hadoop/spark-1.4.1/conf

$ mv spark-env.sh.template spark-env.sh

vi spark-env.sh

export JAVA_HOME=/usr/local/java/jdk1.7.0_51

export SCALA_HOME=/usr/local/scala/scala-2.10.4

 

export HADOOP_CONF_DIR==/home/hadoop/CDH5/hadoop-2.6.0-cdh5.4.0/etc/hadoop

export HADOOP_HOME==/home/hadoop/CDH5/hadoop-2.6.0-cdh5.4.0

 

export SPARK_WORKER_MEMORY=24g

export SPARK_WORKER_CORES=6

export SAPRK_WORKER_INSTANCES=1

 

export SPARK_DRIVER_MEMORY=1g

 

export SPARK_EXECUTOR_MEMORY=24g

 

export SPARK_HOME=/home/hadoop/CDH5/spark-1.3.0-bin-cdh-5.4.0

export SPARK_MASTER_IP=10.12.0.93

export SPARK_MASTER_PORT=7077

export SPARK_=spark://${SPARK_MASTER_IP}:{SPARK_MASTER_PORT}

export SPARK_CLASSPATH=$SPARK_CLASSPATH

 

vi slaves

 

slave1

slave2

        

7.3拷贝文件到其他机器

使用scp命令拷贝hadoop文件夹到slave1和slave2机器上面:

scp -r ~/spark-1.4.1  hadoop@slave1:/home/hadoop/CDH5/

 

 

scp -r /home/hadoop/CDH5/spark-1.3.0-bin-cdh-5.4.0  hadoop@slave2: /home/hadoop/CDH5/

 

7.4启动

cd /home/hadoop/CDH5/spark-1.3.0-bin-cdh-5.4.0/

在(10.12.0.240)机器启动命令

sbin/start-all.sh

在(10.12.0.243)机器启动命令

sbin/start-master.sh

7.5查看

jps

[hadoop@master conf]$ jps

4662 Master

3734 NameNode

14457 Jps

4170 ResourceManager

 

http:// 10.12.0.93:8080可以通过Web控制台查看

 

 

运行自动例子

bin/ ./spark-submit --driver-memory 1g--class org.apache.spark.examples.SparkPi --master spark://master,standyMaster:7077/home/hadoop/CDH5/spark-1.3.0-bin-cdh-5.4.0/lib/spark-examples-1.3.0-hadoop2.6.0-cdh5.4.0.jar

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值