Hadoop2.7.3+spark2.1.0+hbase0.98分布式集群部署

运行环境配置(10.79.115.111-114)

1、关闭防火墙与selinux

关闭防火墙:

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

systemctl stop firewalld.service #停止firewall

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

关闭selinux

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

修改 /etc/selinux/config 文件中的 SELINUX=”” 为 disabled ,然后重启服务器。

重启后查看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文件发送到另外三台服务器。

如: scp  ~/.ssh/authorized_keys CentOS7-2:/~/.ssh/

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、配置 /etc/security/limits.conf 文件。

末尾添加

* 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-1M

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.shyarn-env.sh core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xmlslaves

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>

    <!-- 指定hdfsnameservicecluster -->

    <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>

    <!-- ipc通讯超时时间 -->

    <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:指定hdfsnameservicens1

hadoop.tmp.dir:指定hadoop临时目录

ha.zookeeper.quorum:指定zookeeper地址

4、配置hdfs-site.xml

Hadoop中的HDFS配置,主要配置备份方式,及NameNodeDataNodeNameSecondary存储地址。 
$vi hdfs-site.xml

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

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

 

<configuration>

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

    <property>

        <name>dfs.nameservices</name>

        <value>cluster</value>

    </property>

    <!-- cluster下面有两个NameNode,分别是nn1nn2 -->

    <property>

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

        <value>nn1,nn2</value>

    </property>

    <!-- nn1nn2RPC通信地址 -->

    <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>

    <!-- nn1nn2http通信地址 -->

    <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: 指定hdfsnameservicens1,需要和core-site.xml中的保持一致

dfs.ha.namenodes.ns1ns1下面有两个NameNode,分别是nn1nn2

dfs.namenode.rpc-address.ns1.nn1nn1RPC通信地址

dfs.namenode.http-address.ns1.nn1nn1http通信地址

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

HadoopMapReduce框架配置,配置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-3CentOS7-4

  ./sbin/hadoop-daemon.sh start journalnode

  执行jps命令,可以查看到JournalNodeJava进程pid

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

  ./bin/hdfs namenode –format

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

./bin/hdfs zkfc –formatZK

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

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

[cluster]

 5、启动zkfc来监控NN状态(CentOS7-1CentOS7-2

./sbin/hadoop-daemon.sh start zkfc

 6、启动HDFSnamenode)(在CentOS7-1即可)

    ./sbin/start-dfs.sh

 #把NameNode的数据同步到CentOS7-2上(在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上执行如下命令

  启动YARNMR)(在CentOS7-1执行

./sbin/start-yarn.sh

8CentOS7-1上启动 JobHistoryServer

执行: ./sbin/mr-jobhistory-daemon.sh start historyserver

测试HA

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

 

 
此时在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

原文地址:https://www.cnblogs.com/zhangmingcheng/p/6439895.html