大数据集群搭建

大数据集群搭建

本文档将搭建以下集群

  • hadoop 集群
  • zookeeper 集群
  • hbase 集群
  • spark 集群
  • kafka 集群

一、准备

1.1 软件版本

  • Ubuntu 18.04
  • JDK 1.8 (jdk-8u151-linux-x64.tar.gz)
  • Hadoop 2.7.7 (hadoop-2.7.7.tar.gz)
  • HBase 1.4.13 (hbase-1.4.13-bin.tar.gz)
  • ZooKeeper 3.5.6 (apache-zookeeper-3.5.6-bin.tar.gz)
  • Spark 2.4.5 (spark-2.4.5-bin-hadoop2.7.tgz)
  • Kafka 2.12-2.3.1 (kafka_2.12-2.3.1.tgz)
  • Kafka Eagle (kafka-eagle-bin-1.4.8.tar.gz)

1.2 网络规划

规划搭建3台机器组成集群模式,IP与计算机名如下:

192.168.100.100 master
192.168.100.110 slaver1
192.168.100.120 slaver2

1.3 软件包拷贝

可将上述软件包拷贝到master机器的/opt目录下

1.4 绑定IP和修改计算机名

1.4.1 修改/etc/hosts,添加IP绑定

root@master:~# cat /etc/hosts
192.168.100.100 master
192.168.100.110 slaver1
192.168.100.120 slaver2

