Spark2.4+Hadoop2.7+Zookeeper3.4+HBase2.1集群部署

一、操作系统及软件

操作系统:Cent OS 7.2
应用软件:
Spark 2.4.0
Hadoop 2.7.7
JDK 1.8
Scala 2.11.12
本次部署使用三个节点:

机器名IP地址
Master192.168.8.185
Slave1192.168.8.186
Slave2192.168.8.187

下载后上传到/opt路径下。为方便操作,本次部署使用root账户,以/opt文件夹为部署地址。上传文件后,用tar命令解压缩,然后mv命令修改文件夹名称,便于后续操作。

tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz
mv spark-2.4.0-bin-hadoop2.7 spark2.4
    
tar -zxvf hadoop-2.7.7.tar.gz
mv hadoop-2.7.7 hadoop2.7
    
tar -zxvf jdk-8u201-linux-x64.tar.gz
mv jdk-8u201-linux-x64 jdk1.8

tar -zxvf zookeeper-3.4.13.tar.gz
mv zookeeper-3.4.13 zookeeper3.4

tar -zxvf hbase-2.1.2-bin.tar.gz
mv hbase-2.1.2-bin hbase2.1
    
rpm -ivh scala-2.11.12.rpm		#直接安装scala

最终效果是在/opt下有五个文件夹:spark2.4,hadoop2.7,jdk1.8,zookeeper3.4,hbase2.1

二、配置Linux环境

2.1 修改hosts文件

vi /etc/hosts	#三台设备都需要修改

#增加如下内容
#Master、Slave1、Slave2是三台机器的机器名
192.168.8.185 Master
192.168.8.186 Slave1
192.168.8.187 slave2

source /etc/hosts	#使修改的文件生效

可以使用如下命令修改主机名,立刻生效,并且重启有效

 hostnamectl set-hostname [newname]

2.2 关闭防火墙

systemctl stop firewalld.service //关闭防火墙服务
systemctl disable firewalld.service //禁止防火墙服务开机启动
vi /etc/sysconfig/selinux 	#将SELINUX属性修改为disabled,关闭SELINUX
source /etc/sysconfig/selinux

2.3 Master到Slave免密码登录

Master操作

ssh-keygen -t rsa -P ''      #生成密码对id_rsa和id_rsa.pub,默认位置"/root/.ssh"
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys    #把id_rsa.pub追加到授权的key
vi /etc/ssh/sshd_config     #修改ssh配置文件

#去掉下面内容的注释
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径

service sshd restart		#重启ssh服务
ssh localhost             #验证无密码登录本机是否成功 
scp /root/.ssh/id_rsa.pub root@Slave1:/root/   #把公钥复制到slave设备
scp /root/.ssh/id_rsa.pub root@Slave2:/root/

Slave操作
两个slave分别执行下面操作

mkdir /root/.ssh		#此文件夹可能已经存在
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys     #追加Master的公钥到授权文件
vi /etc/ssh/sshd_config     #修改ssh配置文件

#去掉下面内容的注释
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径

service sshd restart		#重启ssh服务。重启后可以从master测试ssh访问slave
rm /root/id_rsa.pub			#删除文件

2.4 Slave到Master免密码登录

Slave操作
两个slave分别执行下面操作

  ssh-keygen -t rsa -P ''
  cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
  scp /root/.ssh/id_rsa.pub root@Master:/root/

Master操作

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

2.5 配置时间同步服务

Master操作

yum install ntp		#安装ntp服务

设置向192.168.8.0/24的机器提供时间服务。修改 /etc/ntp.conf,加入下面内容

restrict 192.168.8.0 mask 255.255.255.0 nomodify notrap

restrict管控权限:
nomodify - 用户端不能更改ntp服务器的时间参数
noquery - 用户端不能使用ntpq,ntpc等命令来查询ntp服务器
notrap - 不提供trap远端登陆

systemctl start ntpd.service	#启动ntp服务
systemctl enable ntpd.service	#设置ntp服务开机启动
netstat -unlnp					#检查ntp端口,看到123端口说明端口开启

Slave操作
修改/etc/ntp.conf,加入下面内容

server 192.168.8.185

systemctl start ntpd.service	#启动ntp服务
systemctl enable ntpd.service	#设置ntp服务开机启动

2.6 修改/etc/profile

