运行环境配置(10.79.115.111-114)

 

1、关闭防火墙与selinux

关闭防火墙:

CentOS 7.x默认使用的是firewall作为防火墙。

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

关闭selinux

Redhat应用了SELinux去加强平安,永久封闭的举措为:

修改

重启后查看SELinux状态:执行getenforce命令

 

2、卸载centos7自带openjdk并安装oracle jdk

 rpm -qa | grep java* 查看已安装列表

 rpm -e --nodeps 软件名  卸载此软件及其依赖软件

然后在下载配置oracle jdk,我配置的JAVA_HOME=/opt/jdk1.8。

3、ssh免登陆

   /usr/bin/ssh-keygen -t [rsa | dsa]

   PS:如果直接执行/usr/bin/ssh-keygen ssh-keygen,那么默认采用rsa 生成公钥跟私钥。

这4台服务器依次执行 /usr/bin/ssh-keygen-t,然后将~/.ssh/id_rsa.pub生成的公钥添加到CentOS7-1的~/.ssh/authorized_keys文件,之后通过scp命令将CentOS7-1的authorized_keys文件发送到另外三台服务器。

如:

4、主机映射

cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.79.115.111 CentOS7-1
10.79.115.112 CentOS7-2
10.79.115.113 CentOS7-3
10.79.115.114 CentOS7-4

5、在111-113安装配置zookeeper(基数台)

我将zookeeper装在/opt路径下(cd /opt):

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz -P
mv zookeeper-3.4.6 zookeeper
cd zookeeper
cp conf/zoo_sample.cfg conf/zoo.cfg
#把zookeeper加入到环境变量
"PATH=$PATH:/opt/zookeeper/bin" >> /etc/profile
source /etc/profile 使配置立即生效
Zookeeper集群配置:
注意:搭建zookeeper集群时,一定要先停止已经启动的zookeeper节点。

cat zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper/data
dataLogDir=/var/zookeeper/logs
clientPort=2181
autopurge.snapRetainCount=500
autopurge.purgeInterval=24
server.1=10.79.115.111:2888:3888
server.2=10.79.115.112:2888:3888
server.3=10.79.115.113:2888:3888

#创建相关目录,三台节点都需要

mkdir -p /var/zookeeper/{logs,data}

#其余zookeeper节点安装完成之后,同步配置文件zoo.cfg。

创建ServerID标识

除了修改zoo.cfg配置文件外,zookeeper集群模式下还要配置一个myid文件,这个文件需要放在dataDir(/var/zookeeper/data)目录下。