1.4.2 修改/etc/hostname,为绑定计算机名。(计算机名和上面hosts绑定名必须一致

root@master:~# cat /etc/hostname 
master
root@slaver1:~# cat /etc/hostname 
slaver1
root@slaver2:~# cat /etc/hostname 
slaver2

修改完hostname之后好像需要重启才能生效

1.5 SSH 设置

1.5.1 设置ssh可以通过root用户登陆

设置root用户密码

sudo passwd

设置允许ssh以root用户登陆

sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

重启ssh服务,使配置生效

sudo service ssh restart

1.5.2 SSH无密码登陆 (在master主机进行如下操作)

切换到root用户(注:之后所有操作均以root用户执行)

sudo su

用rsa生成密钥,一路回车。

ssh-keygen -t rsa

把公钥复制一份,并改名为authorized_keys

cd /root/.ssh
cp id_rsa.pub authorized_keys

将authorized_keys文件拷贝到slaver1,slaver2上

scp ./authorized_keys root@slaver1:/root/.ssh
scp ./authorized_keys root@slaver2:/root/.ssh

1.6 JDK安装(三台机器可同步进行)

解压

cd /opt
tar xavf ./jdk-8u151-linux-x64.tar.gz

建立软连接

cd /usr/local
ln -s /opt/jdk1.8.0_151 jdk

将JDK环境变量配置到/etc/profile中(注:如果不好使也可以配置到 /root/.bashrc中)

export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin

检查JDK是否配置好

source /etc/profile
javac -version

提示 javac 1.8.0_151代表JDK安装完成

二、Hadoop集群搭建

2.1 Hadoop安装

解压 ,并在安装目录下创建tmp、dfs、dfs/name、dfs/node、dfs/data

cd /opt
tar xavf ./hadoop-2.7.7.tar.gz
cd hadoop-2.7.7
mkdir tmp
mkdir dfs
mkdir dfs/name
mkdir dfs/node
mkdir dfs/data

2.2 Hadoop配置

以下操作都在hadoop-2.7.7/etc/hadoop下进行

2.2.1 hadoop-env.sh

修改JAVA_HOME配置项为JDK安装目录

export JAVA_HOME=/usr/local/jdk

2.2.2 core-site.xml

fs.default.name : 这个属性用来指定namenode的hdfs协议的文件系统通信地址,可以指定一个主机+端口

hadoop.tmp.dir : hadoop集群在工作的时候存储的一些临时文件的目录

 
   
    hadoop.tmp.dir  
    /opt/hadoop-2.7.7/tmp  
    Abase for other temporaty directories. 
    
   
    fs.default.name  
    hdfs://master:9000 
    
   
    io.file.buffer.size  
    131702 
   

2.2.3 hdfs-site.xml

dfs.name.dir:namenode数据的存放地点。也就是namenode元数据存放的地方,记录了hdfs系统中文件的元数据。

dfs.data.dir: datanode数据的存放地点。也就是block块存放的目录了。

dfs.replication:hdfs的副本数设置。也就是上传一个文件,其分割为block块后,每个block的冗余副本个数,默认配置是3。

dfs.namenode.secondary.http-address:secondarynamenode 运行节点的信息,和 namenode 不同节点

 
   
    dfs.name.dir  
    /opt/hadoop-2.7.7/dfs/name  
    Path on the local filesystem where the NameNode stores the namespace and transactions log persistently. 
    
   
    dfs.data.dir  
    /opt/hadoop-2.7.7/dfs/data  
    Comma separated list of on the local filesystem where the NameNode stores the namespace and transactions log persistently. 
    
   
    dfs.replication  
    2  
    replication num. 
    
   
    dfs.permissions  
    false  
    need not permissions. 
    
   
    dfs.namenode.sencondary.http-address  
    master:9001  
    第二namenode地址. 
    
   
    dfs.namenode.datanode.registration.ip-hostname-check  
    false  
    check. 
   

2.2.4 mapred-site.xml

cp mapred-site.xml.template mapred-site.xml

mapreduce.framework.name:指定mr框架为yarn方式

 
   
    mapreduce.framework.name  
    yarn 
    
     
    mapreduce.map.memory.mb    
    1536 
    
     
    mapreduce.map.java.opts    
    -Xmx1024M 
    
     
    mapreduce.reduce.memory.mb    
    3072 
    
     
    mapreduce.reduce.java.opts    
    -Xmx2560M 
   

2.2.5 yarn-site.xml

yarn.resourcemanager.scheduler.class:设置调度算法,默认FIFO

yarn.log-aggregation-enable:如果开启了日志聚合,那么容器日志将被复制到HDFS,并删除本地日志。而后这些日志可以在集群任何节点上用yarn logs命令查看 yarn logs -applicationId

yarn.nodemanager.remote-app-log-dir:指定日志存在hdfs上的位置

 
   
   
    yarn.resourcemanager.scheduler.class  
   org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler 
    
    
   
    yarn.nodemanager.aux-services  
    mapreduce_shuffle 
    
   
    yarn.nodemanager.aux-services.mapreduce.shuffle.class  
    org.apache.hadoop.mapred.ShuffleHandler 
  
  
   
    yarn.resourcemanager.address  
    master:8032 
  
  
   
    yarn.resourcemanager.scheduler.address  
    master:8030 
  
  
   
    yarn.resourcemanager.resource-tracker.address  
    master:8035 
  
    
   
    yarn.resourcemanager.admin.address  
    master:8033 
  
  
   
    yarn.resourcemanager.webapp.address  
    master:8088 
    
    
   
    yarn.log-aggregation-enable  
    true 
    
    
   
    yarn.nodemanager.remote-app-log-dir  
    /tmp/logs 
    
    
   
    yarn.log-aggregation.retain-seconds  
    3600 
   

2.2.6 slaves

集群中机器的主机名列表,会在下边每台机器上启动一个NodeManager

master
slaver1
slaver2

2.2.7 将配置好的hadoop分发到slaver1,slaver2上

cd /opt
scp -r hadoop-2.7.7 root@slaver1:/opt
scp -r hadoop-2.7.7 root@slaver2:/opt

2.3 Hadoop启动

2.3.1 格式化一个新的文件系统

注意:第一次搭建的时候格式化一次就好!!不要重复format

cd /opt/hadoop-2.7.7/bin
./hadoop namenode -format

2.3.2 启动HDFS

cd /opt/hadoop-2.7.7/sbin
./start-dfs.sh
# stop-dfs.sh

通过jps检查是否启动成功,看看master上是否有NameNode, slaver节点上是否有DataNode

root@master:/opt/hadoop-2.7.7/sbin# jps
6306 SecondaryNameNode
6050 NameNode
6596 Jps

root@slaver1:~# jps
5307 Jps
4987 DataNode

root@slaver2:~# jps
3156 Jps
3003 DataNode

集群启动不成功,可能的原因是datanode的clusterID 和 namenode的clusterID 不匹配。解决的办法将之前创建的tmp、dfs目录下内容全清掉,然后再重新启动一遍。

2.3.3启动YARN

./start-yarn.sh
# stop-yarn.sh

通过jps检查是否启动成功,看看master上是否有ResourceManager,slaver上是否有NodeManager

root@master:/opt/hadoop-2.7.7/sbin# jps
6672 ResourceManager
6306 SecondaryNameNode
6050 NameNode
6934 Jps

root@slaver1:~# jps
5605 Jps
5416 NodeManager
4987 DataNode

root@slaver2:~# jps
3296 NodeManager
3480 Jps
3003 DataNode

可通过网页http://master:8088查看Hadoop任务状态

三、ZooKeeper集群搭建

3.1 ZooKeeper安装

解压,并创建data目录

cd /opt
tar xavf ./apache-zookeeper-3.5.6-bin.tar.gz
cd apache-zookeeper-3.5.6-bin
mkdir data

在data目录下创建myid文件,在文件第一行写上对应的 Server id。这个id必须在集群环境中服务器标识中是唯一的,且大小在1~255之间。

cd data
echo "1" > myid

3.2 ZooKeeper配置

3.2.1 zoo.cfg

cp zoo_sample.cfg zoo.cfg

修改如下:

dataDir:存放内存数据结构的snapshot,便于快速恢复,默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能。

server.id=IP/Host : port1 : port2
id:用来配置ZK集群中的各节点,并建议id的值和myid保持一致。
IP/Host: 服务器的 IP 或者是与 IP 地址做了映射的主机名
port1:Leader和Follower或Observer交换数据使用
port2:用于Leader选举。

# 注意:需要每个节点都配策划嗯自己的地址
clientPortAddress=master

dataDir=/opt/apache-zookeeper-3.5.6-bin/data
server.1=master:2888:3888
server.2=slaver1:2888:3888
server.3=slaver2:2888:3888                         

3.2.2 将配置好的zookeeper分发到slaver1,slaver2

cd /opt
scp -r apache-zookeeper-3.5.6-bin root@slaver1:/opt
scp -r apache-zookeeper-3.5.6-bin root@slaver2:/opt

分发完成之后,需要ssh到各slaver节点上,修改对应myid中的值。设置slaver1中myid为2,设置slaver2中myid为3, 修改对应的zoo.cfg

3.3 ZooKeeper启动

分别在master,slaver1,slaver2执行如下命令

cd /opt/apache-zookeeper-3.5.6-bin/bin
./zkServer.sh start
# ./zkServer.sh stop

各节点启动后,通过jps检查启动状态,会出现QuorumPeerMain进程

root@master:/opt/apache-zookeeper-3.5.6-bin/bin# jps
6672 ResourceManager
6306 SecondaryNameNode
6050 NameNode
7434 QuorumPeerMain
7470 Jps

通过 zkServer.sh status查看各节点的运行模式

root@master:/opt/apache-zookeeper-3.5.6-bin/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.5.6-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: master.
Mode: follower

root@slaver1:~# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: slaver1.
Mode: leader

root@slaver2:~# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: slaver2.
Mode: follower

3.4 ZooKeeper集群启动脚本

为避免跑到每台机器上去启动,可在master节点/opt/apache-zookeeper-3.5.6-bin/bin目录下添加脚本:

  1. 一键启动脚本:zk-cluster-start.sh
brokers="master slaver1 slaver2"
#brokers="slaver1"
ZK_HOME="/opt/apache-zookeeper-3.5.6-bin"
ZK_NAME="zookeeper"

echo "INFO: Begin to start Zookeeper cluster ..."

# By default disable strict host key checking
if [ "$ZK_SSH_OPTS" = "" ]; then
  ZK_SSH_OPTS="-o StrictHostKeyChecking=no"
fi

for broker in $brokers
do
  echo "INFO:Start ${ZK_NAME} on ${broker} ..."
  ssh $ZK_SSH_OPTS ${broker} "${ZK_HOME}/bin/zkServer.sh start"
  if [[ $? -eq 0 ]]; then
    echo "INFO: start ${ZK_NAME} on ${broker}  is on !"
  fi
done
echo "INFO:Zookeeper cluster started !"
  1. 一键关闭脚本 zk-cluster-stop.sh
brokers="master slaver1 slaver2"
#brokers="slaver1"
ZK_HOME="/opt/apache-zookeeper-3.5.6-bin"
ZK_NAME="zookeeper"

echo "INFO: Begin to stop Zookeeper cluster ..."

# By default disable strict host key checking
if [ "$ZK_SSH_OPTS" = "" ]; then
  ZK_SSH_OPTS="-o StrictHostKeyChecking=no"
fi

for broker in $brokers
do
  echo "INFO:Shut down ${ZK_NAME} on ${broker} ..."
  ssh $ZK_SSH_OPTS ${broker} "${ZK_HOME}/bin/zkServer.sh stop"
  if [[ $? -eq 0 ]]; then
    echo "INFO :Shut down ${ZK_NAME} on ${broker}  is down !"
  fi
done
echo "INFO:Zookeeper cluster shutdown completed !"

四、HBase集群搭建

4.1 HBase安装

cd /opt
tar xavf ./hbase-1.4.13-bin.tar.gz

4.2 HBase配置

以下配置文件在/opt/hbase-1.4.13/conf目录下

4.2.1 hbase-env.sh

修改JAVA_HOME配置项为JDK安装目录,不使用hbase自带的zookeeper

export JAVA_HOME=/usr/local/jdk
export HBASE_MANAGES_ZK=false

4.2.2 hbase-site.xml

hbase.rootdir: hbase存放数据目录

hbase.zookerper.quorum: zookooper 服务启动的节点,只能为奇数个


    
        
                hbase.rootdir
                hdfs://master:9000/hbase
        
        
        
                hbase.cluster.distributed
                true
        
        
        
                hbase.zookeeper.quorum
                master:2181,slaver1:2181,slaver2:2181
        

4.2.3 regionservers

master
slaver1
slaver2

4.2.4 backup-masters

用于配置高可用HMaster节点

slaver1

4.2.5 将配置好的hbase分发到slaver1,slaver2

cd /opt
scp -r hbase-1.4.13 root@slaver1:/opt
scp -r hbase-1.4.13 root@slaver2:/opt

4.3 HBase启动

注意:启动hbase之前,要首先启动hadoop和zookeeper

cd /opt/hbase-1.4.13/bin
./start-hbase.sh
# stop-hbase.sh

通过jps检查启动状态,master会出现HMaster进程, slaver会出现HRegionServer进程

root@master:/opt/hbase-1.4.13/bin# jps
6672 ResourceManager
6306 SecondaryNameNode
7762 HMaster
6050 NameNode
7891 Jps
7434 QuorumPeerMain

root@slaver1:~# jps
6161 HRegionServer
6290 Jps
5959 QuorumPeerMain
5416 NodeManager
4987 DataNode

root@slaver2:~# jps
3776 QuorumPeerMain
3296 NodeManager
4489 Jps
3003 DataNode
4364 HRegionServer

启动问题:

  1. HMaster: Failed to become active master, 解决办法:把hbase.rootdir对应的目录删掉即可, e.g. hadoop fs -rm -r /hbase

五、Spark集群搭建

5.1 Spark安装

cd /opt
tar xavf ./spark-2.4.5-bin-hadoop2.7.tgz

5.2 Spark配置

以下配置在spark-2.4.5-bin-hadoop2.7/conf目录下

5.2.1 spark-env.sh

复制spark-env.sh.template成spark-env.sh, 添加如下信息:

export JAVA_HOME=/usr/local/jdk
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
export SPARK_HOME=/opt/spark-2.4.5-bin-hadoop2.7
# 目的是使能运行yarn-client/yarn-cluster模式
export SPARK_HOME=/opt/hadoop-2.7.7
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

5.2.2 slaves

复制slaves.template成slaves, 做如下修改

master
slaver1
slaver2

5.2.3 将配置好的spark分发到slaver1,slaver2

cd /opt
scp -r spark-2.4.5-bin-hadoop2.7 root@slaver1:/opt
scp -r spark-2.4.5-bin-hadoop2.7 root@slaver2:/opt

5.3 Spark启动

cd /opt/spark-2.4.5-bin-hadoop2.7/sbin
./start-all.sh
# stop-all.sh

通过jps查看状态,发现多了一个Worker进程

root@master:/opt/spark-2.4.5-bin-hadoop2.7/sbin# jps
1680 NameNode
1937 SecondaryNameNode
2097 QuorumPeerMain
10258 HMaster
12004 Jps
11879 Worker
11720 Master

也可以通过登陆http://master:8080 查看状态

5.4 Spark提交任务示例

5.4.1 yarn-client模式

spark-submit \
--class com.jdsy.BdatApp \
--master yarn \
--deploy-mode client \
--num-executors 3 \
--executor-cores 3 \
--executor-memory 4G \
--conf spark.default.parallelism=25 \
--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.5 \
./bdat1.0-1.0-SNAPSHOT-jar-with-dependencies.jar

5.4.2 yarn-cluster模式

#!/bin/bash

if [ $# -ne 1 ];then
    echo "usage $0 configFile"
    exit
fi

spark-submit \
--class com.jdsy.BdatApp \
--master yarn \
--deploy-mode client \
--num-executors 3 \
--executor-cores 6 \
--executor-memory 6G \
--conf spark.default.parallelism=50 \
--conf spark.sql.shuffle.partitions=3 \
--files ./mysql.json \
--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.5 \
./bdat1.0-1.0-SNAPSHOT-jar-with-dependencies.jar \
$1

说明:

  1. 上边$1表示要从外边把一个文件传到spark程序中
  2. 可通过 yarn logs -applicationId 来查看自己打的日志信息以及崩溃信息等
  3. 通过yarn application -kill 来杀掉这个程序

六、Kafka集群搭建

6.1 Kafka安装

cd /opt
tar xavf ./kafka_2.12-2.3.1.tgz

6.2 Kafka配置

以下配置在kafka_2.12-2.3.1/config目录下

6.2.1 server.properties

# 指定代理id,borker.id可以任意指定,前提是保证集群内每台机器的broker.id唯一,第二台机器设置为2...以此类推
broker.id=0

# 提供给客户端响应的端口, master节点指定为master:9092, slaver1节点指定slaver1:9092, 依次类推
listeners=PLAINTEXT://master:9092

# kafka数据的存放目录,而非Kafka的日志目录
log.dirs=/opt/kafka_2.12-2.3.1/kafka-log

# 设置zookeeper集群地址
zookeeper.connect=master:2181,slaver1:2181,slaver2:2181

6.2.2 将配置好的kafka分发到slaver1,slaver2

cd /opt
scp -r kafka_2.12-2.3.1 root@slaver1:/opt
scp -r kafka_2.12-2.3.1 root@slaver2:/opt

注意:

  1. 需要修改slaver节点上broker.id, 比如slaver1为1, slaver2为2
  2. 修改对应的listeners

6.3 Kafka启动

分别在master,slaver1,slaver2上执行如下命令

cd /opt/kafka_2.12-2.3.1/
./bin/kafka-server-start.sh -daemon ./config/server.properties
# kafka-server-stop.sh

通过jps查看状态, 会发现多了Kafka进程

root@master:/opt/kafka_2.12-2.3.1# jps
1680 NameNode
1937 SecondaryNameNode
2097 QuorumPeerMain
10258 HMaster
11879 Worker
11720 Master
12618 Jps
12590 Kafka

root@slaver1:/opt/kafka_2.12-2.3.1# jps
6833 Jps
5414 HRegionServer
1575 DataNode
1751 QuorumPeerMain
6809 Kafka
6077 Worker

root@slaver2:/opt/kafka_2.12-2.3.1# jps
1456 DataNode
4768 HRegionServer
1626 QuorumPeerMain
6156 Kafka
5438 Worker
6175 Jps

6.4 Kafka常用操作

6.4.1 列出所有topic信息

kafka-topics.sh --describe --zookeeper master:2181,slaver1:2181,slaver2:2181

6.4.2 创建topic

kafka-topics.sh --create \
    --zookeeper master:2181,slaver1:2181,slaver2:2181 \
    --topic topicName \
    --partitions 分区数 \
    --replication-factor 备份数

6.5 Kafka Eagle安装

6.5.1 解压

cd /opt
tar xavf kafka-eagle-bin-1.4.8.tar.gz

6.5.2 修改配置

kafka-eagle-web-1.4.8/conf/system-config.properties

#如果只有一个集群的话,就写一个cluster1就行了
kafka.eagle.zk.cluster.alias=cluster1
cluster1.zk.list=master:2181,slaver1:2181,slaver2:2181

#如果kafka开启了sasl认证,需要在这个地方配置sasl认证文件
kafka.eagle.sasl.enable=false

#下面两项是配置数据库的,默认使用sqlite,如果量大,建议使用mysql,这里我使用的是sqlit
#如果想使用mysql建议在文末查看官方文档
kafka.eagle.driver=org.sqlite.JDBC
kafka.eagle.url=jdbc:sqlite:/opt/kafka-eagle-web-1.4.8/db/ke.db
kafka.eagle.username=root
kafka.eagle.password=111111

6.5.3 启动kafka-eagle

cd /opt/kafka-eagle-web-1.4.8/bin
./ke.sh start
#./ke.sh stop

启动之后可通过 http://localcast:8048/ke登录查看信息,默认用户名密码 admin/123456

你可能感兴趣的:(大数据集群搭建)