vi /etc/profile	    #三台设备都需要修改

#增加如下内容
export JAVA_HOME=/opt/jdk1.8
export SCALA_HOME=/usr/share/scala
export SPARK_HOME=/opt/spark2.4
export ZK_HOME=/opt/zookeeper3.4
export HBASE_HOME=/opt/hbase2.1
export HADOOP_HOME=/opt/hadoop2.7
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_ROOT_LOGGER=INFO,console
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS=“-Djava.library.path=$HADOOP_HOME/lib”
export PATH=$JAVA_HOME/bin:$SCALA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$ZK_HOME/bin:$HBASE_HOME/bin:$PATH

source /etc/profile	   #使修改的文件生效

三、配置集群

3.1 Hadoop集群

  1. 修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8
  1. 修改$HADOOP_HOME/etc/hadoop/slaves

#去掉localhost ,增加下面内容
Slave1
Slave2

  1. 修改$HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://Master:9000</value>
      </property>
      <property>
         <name>io.file.buffer.size</name>
         <value>131072</value>
     </property>
     <property>
          <name>hadoop.tmp.dir</name>
          <value>/opt/hadoop2.7/tmp</value>
     </property>
</configuration>
  1. 修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml
     <configuration>
        <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>Master:50090</value>
        </property>
        <property>
          <name>dfs.replication</name>
          <value>2</value>
        </property>
        <property>
          <name>dfs.namenode.name.dir</name>
          <value>file:/opt/hadoop2.7/hdfs/name</value>
        </property>
        <property>
          <name>dfs.datanode.data.dir</name>
          <value>file:/opt/hadoop2.7/hdfs/data</value>
        </property>
    </configuration>
  1. 修改$HADOOP_HOME/etc/hadoop/mapred-site.xml
 cp mapred-site.xml.template mapred-site.xml
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
          <name>mapreduce.jobhistory.address</name>
          <value>Master:10020</value>
  </property>
  <property>
          <name>mapreduce.jobhistory.address</name>
          <value>Master:19888</value>
  </property>
</configuration>
  1. 修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
 <configuration>
     <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
     </property>
     <property>
         <name>yarn.resourcemanager.address</name>
         <value>Master:8032</value>
     </property>
     <property>
         <name>yarn.resourcemanager.scheduler.address</name>
         <value>Master:8030</value>
     </property>
     <property>
         <name>yarn.resourcemanager.resource-tracker.address</name>
         <value>Master:8031</value>
     </property>
     <property>
         <name>yarn.resourcemanager.admin.address</name>
         <value>Master:8033</value>
     </property>
     <property>
         <name>yarn.resourcemanager.webapp.address</name>
         <value>Master:8088</value>
     </property>
</configuration>

在Slave1和Slave2上做同样的修改,或者直接将hadoop2.7文件夹拷贝过去

3.2 Spark集群

  1. 修改$SPARK_HOME/conf/spark-env.sh
 cp spark-env.sh.template spark-env.sh

#增加以下内容
export JAVA_HOME=/opt/jdk1.8
export SCALA_HOME=/usr/share/scala
export HADOOP_HOME=/opt/hadoop2.7
export HADOOP_CONF_DIR=/opt/hadoop2.7/etc/hadoop
export SPARK_MASTER_IP=192.168.8.185
export SPARK_MASTER_HOST=192.168.8.185
export SPARK_LOCAL_IP=192.168.8.185 #此处是本设备地址,三台机器不一样
export SPARK_WORKER_MEMORY=1g
export SPARK_WORKER_CORES=2
export SPARK_HOME=/opt/spark2.4
export SPARK_DIST_CLASSPATH=$(/opt/hadoop2.7/bin/hadoop classpath)

  1. 修改$SPARK_HOME/conf/slaves
 cp slaves.template slaves

#删除localhost,增加以下内容
Slave1
Slave2

在Slave1和Slave2上做同样的修改,或者直接将spark2.4文件夹拷贝过去(注意修改不一样的内容)

3.3 Zookeepr集群

  1. 创建文件夹和文件
 mkdir  /opt/zookeeper3.4/data		
 mkdir  /opt/zookeeper3.4/dataLog
 cd /opt/zookeeper3.4/data		
 touch myid				#创建文件
 vi myid				#文件内容:Master、Slave1、Slave2分别设置为123
  1. 修改$ZK_HOME/conf/zoo.cfg,加入如下内容