这个文件里面有一个数据就是A的值(该A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路径中创建myid文件。

#在10.79.115.111服务器上面创建myid文件,并设置值为1,同时与zoo.cfg文件里面的server.1保持一致,如下

echo "1" > /var/zookeeper/data/myid

#在10.79.115.112服务器上面创建myid文件,并设置值为2,同时与zoo.cfg文件里面的server.2保持一致,如下

echo "2" > /var/zookeeper/data/myid

#在10.79.115.113服务器上面创建myid文件,并设置值为3,同时与zoo.cfg文件里面的server.3保持一致,如下

echo "3" > /var/zookeeper/data/myid
到此,相关配置已完成
启动每个服务器上面的zookeeper节点

/opt/zookeeper/bin/zkServer.sh start
PS:Zookeeper一些常用命令:

在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作

  • 1. 启动ZK服务:       sh bin/zkServer.sh start
  • 2. 查看ZK服务状态: sh bin/zkServer.sh status
  • 3. 停止ZK服务:       sh bin/zkServer.sh stop
  • 4. 重启ZK服务:       sh bin/zkServer.sh restart

6、ntp时间同步

10.79.0.60(ntp服务端)已搭好,配置ntp客户端(111-114)

systemctl enable ntpd &&systemctl start ntpd(设ntpd服务开机自启并启动)

编辑/etc/ntp.conf文件,请参考(111-114服务器任意一台的/etc/ntp.conf文件)。

重启ntpd服务  #systemctl restart ntpd

启动后,查看同步情况

# ntpq -p

# ntpstat

因为是内网,一般ntpstat很快就可以同步上。

7、配置文件。

末尾添加

* soft nproc 100240

* hard nproc 100240

* soft nofile 100240

* hard nofile 100240

其中,nofile - 打开文件的最大数目,nproc - 进程的最大数目。

可通过ulimit -n -u命令来查看。(修改完要重新ssh连接服务器才能看到效果)

 

 

 

 

 

安装Hadoop2.7.3+Spark2.10+hbase0.98:

Hadoop(M:master,S:slave,RM:ResourceManager),

在/hadoop/目录下

CentOS7-1(M)

CentOS7-2

CentOS7-3(S)

CentOS7-4(S)

Zookeeper

Zookeeper

Zookeeper

 

NameNode

NameNode

JournalNode

JournalNode

ZKFS

ZKFC

NodeMana..

NodeManager

RM


DataNode

DataNode

JObHistoryS




Hadoop分布式集群配置(按照上图进行配置):

首先配置HADOOP_HOME,在/etc/profile添加:
export HADOOP_HOME=/hadoop/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin
之后source /etc/profile使配置立即生效。

Hadoop的分布式安装过程非常简单,只需要将Hadoop安装包解压到指定的目录就可以了,接下来对Hadoop的主要配置文件进行配置。

将Hadoop安装包解压到/hadoop 目录下:

然后针对/hadoop/hadoop-2.7.3/etc/hadoop目录下几个主要文件进行配置: 
hadoop-env.sh、yarn-env.sh 、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves

1、配置hadoop-env.sh

编辑hadoop-env.sh,找到JAVA_HOME指定JDK的安装配置

$vi hadoop-env.sh
    export JAVA_HOME=/opt/jdk1.8

2、配置yarn-env.sh

编辑yarn-env.sh,找到JAVA_HOME指定JDK的安装配置

 $vi yarn-env.sh

   export JAVA_HOME=/opt/jdk1.8

3、配置core-site.xml

$vi core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<configuration>
指定hdfs的nameservice为cluster -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://cluster</value>
    </property>
指定zookeeper地址-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>CentOS7-1:2181,CentOS7-2:2181,CentOS7-3:2181</value>
    </property>
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>60000</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>20000</value>
    </property>
指定hadoop临时目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/hadoop/tmp</value>
    </property>
</configuration>
fs.defaultFS:指定hdfs的nameservice为ns1
hadoop.tmp.dir:指定hadoop临时目录
ha.zookeeper.quorum:指定zookeeper地址
4、配置hdfs-site.xml
Hadoop中的HDFS配置,主要配置备份方式,及NameNode、DataNode、NameSecondary存储地址。 
$vi hdfs-site.xml<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<configuration>
指定hdfs的nameservice为cluster,需要和core-site.xml中的保持一致 -->
    <property>
        <name>dfs.nameservices</name>
        <value>cluster</value>
    </property>
下面有两个NameNode,分别是nn1,nn2 -->
    <property>
        <name>dfs.ha.namenodes.cluster</name>
        <value>nn1,nn2</value>
    </property>
、nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.cluster.nn1</name>
        <value>CentOS7-1:9000</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.cluster.nn2</name>
        <value>CentOS7-2:9000</value>
    </property>
、nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.cluster.nn1</name>
        <value>CentOS7-1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.cluster.nn2</name>
        <value>CentOS7-2:50070</value>
    </property>
 
    <property>
        <name>dfs.namenode.servicerpc-address.cluster.nn1</name>
        <value>CentOS7-1:53310</value>
    </property>
    <property>
        <name>dfs.namenode.servicerpc-address.cluster.nn2</name>
        <value>CentOS7-2:53310</value>
    </property>
 
指定NameNode的元数据在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://CentOS7-3:8485;CentOS7-4:8485/cluster</value>
    </property>
指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/hadoop/hdfs/journal/data</value>
    </property>
开启NameNode失败自动切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
 
配置失败自动切换实现方式 -->
    <property>
        <name>dfs.client.failover.proxy.provider.cluster</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>
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
 
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.permissions.enable</name>
        <value>false</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
    <property>
        <name>dfs.image.transfer.bandwidthPerSec</name>
        <value>1048576</value>
    </property>
 
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.name.dir</name>
        <value>file:/hadoop/hdfs/data</value>
    </property>
    <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>file:/hadoop/hdfs/namesecondary</value>
    </property>
</configuration>
dfs.nameservices: 指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致
dfs.ha.namenodes.ns1:ns1下面有两个NameNode,分别是nn1,nn2
dfs.namenode.rpc-address.ns1.nn1: nn1的RPC通信地址
dfs.namenode.http-address.ns1.nn1: nn1的http通信地址
dfs.namenode.shared.edits.dir:指定NameNode的元数据在JournalNode上的存放位置
dfs.journalnode.edits.dir : 指定JournalNode在本地磁盘存放数据的位置
dfs.ha.automatic-failover.enabled: true是开启NameNode失败自动切换
dfs.client.failover.proxy.provider.ns1:配置失败自动切换实现方式
dfs.ha.fencing.ssh.private-key-files:使用sshfence隔离机制时需要ssh免登陆

5、配置mapred-site.xml

Hadoop的MapReduce框架配置,配置MapReduce框架名称 
$vi mapred-site.xml<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
<!-- configure historyserver -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>CentOS7-1:10020</value>
</property> 
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>CentOS7-1:19888</value>
</property>
<property>
    <name>mapred.job.reuse.jvm.num.tasks</name>
    <value>-1</value>
</property>
<property>
    <name>mapreduce.reduce.shuffle.parallelcopies</name>
    <value>20</value>
</property>
</configuration>
6、配置yarn-site.xml
$vi yarn-site.xml
<?xml version="1.0"?>
<configuration>
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>CentOS7-1</value>
</property>
</configuration>

7、配置slaves节点列表

对于分布式安装,该文件中需要配置从节点机器名。

$vi slaves

CentOS7-3

CentOS7-4

到此,整个Hadoop伪分布式安装完毕,接下来就可以格式HDFS文件系统,并启动Hadoop系统。(将以上这些配置文件同步到其他所有服务器)




启动集群

1、启动zookeeper集群

2、启动journal node(在CentOS7-3、CentOS7-4)

  ./sbin/hadoop-daemon.sh start journalnode

执行jps命令,可以查看到JournalNode的Java进程pid;

3、格式化CentOS7-1 :HDFS(namenode)第一次要格式化(这里直接复制会有问题,最好手动输入)

  ./bin/hdfs namenode –format

、格式化zk(在CentOS7-1即可)(这里直接输入会有问题,最好手动输入)

./bin/hdfs zkfc –formatZK

格式成功后,在zookeeper中可以看到

[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha

[cluster]

、启动zkfc来监控NN状态(在CentOS7-1,CentOS7-2)

./sbin/hadoop-daemon.sh start zkfc

、启动HDFS(namenode)(在CentOS7-1即可)

    ./sbin/start-dfs.sh

上(在CentOS7-2上执行)

$ hdfs namenode –bootstrapStandby  #启动mhadoop02上的namenode作为standby

./bin/hdfs zkfc –formatZK

$ sbin/hadoop-daemon.sh start namenode #在CentOS7-2启动namenode

 7、启动YARN

在CentOS7-1上执行如下命令

启动YARN(MR)(在CentOS7-1执行)

./sbin/start-yarn.sh

8、CentOS7-1上启动

执行:

 

测试HA

正常启动后CentOS7-1的namenode与CentOS7-2的namenode状态截图如下: 

 

 
此时在CentOS7-1上执行如下命令关闭namenode

$ sbin/hadoop-daemon.sh stop namenode

再次查看CentOS7-2上的namenode,发现自动切换为active了。
此时,高可用Hadoop分布式框架就搭好了。

http://10.79.115.111:19888/   JobHistory

http://10.79.115.111:8088/   All Applications

spark-2.1.0-bin-hadoop2.7(在/opt目录下)安装配置:

CentOS7-1

CentOS7-2

CentOS7-3

CentOS7-4

Master


Worker(s)

Worker(s)

在/etc/profile中加入如下变量:
export SCALA_HOME=/opt/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin
export SPARK_HOME=/opt/spark-2.1.0-bin-hadoop2.7
export PATH="$SPARK_HOME/bin:$PATH"
source /etc/profile
1、首先安装scala-2.11.8 (在/opt目录下)

2、修改配置文件 

vim conf/spark-env.sh

在末尾加上:

export SCALA_HOME=/opt/scala-2.11.8
export JAVA_HOME=/opt/jdk1.8
export SPARK_MASTER_IP=CentOS7-1
export SPARK_WORKER_MEMORY=1g
export HADOOP_CONF_DIR=/hadoop/hadoop-2.7.3/etc/hadoop
vim conf/slaves:
CentOS7-3
CentOS7-4

 

PS:配置文件修改完成后, 将/usr/local/spark文件夹拷贝到其他节点对应的位置, 并配置好环境变量。

3、spark集群启动, 在主节点(CentOS7-1)中执行:

./sbin/start-all.sh

spark启动后, 通过http://10.79.115.111:8080/可以查看spark当前的运行状态。

 hbase-0.98.24-hadoop2(在/opt目录下)集群安装:

http://abloz.com/hbase/book.html(官方中文文档)

CentOS7-1

CentOS7-2

CentOS7-3

CentOS7-4

HMaster

HMaster备份

HRegionServ.

HRegionServer

在/etc/profile中加入如下变量:

export HBASE_HOME=/opt/hbase-0.98.24-hadoop2
export PATH=$HBASE_HOME/bin:$PATH
source /etc/profile

1、配置hbase集群,要修改3个文件(首先zk集群已经安装好了) 

vim hbase-env.sh

export JAVA_HOME=/opt/jdk1.8 
export HBASE_MANAGES_ZK=false //告诉hbase使用外部的zk
vim hbase-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 
    <!-- 指定hbase在HDFS上存储的路径 -->
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://10.79.115.111:9000/hbase</value>
        </property>
        <!-- 指定hbase是分布式的 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <!-- 指定zk的地址,多个用“,”分割 -->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>CentOS7-1:2181,CentOS7-2:2181,CentOS7-3:2181</value>
        </property>
 
</configuration>
vim regionservers
CentOS7-3
CentOS7-4

之后拷贝hbase到其他服务器

2、启动所有的hbase

在主节点上(CentOS7-1)运行:./start-hbase.sh

3、 通过浏览器访问hbase管理页面

http://10.79.115.111:60010

4、为保证集群的可靠性,要启动多个HMaster

在CentOS7-2运行:./start-hbase.sh