dataDir=/opt/zookeeper3.4/data
dataLogDir=/opt/zookeeper3.4/dataLog
server.1=Master:2888:3888
server.2=Slave1:2888:3888
server.3=Slave2:2888:3888

注意这里的.1.2.3要和myid文件中的数字对应上

3.4 HBase集群

  1. 修改$HBASE_HOME/conf/hbase-env.sh,加入如下内容

export JAVA_HOME=/opt/jdk1.8
export HADOOP_HOME=/opt/hadoop2.7
export HBASE_HOME=/opt/hbase2.1
export HBASE_CLASSPATH=/opt/hadoop2.7/etc/hadoop
export HBASE_PID_DIR=/opt/hbase2.1/pids
export HBASE_MANAGES_ZK=false

  1. 修改$HBASE_HOME/conf/regionservers,加入如下内容

#删除localhost,增加以下内容
Slave1
Slave2

  1. 修改$HBASE_HOME/conf/hbase-site.xml,加入如下内容
<configuration>
	<property>
 		<name>hbase.rootdir</name>
 		<value>hdfs://Master:9000/hbase</value>
	</property>
 	<!-- hbase端口 -->
	<property>
 		<name>hbase.zookeeper.property.clientPort</name>
 		<value>2181</value>
	</property>
	<!-- 超时时间 -->
	<property>
 		<name>zookeeper.session.timeout</name>
 		<value>120000</value>
	</property>
	<!--防止服务器时间不同步出错 -->
	<property>
		<name>hbase.master.maxclockskew</name>
		<value>150000</value>
	</property>
	<!-- 集群主机配置 -->
	<property>
 		<name>hbase.zookeeper.quorum</name>
 		<value>Master,Slave1,Slave2</value>
	</property>
	<!--   路径存放 -->
	<property>
 		<name>hbase.tmp.dir</name>
 		<value>/root/hbase/tmp</value>
	</property>
	<!-- true表示分布式 -->
	<property>
 		<name>hbase.cluster.distributed</name>
 		<value>true</value>
	</property>
  	<!-- 指定master -->
  	<property>
    	<name>hbase.master</name>
    	<value>Master:60000</value>
  </property>
</configuration>

四、启动和验证集群

在master节点上启动或者停止服务

hadoop namenode -format					#hadoop格式化操作
/opt/hadoop2.7/sbin/start-all.sh		#启动hadoop
/opt/spark2.4/sbin/start-all.sh			#启动spark
zkServer.sh start						#启动zookeeper服务,需要在每个节点上执行
zkServer.sh status						#查看运行状态
start-hbase.sh							#启动hbase

在master上用jps查看状态,内容如下

Master #spark
ResourceManager #hadoop
NameNode #hadoop
SecondaryNameNode #hadoop
QuorumPeerMain #zookeeper
HMaster #HBase

在slave上用jps查看状态,内容如下

DataNode
Worker
QuorumPeerMain
NodeManager
HRegionServer

访问地址:

服务地址
Hadoophttp://192.168.8.185:8088/
Sparkhttp://192.168.8.185:8080/
spark-shellhttp://192.168.8.185:4040/
HDFShttp://192.168.8.185:50070/
HBasehttp://192.168.8.185:16010/

异常处理:
1、Hadoop的Datanode启动后消失:原因是hadoop格式化后再次进行格式化,master的clusterId更新,但是更新不会自动同步到slave,导致不一致。按照master的clusterId修改slave的clusterId,保持一致即可。
2、HBase启动后消失,日志报错没有到主机的路由。最后发现竟然是重启之后,防火墙又启动了。关闭防火墙hbase正常
3、提交job: spark-submit --master yarn --deploy-mode client --class com.HBaseShow /opt/What.jar
4、Spark打包的时候,jar只带本身的包
5、虚拟内存溢出问题,在yarn-site.xml增加下面内容

yarn.nodemanager.vmem-pmem-ratio
2.5

6、遇到jar包找不到的时候,可以做下面两件事:
1)拷贝 hbaes2.1/lib下的所有文件到hadoop2.7/share/hadoop/common/lib
2)拷贝 hbase2.1/lib/client-facing-thirdparty/htrace-core4-4.2.0-incubating.jar 到 spark2.4/jars

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值