大数据中日志分析——1、集群搭建
Easul Lv6

大数据日志分析相关文章

集群环境搭建常用工具及工具特征

常用工具有hadoop, spark, kafka, flume,简单介绍如下

hadoop——大数据的入门
spark——用于实时计算kafka消息
kafka——分布式消息队列系统,具有高吞吐量,低延迟的特点,可以在线和离线处理
flume——日志采集,并传送数据到kafka

windows安装集群

如需使用Linux的docker进行集群部署,参考这篇文章

系统下载

折叠代码块BASH 复制代码
1
2
# 在这里下载的CentOS-7-x86_64-Minimal-2009.iso
# https://xiazai.ba/#/1/main/centos/7.9.2009/isos/x86_64

虚拟机安装注意

  • 虚拟机每次重启都自动分配IP?
    编辑=》虚拟机网络编辑器=》VM8选择NAT模式=》去掉勾选使用本地DHCP
    子网IPNET设置里的网关IP可以改一下(如子网IP192.168.1.0网关IP192.168.1.2),从而可以使用自定义IP
    虚拟机标签右键设置=》进入虚拟机设置=》网络适配器=》自定义特定虚拟网络=》选择VMnet8

  • 如何克隆多个虚拟机?
    虚拟机标签右键管理=》克隆=》创建完整克隆=》虚拟机名称写slave1=》然后保存克隆

环境配置

以下将创建master, slave1, slave2三个服务结点

  1. 在普通用户状态下实现root用户操作,避免频繁切换root

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    su root
    # u是用户,g是用户组,o是其他,a是所有
    # +和-用于添加,删除权限,=是直接赋予权限
    chmod u+w /etc/sudoers
    vi /etc/sudoers
    # 可以找到与这个命令相同的示例下添加
    # 含义为给easul用户添加root所有命令,且使用的时候不需要输入密码
    # 这种配置可用于centos7,其他版本系统可能不同。
    easul ALL=(ALL) NOPASSWD: ALL
  2. 关闭SELinux(安全策略),否则可能会有问题(centos7下)

    折叠代码块BASH 复制代码
    1
    2
    3
    sudo vi /etc/sysconfig/selinux
    # 注释原有配置,然后添加如下设置
    SELINUX=disabled
  3. ip设置(centos7下)

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    # 进入网络相关的配置文件目录
    cd /etc/sysconfig/network-scripts/
    # 创建一个网卡,名称可通过ifconfig查看,名字是冒号前边的名字,如eth0
    ifconfig
    # 然后创建网卡的配置文件,或者修改默认创建的网卡文件
    sudo vi ifcfg-eth0
    # 然后添加下边的内容

    IPADDR=192.168.1.10
    # MAC地址需要根据ifconfig中信息更改
    # 也可以从ip addr获取
    HWADDR="00:0C:29:51:AA:12"
    BOOTPROTO="static"
    # 网关和上边虚拟机的网关IP一致
    GATEWAY=192.168.1.2
    TYPE=Ethernet
    PREFIX0=24
    DNS1=223.5.5.5
    DEFROUTE=yes
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    IPV4_FAILURE_FATAL=no
    IPV6_FAILURE_FATAL=no
    # 这里是网卡的名字,需要根据ifconfig中信息更改
    # 也可以从nmcli con show获取
    NAME="eth0"
    # UUID通过下边的命令获取
    # nmcli con show
    UUID=d2a014bb-21b4-4367-9f35-45894d494a00
    # 修改一下ONBOOT为yes
    ONBOOT=yes

    # 配置成功后,重启网卡
    sudo systemctl restart network
    # 然后查看一下是否配置成功
    ifconfig
    # 测试一下网络是否连通
    ping www.baidu.com
  4. 防火墙的关闭

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    # 查看防火墙的状态
    sudo systemctl status firewalld
    # 如果是active,就关闭防火墙(开机后还是会自动重启)
    sudo systemctl stop firewalld
    # 禁止防火墙开机启动
    sudo systemdtl disable firewalld
  5. 检查SSH是否开启
    hadoop的主从结点(master,slave)进程监听和启动是通过SSH命令

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    # 查看ssh服务是否开启
    sudo systemctl status sshd
    # 没启动则开启
    sudo systemctl start sshd
    # 设置ssh开机自启动
    sudo systemctl enable sshd
  6. 设置Hosts(用于指定主从结点名与IP的对应关系)

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    sudo vi /etc/hosts

    192.168.1.10 master
    192.168.1.20 slave1
    192.168.1.30 slave2
  7. 主机名配置

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    # 在centos7的修改
    sudo /etc/hostname
    # 修改为master即可,从机就改成slave1,slave2
    master
  8. jdk8安装

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    mkdir ~/software && cd ~/software
    wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
    tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
    rm -rf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
    # 在.bashrc或.bash_profile(centos7有,deepin可能没有)配置
    echo "
    export JAVA_HOME=/home/easul/software/java-se-8u41-ri
    PATH=\$JAVA_HOME/bin:\$PATH
    export PATH
    # 配置jar包路径
    export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
    " >> ~/.bash_profile

    # 重新加载配置文件
    source ~/.bash_profile
  9. 从master克隆两个slave结点之后的操作
    在虚拟机标签右击=》管理=》克隆,需要选择需完整克隆

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 修改网卡IP
    # 修改mac地址,通过ip addr获取
    # 修改UUID,通过nmcli con show获取
    # 会生成wired字样的网卡,选另一个网卡即可
    sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
    # 更改主机名称
    sudo vi /etc/hostname
    # 改完之后,重启网卡
    sudo systemctl restart network
  10. 免密登录配置(需要每个结点单独设置)

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 生成公私钥
    ssh-keygen -t -rsa
    # 创建共享密钥
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    # 修改共享密钥的权限
    chmod 600 ~/.ssh/authorized_keys
    # 使用scp在服务器间共享密钥
    # 格式为:用户名@服务器:目录
    scp ~/.ssh/authorized_keys easul@slave1:~/.ssh
    # 步骤为在master生成共享密钥,追加到authorized_keys,然后复制到slave1
    # 然后slave1生成共享密钥,追加到authorized_keys,然后复制到slave2
    # 然后slave2生成共享密钥,追加到authorized_keys,然后覆盖到slave1,master
    # 从而实现每个结点都有相同的共享密钥,从而免密登录
    ssh slave1
  11. 配置ntp服务(network time protocol)
    用于时间的同步,集群里每个结点的时间要一致

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # 安装ntpdate
    sudo yum -y install ntp ntpdate
    # 流程是master从网络同步时间,slave1和slave2从master同步时间
    # 查看master的ntp.conf
    more /etc/ntp.conf
    # 可以看到四个server字样的地址,这个是默认同步地址
    # master不用改,直接从网络同步,一会修改slave1和slave2即可

    # 查看master的ntp服务是否启动
    sudo systemctl status ntpd
    # 没有启动则启动ntp服务
    sudo systemctl start ntpd
    # 设置ntp服务开机自启动
    sudo systemctl enable ntpd
    # 修改两个从机的ntp.conf
    sudo vi /etc/ntp.conf
    # 修改为下边的状态
    # server 0.centos.pool.ntp.org iburst
    # server 1.centos.pool.ntp.org iburst
    # server 2.centos.pool.ntp.org iburst
    # server 3.centos.pool.ntp.org iburst
    server master iburst

    # 然后启动从机的服务
    sudo systemctl start ntpd
    # 主机和从机查看同步的情况
    watch ntpq -p
    # 可通过date查看日期
    date

hadoop集群搭建

有问题可以查看hadoop常用操作

折叠代码块BASH 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
# 在master结点操作
cd ~/software
wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz
# -C用于指定解压目录
tar -zxvf hadoop-2.7.4.tar.gz -C .
rm -rf hadoop-2.7.4.tar.gz
# 配置环境变量
echo "
HADOOP_HOME=/home/easul/software/hadoop-2.7.4
PATH=\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin:\$PATH
export PATH
" >> ~/.bash_profile
source ~/.bash_profile
  • 配置hadoop-env.sh文件

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    vi ~/software/hadoop-2.7.4/etc/hadoop/hadoop-env.sh

    # export JAVA_HOME=${JAVA_HOME}
    export JAVA_HOME=/home/easul/software/java-se-8u41-ri
  • 配置yarn-env.sh文件

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    vi ~/software/hadoop-2.7.4/etc/hadoop/yarn-env.sh

    # export JAVA_HOME=/home/y/libexec/jdk1.6.0/
    export JAVA_HOME=/home/easul/software/java-se-8u41-ri/
  • 配置slaves,在slaves加上slave的节点,删除默认的hosts

    折叠代码块BASH 复制代码
    1
    2
    3
    echo "slave1
    slave2
    " > ~/software/hadoop-2.7.4/etc/hadoop/slaves
  • 配置core-site.xml

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    vi ~/software/hadoop-2.7.4/etc/hadoop/core-site.xml

    <configuration>
    <property>
    <!--执行NameNode文件系统-->
    <name>fs.defaultFS</name>
    <value>hdfs://master:8020</value>
    </property>
    <property>
    <!--临时目录,注意值有三根斜线-->
    <name>hadoop.tmp.dir</name>
    <value>file:///home/easul/software/hadoop-data/hadoop/tmp</value>
    </property>
    </configuration>
  • 配置hdfs-site.xml

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    vi ~/software/hadoop-2.7.4/etc/hadoop/hdfs-site.xml

    <configuration>
    <property>
    <!--指定NameNode存储meta和editlog的目录,注意值只有一根斜线-->
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/easul/software/hadoop-data/dfs/name</value>
    </property>
    <property>
    <!--指定DataNode存储blocks的目录,注意值只有一根斜线-->
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/easul/software/hadoop-data/dfs/data</value>
    </property>
    <!--下边的配置已经默认有了-->
    <property>
    <!--指定数据副本数目-->
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <property>
    <!--防止不允许远程读写hdfs-->
    <name>dfs.permissions</name>
    <value>true</value>
    </property>
    <property>
    <!--指定Secondary NameNode地址-->
    <name>dfs.namenode.secondary.http-address</name>
    <value>master:9001</value>
    </property>
    </configuration>
  • 创建所需目录

    折叠代码块BASH 复制代码
    1
    2
    3
    mkdir -p ~/software/hadoop-data/dfs/data
    mkdir -p ~/software/hadoop-data/dfs/name
    mkdir -p ~/software/hadoop-data/hadoop/tmp
  • 配置mapred-site.xml。因为只有模板文件,所以复制出来一个进行修改

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    cp ~/software/hadoop-2.7.4/etc/hadoop/mapred-site.xml.template  ~/software/hadoop-2.7.4/etc/hadoop/mapred-site.xml
    # MapReduce相关配置
    vi ~/software/hadoop-2.7.4/etc/hadoop/mapred-site.xml

    <configuration>
    <property>
    <!--指定MapReduce运行在yarn上-->
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <!--下边的配置已经默认有了-->
    <property>
    <!--指定MR作业执行历史地址-->
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
    </property>
    <property>
    <!--指定MR作业历史web应用地址-->
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value>
    </property>
    </configuration>
  • yarn-site.xml都是默认值,不需要配置,实际生产可能需要配置。是资源调度相关的

    折叠代码块BASH 复制代码
    1
    vi ~/software/hadoop-2.7.4/etc/hadoop/yarn-site.xml
    折叠代码块YAML 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    yarn.resourcemanager.address:
    value: ${yarn.resourcemanager.hostname}:8033
    annotation: 管理员可以通过该地址向RM发送管理命令等
    yarn.resourcemanager.scheduler.address:
    value: ${yarn.resourcemanager.hostname}:8030
    annotation: RM对AM暴露的地址,AM通过地址想RM申请资源,释放资源等
    mapreduce.jobhistory.webapp.address:
    value: ${yarn.resourcemanager.hostname}:8088
    annotation: RM对外暴露的web http 地址,用户可通过该地址在浏览器中查看集群信息
    yarn.resourcemanager.webapp.https.address:
    value: ${yarn.resourcemanager.hostname}:8090
    annotation: web https 地址
    yarn.resourcemanager.resource-tracker.address:
    value: ${yarn.resourcemanager.hostname}:8031
    annotation: RM对NM暴露地址,NM通过该地址向RM汇报心跳,领取任务等
    yarn.resourcemanager.resource-tracker.client.thread-count:
    value: 50
    annotation: 处理来自NM的RPC请求的handler数
    yarn.resourcemanager.admin.address:
    value: ${yarn.resourcemanager.hostname}:8033
    annotation: 管理员可以通过该地址向RM发送管理命令等
    yarn.resourcemanager.scheduler.class:
    value: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
    annotation: RM对AM暴露的地址,AM通过地址想RM申请资源,释放资源调度器主类
    yarn.resourcemanager.scheduler.client.thread-count:
    value: 50
    annotation: 处理来自AM的RPC请求的handler数
    yarn.scheduler.minimum-allocation-mb:
    value: 1024
    annotation: 可申请的最少内存资源,以MB为单位
    yarn.scheduler.maximum-allocation-mb:
    value: 8192
    annotation: 可申请的最大内存资源,以MB为单位
    yarn.scheduler.minimum-allocation-vcores:
    value: 1
    annotation: 可申请的最小虚拟CPU个数
    yarn.scheduler.maximum-allocation-vcores:
    value: 32
    annotation: 可申请的最大虚拟CPU个数
    yarn.nodemanager.local-dirs:
    value: ${hadoop.tmp.dir}/nm-local-dir
    annotation: 中间结果存放位置,可配置多目录
    yarn.log-aggregation-enable:
    value: FALSE
    annotation: 是否启用日志聚合
    yarn.nodemanager.remote-app-log-dir:
    value: /tmp/logs
    annotation: 日志聚合目录
    yarn.nodemanager.resource.memory-mb:
    value: 8192
    annotation: NM总的可用物理内存,以MB为单位。一旦设置,不可动态修改
    yarn.nodemanager.resource.cpu-vcores:
    value: 8
    annotation: 可分配的CPU个数
    yarn.nodemanager.aux-services:
    value: 默认未指定服务
    annotation: NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序
  • hadoop的复制,格式化及启动

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 将.bash_profile,hadoop和hadoop的数据文件夹都复制到slave
    scp ~/.bash_profile easul@slave1:~/
    scp ~/.bash_profile easul@slave2:~/
    scp -r ~/software/hadoop-* easul@slave1:~/software
    scp -r ~/software/hadoop-* easul@slave2:~/software
    # 在两个slave刷新.bash_profile
    source ~/.bash_profile
    # 格式化hadoop的namenode
    hadoop namenode -format
    # hadoop的启动,在master启动即可
    ~/software/hadoop-2.7.4/sbin/start-dfs.sh
    # 验证是否启动成功,用jps命令
    # jps是JavaVirtualMachine Process Status Tool,java虚拟机进程状态工具
    # 启动后master有NameNode,SecondaryNameNode,slave有DataNode
    jps
    ~/software/hadoop-2.7.4/sbin/start-yarn.sh
    # 启动后master多了ResourceManager,slave多了NodeManager
    jps
    # 查看yarn状态,master的IP来查看
    # http://192.168.3.10:8088/
    # 查看集群状态,master的IP来查看
    # http://192.168.3.10:50070/

spark集群搭建

spark中文手册
环境中需要先安装scala,再安装spark安装

  • scala安装

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 在master结点操作
    cd ~/software
    # https://www.scala-lang.org/download/2.12.15.html
    wget https://downloads.lightbend.com/scala/2.12.15/scala-2.12.15.tgz
    tar -zxvf scala-2.12.15.tgz
    rm -rf scala-2.12.15.tgz
    # 配置环境变量
    echo "
    SCALA_HOME=/home/easul/software/scala-2.12.15
    PATH=\$SCALA_HOME/bin:\$PATH
    export PATH
    " >> ~/.bash_profile
    source ~/.bash_profile
    # 复制scala和配置文件到slave结点
    scp ~/.bash_profile easul@slave1:~/
    scp ~/.bash_profile easul@slave2:~/
    scp -r ~/software/scala-* easul@slave1:~/software
    scp -r ~/software/scala-* easul@slave2:~/software
    # 刷新slave的配置文件
    source ~/.bash_profile
  • spark安装

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    # 在master结点操作
    cd ~/software
    # 加速链接
    wget https://archive.apache.org/dist/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz
    tar -zxvf spark-2.4.2-bin-hadoop2.7.tgz
    rm -rf spark-2.4.2-bin-hadoop2.7.tgz
  • spark-env.sh的配置

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    cp ~/software/spark-2.4.2-bin-hadoop2.7/conf/spark-env.sh.template ~/software/spark-2.4.2-bin-hadoop2.7/conf/spark-env.sh
    vi ~/software/spark-2.4.2-bin-hadoop2.7/conf/spark-env.sh

    # 添加如下配置,放到Copy it下边
    JAVA_HOME=/home/easul/software/java-se-8u41-ri
    SCALA_HOME=/home/easul/software/scala-2.12.15
    SPARK_MASTER_IP=192.168.3.10
    HADOOP_CONF_DIR=/home/easul/software/hadoop-2.7.4/etc/hadoop
    # shuffled以及RDD的数据存放目录,用于写中间数据,需要再创建一下
    SPARK_LOCAL_DIRS=/home/easul/software/hadoop-data/spark_data
    # worker端进程工作目录,包括worker的日志以及临时存储空间,默认在spark根目录的work下
    SPARK_WORKER_DIRS=/home/easul/software/hadoop-data/spark_data/spark_works

    # 创建spark的中间数据文件夹
    mkdir -p ~/software/hadoop-data/spark_data
    mkdir -p ~/software/hadoop-data/spark_data/spark_works

    其他配置项

    折叠代码块YAML 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SPARK_MASTER_IP: master实例绑定的IP地址,例如,绑定到一个公网IP
    SPARK_MASTER_PORT: mater实例绑定的端口(默认7077)
    SPARK_MASTER_WEBUI_PORT: masterwebUI的端口(默认8080)
    SPARK_MASTER_OPTS: master专用配置属性,格式如”-Dx=y”(默认空),可能的选项请参考下面的列表。
    SPARK_LOCAL_DIRS: Spark的本地工作目录,包括:映射输出的临时文件和RDD保存到磁盘上的临时数据。这个目录需要快速访问,最好设成本地磁盘上的目录。也可以通过使用逗号分隔列表,将其设成多个磁盘上的不同路径。
    SPARK_WORKER_CORES: 本机上Spark应用可以使用的CPUcore上限(默认所有CPUcore)
    SPARK_WORKER_MEMORY: 本机上Spark应用可以使用的内存上限,如:1000m,2g(默认为本机所有内存减去1GB);注意每个应用单独使用的内存大小要用spark.executor.memory属性配置的。
    SPARK_WORKER_PORT: Sparkworker绑定的端口(默认随机)
    SPARK_WORKER_WEBUI_PORT: workerwebUI端口(默认8081)
    SPARK_WORKER_INSTANCES: 每个slave机器上启动的worker实例个数(默认:1)。如果你的slave机器非常强劲,可以把这个值设为大于1;相应的,你需要设置SPARK_WORKER_CORES参数来显式地限制每个worker实例使用的CPU个数,否则每个worker实例都会使用所有的CPU
    SPARK_WORKER_DIR: Sparkworker的工作目录,包括worker的日志以及临时存储空间(默认:${SPARK_HOME}/work)
    SPARK_WORKER_OPTS: worker的专用配置属性,格式为:”-Dx=y”,可能的选项请参考下面的列表。
    SPARK_DAEMON_MEMORY: Sparkmaster和worker后台进程所使用的内存(默认:1g)
    SPARK_DAEMON_JAVA_OPTS: Sparkmaster和workers后台进程所使用的JVM选项,格式为:”-Dx=y”(默认空)
    SPARK_PUBLIC_DNS: Sparkmaster和workers使用的公共DNS(默认空)
  • slaves的配置(存储slave的名称)

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    cp ~/software/spark-2.4.2-bin-hadoop2.7/conf/slaves.template ~/software/spark-2.4.2-bin-hadoop2.7/conf/slaves
    vi ~/software/spark-2.4.2-bin-hadoop2.7/conf/slaves

    # 删掉localhost
    master
    slave1
    slave2
  • spark-defaults.conf(默认配置文件)

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    cp ~/software/spark-2.4.2-bin-hadoop2.7/conf/spark-defaults.conf.template ~/software/spark-2.4.2-bin-hadoop2.7/conf/spark-defaults.conf
    vi ~/software/spark-2.4.2-bin-hadoop2.7/conf/spark-defaults.conf

    # 指定集群地址
    spark.master spark://master:7077
    # 指定spark序列化工具,处理RDD数据量大时,可以将程序的类序列化,从而提升性能,二进制流会更小
    spark.serializer org.apache.spark.serializer.KryoSerializer
    # 开启spark日志文件
    spark.eventLog.enabled true
    spark.eventLog.dir file:///home/easul/software/hadoop-data/spark_data/history/event-log
    spark.history.fs.logDirectory file:///home/easul/software/hadoop-data/spark_data/history/spark-events
    # 开启日志压缩
    spark.eventLog.compress true

    mkdir -p ~/software/hadoop-data/spark_data/history/event-log
    mkdir -p ~/software/hadoop-data/spark_data/history/spark-events

    其他配置项可以参考如下

    折叠代码块YAML 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    spark.app.name:
    default-value: (none)
    annotation: 应用程序的名称,会在日志和webUI显示
    spark.driver.cores:
    default-value: 1
    annotation: driver程序占用的CPU核数,只在cluster模式下有效。
    spark.driver.maxResultSize:
    default-value: 1g
    annotation: 对Spark每个action结果集大小的限制,最少是1M,若设为0则不限制大小。若Job结果超过限制则会异常退出,若结果集限制过大也可能造成OOM问题
    spark.driver.memory:
    default-value: 1g
    annotation: driver进程可用的内存。注意:不能在代码中配置,因为此时driver已经启动,可以通过–driver-memory命令行参数或者配置文件进行配置。
    spark.executor.memory:
    default-value: 1g
    annotation: 每个 executor 可用的内存数量 (e.g. 2g, 8g).
    spark.extraListeners:
    default-value: (none)
    annotation: 一系列实现SparkListener的类,spark监听总线会创建这些类的实例。
    spark.local.dir:
    default-value: /tmp
    annotation: 应用程序的名称,会在日志和webUI显示
    spark.logConf:
    default-value: false
    annotation: 将SparkConf的有效配置作为INFO进行记录
    spark.master:
    default-value: (none)
    annotation: 集群master节点
    spark.driver.cores:
    default-value: (none)
    annotation: 用于存储mpp输出文件和RDD缓存文件, 常配置在SSD等存储设备上, 可以通过逗号分隔指定多个目录。注意,在 Spark 1.0 后续版本,会被 SPARK_LOCAL_DIRS(Standalone, Mesos) or LOCAL_DIRS (YARN) 环境变量覆盖 .
  • spark环境变量配置及启动

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # 配置环境变量
    echo "
    SPARK_HOME=/home/easul/software/spark-2.4.2-bin-hadoop2.7
    PATH=\$SPARK_HOME/bin:\$SPARK_HOME/sbin:\$PATH
    export PATH
    " >> ~/.bash_profile
    source ~/.bash_profile

    # 分发spark和配置文件到slave结点
    scp ~/.bash_profile easul@slave1:~/
    scp ~/.bash_profile easul@slave2:~/
    scp -r ~/software/spark-* easul@slave1:~/software
    scp -r ~/software/spark-* easul@slave2:~/software
    scp -r ~/software/hadoop-data/spark_data easul@slave1:~/software/hadoop-data
    scp -r ~/software/hadoop-data/spark_data easul@slave2:~/software/hadoop-data
    # 刷新slave的配置文件
    source ~/.bash_profile

    # 在master启动spark
    # 启动master
    ~/software/spark-2.4.2-bin-hadoop2.7/sbin/start-master.sh
    # 启动slave
    ~/software/spark-2.4.2-bin-hadoop2.7/sbin/start-slaves.sh
    # Master在jps中有Worker即启动成功
    jps
    # web界面访问
    # http://192.168.3.10:8080

kafka集群搭建

kafka是一个分布式消息队列系统,设计为发布与订阅的系统, 相关概念如下

折叠代码块YAML 复制代码
1
2
3
4
5
6
broker: 消息的服务器,
生产者: 生产消息,消息会传到消息主题(topic)
消费者: 消费topic下的消息
topic: 一组消息的归纳
partition: 将topic分成小块,便于并发吞吐,叫做消息的分区
offset: 偏移量

上边组件的信息都存到zookeeper,zookeeper也可以协调组件之间的工作

  • zookeeper的安装,配置,启动

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    # 先在master结点
    cd ~/software
    wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
    tar -zxvf zookeeper-3.4.6.tar.gz
    rm -rf zookeeper-3.4.6.tar.gz
    cp ~/software/zookeeper-3.4.6/conf/zoo_sample.cfg ~/software/zookeeper-3.4.6/conf/zoo.cfg
    vi ~/software/zookeeper-3.4.6/conf/zoo.cfg

    # 数据的存储路径配置
    # dataDir=/tmp/zookeeper
    dataDir=/home/easul/software/hadoop-data/zk_data
    # zookeeper服务器的配置,1, 2, 3分别对应的是master,slave1,slave2的myid
    # 配置的解释为:server.服务器ID=服务器IP地址:集群内的机器通讯使用的端口:选举leader使用的端口
    # 为client提供的端口为2181,集群默认通讯端口为2881,选举leader默认端口为3881
    server.1=master:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888

    # 创建zookeeper的数据文件夹
    mkdir -p ~/software/hadoop-data/zk_data
    # 创建myid,当作这个集群结点的唯一标识
    echo "1" > ~/software/hadoop-data/zk_data/myid
    # 配置master的环境变量
    echo "
    ZOOKEEPER_HOME=/home/easul/software/zookeeper-3.4.6
    PATH=\$ZOOKEEPER_HOME/bin:\$PATH
    export PATH
    " >> ~/.bash_profile
    source ~/.bash_profile
    # 分发环境变量,zookeeper和数据文件夹到slave结点
    scp ~/.bash_profile easul@slave1:~/
    scp ~/.bash_profile easul@slave2:~/
    scp -r ~/software/zookeeper-* easul@slave1:~/software
    scp -r ~/software/zookeeper-* easul@slave2:~/software
    scp -r ~/software/hadoop-data/zk_data easul@slave1:~/software/hadoop-data
    scp -r ~/software/hadoop-data/zk_data easul@slave2:~/software/hadoop-data
    # 配置slave结点的myid
    echo "2" > ~/software/hadoop-data/zk_data/myid
    echo "3" > ~/software/hadoop-data/zk_data/myid
    # 刷新slave的配置文件
    source ~/.bash_profile
    # 在每一个结点启动zookeeper
    zkServer.sh start
    # zkServer.sh stop: 停止zookeeper
    # zkServer.sh status: 查看zookeeper是leader还是follower
    # jps有了QuorumPeerMain即启动成功
    jps
  • kafka的安装,配置及运行

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    # 先在master结点
    cd ~/software
    wget https://archive.apache.org/dist/kafka/0.10.1.0/kafka_2.11-0.10.1.0.tgz
    tar -zxvf kafka_2.11-0.10.1.0.tgz
    rm -rf kafka_2.11-0.10.1.0.tgz
    vi ~/software/kafka_2.11-0.10.1.0/config/server.properties

    # 配置如下,需要一个一个找来配置
    broker.id=0
    # 日志文件夹
    # log.dirs=/tmp/kafka-logs
    log.dirs=/home/easul/software/hadoop-data/kafka-logs
    # zookeeper集群配置
    # 指定kafka连接的zookeeper的地址
    # zookeeper.connect=localhost:2181
    zookeeper.connect=master:2181,slave1:2181,slave2:2181

    # 创建kafka的数据文件夹
    mkdir -p ~/software/hadoop-data/kafka-logs
    # 环境变量配置
    echo "
    KAFKA_HOME=/home/easul/software/kafka_2.11-0.10.1.0
    PATH=\$KAFKA_HOME/bin:\$PATH
    export PATH
    " >> ~/.bash_profile
    source ~/.bash_profile
    # 分发环境变量,kafka和数据文件夹到slave结点
    scp ~/.bash_profile easul@slave1:~/
    scp ~/.bash_profile easul@slave2:~/
    scp -r ~/software/kafka* easul@slave1:~/software
    scp -r ~/software/kafka* easul@slave2:~/software
    scp -r ~/software/hadoop-data/kafka-logs easul@slave1:~/software/hadoop-data
    scp -r ~/software/hadoop-data/kafka-logs easul@slave2:~/software/hadoop-data
    # 刷新slave的配置文件
    source ~/.bash_profile
    # 修改slave的broker.id,slave1改成1,salve2改成2
    vi ~/software/kafka_2.11-0.10.1.0/config/server.properties

    broker.id=1

    # 在每个结点启动kafka
    # 启动kafka之前,zookeeper需要先启动,因为kafka的组件需要注册到zookeeper
    # 加上 -daemon 表示启动守护进程
    kafka-server-start.sh -daemon /home/easul/software/kafka_2.11-0.10.1.0/config/server.properties
    # 新打开一个master窗口,jps有了kafka即启动成功
    jps
  • kafka的常用操作

    折叠代码块BASH 复制代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    # 在刚刚的master新窗口操作
    # 创建kafka的一个topic,备份数是3个,分区数是3个,topic名称为test
    # --zookeeper 用于指定链接的zookeeper服务器
    # --list 显示当前的topic有哪些
    # --create 创建topic
    # --delete 删除topic
    # --replication-factor 设置备份数
    # --partitions 设置分区数
    # --topic 指定topic的名称
    kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --replication-factor 1 --partitions 3 --topic test
    # 向topic生产消息,回车之后输入几行字符串
    # kafka写入topic的端口是9092
    kafka-console-producer.sh --broker-list master:9092, slave1:9092, slave2:9092 --topic test

    a
    b
    c
    d
    e

    # 再打开一个master窗口看一下消息生产的是否成功,有提示内容即创建消息成功
    # test:2:2
    # test:1:1
    # test:0:2
    # 创建了三个分区,所以有0,1,2三个分区,创建了5条消息,消息被分配到了不同分区
    kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list master:9092, slave1:9092, slave2:9092 --topic test2 --time -1
    # 查看topic,输出了test
    kafka-topics.sh --list --zookeeper master:2181,slave1:2181,slave2:2181
    # 消费刚刚生产的消息
    # --zookeeper 指定消费的服务器,是一个老的API,新的要用--bootstrap-server
    # --topic 指定消费的topic
    # --from-beginning 从开始消费
    kafka-console-consumer.sh --bootstrap-server master:9092,slave1:9092,slave2:9092 --topic test --from-beginning

flume与kafka整合

  • 一个agent是一个flume的部署单元,本质是一个java的应用
  • agent的sources组件用于生产和接收数据,channels组件用于做数据缓冲和传输,sinks组件用于将数据传送到下一个agent或目的地
  • agent组件命名:agent名称.agent组件类型=组件名称1 组件名称2
  • agent参数配置:agent名称.agent组建类型.组件名称.配置参数=参数值
折叠代码块BASH 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 在master结点
cd ~/software
wget http://archive.apache.org/dist/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz
tar -zxvf apache-flume-1.7.0-bin.tar.gz
rm -rf apache-flume-1.7.0-bin.tar.gz

# 环境变量配置
echo "
FLUME_HOME=/home/easul/software/apache-flume-1.7.0-bin
PATH=\$FLUME_HOME/bin:\$PATH
export PATH
" >> ~/.bash_profile
source ~/.bash_profile

# 进行flume的配置,使用新创建的配置文件
vi ~/software/apache-flume-1.7.0-bin/conf/test.properties

# 填入下边的内容即可
# 组件的命名,agent可随便写一个代替,如a1
agent.sources=s1
agent.channels=c1
agent.sinks=k1
# 组件的参数配置
# 设置组件类型,用于监听一个目录下所有的文件。直接写 TAILDIR 也可以
# Exec source: 适用于监控一个实时追加的文件,但不能保证数据不丢失;
# Spooldir Source: 能够保证数据不丢失,且能够实现断点续传,但延迟较高,不能实时监控;
# Taildir Source: 既能够实现断点续传,又可以保证数据不丢失,还能够进行实时监控。
agent.sources.s1.type=org.apache.flume.source.taildir.TaildirSource
# 指向的channel
agent.sources.s1.channels=c1
# 监听文件的offset(数据偏移量),自动生成
agent.sources.s1.positionFile=/home/easul/software/apache-flume-1.7.0-bin/test/taildir_position.json
# 给文件定义一个组
agent.sources.s1.filegroups=f1
# 指定监听文件的路径及格式
agent.sources.s1.filegroups.f1=/home/easul/software/hadoop-data/testlog/.*.log
# 设置一批处理多少事件(即数据),一个事件由数据的主题和数据的报头组成
agent.sources.s1.batchSize=4000
# 关闭文件头
agent.sources.s1.fileHeader = flase
# 配置拦截器
agent.sources.s1.interceptors = i1
agent.sources.s1.interceptors.i1.type = timestamp

# 设置是基于内存还是基于文件缓冲,基于文件安全性更高,内存断电就没有了。并且数据量过多,可以先缓存到文件
agent.channels.c1.type=file
# 设置缓冲文件的检查点
agent.channels.c1.checkpointDir=/home/easul/software/apache-flume-1.7.0-bin/test/checkpoint
# 设置缓冲文件的数据目录
agent.channels.c1.dataDirs=/home/easul/software/hadoop-data/test/data
agent.channels.c1.keep-alive=6

# 指向的channel
agent.sinks.k1.channel=c1
# 日志传到kafka处理,所以类型为KafkaSink
agent.sinks.k1.type=org.apache.flume.sink.kafka.KafkaSink
# 设置传到kafka的topic
agent.sinks.k1.kafka.topic=test
# 指定kafka服务集群的地址,flume1.6用这个,1.7用brokerList
# agent.sinks.k1.kafka.bootstrap.servers=master:9092,slave1:9092,slave2:9092
agent.sinks.k1.brokerList=master:9092,slave1:9092,slave2:9092
# 批处理事件数量
agent.sinks.k1.kafka.flumeBatchSize=1000
# 设置生产者的一些参数
agent.sinks.k1.kafka.producer.acks=1
agent.sinks.k1.kafka.producer.linger.ms=1
agent.sinks.k1.kafka.producer.compression.type=snappy

# 创建所需路径
mkdir -p ~/software/apache-flume-1.7.0-bin/test
mkdir -p ~/software/hadoop-data/testlog
mkdir -p ~/software/hadoop-data/test/data

# agent的启动,需要先启动各个结点的zookeeper和kafka
# 然后开一个master窗口,进行topic消费的监听
kafka-console-consumer.sh --bootstrap-server master:9092,slave1:9092,slave2:9092 --topic test --from-beginning
# 再开一个master窗口,启动agent
# --conf-file,-f,指定配置文件
# --name,-n agent的名称
# 如果报Failed loading positionFile: /home/easul/software/apache-flume-1.7.0-bin/test/taildir_position.json
# 那么再启动一次agent即可,这是因为这个文件还没有自动生成,需要自动生成一下
flume-ng agent --conf-file /home/easul/software/apache-flume-1.7.0-bin/conf/test.properties -n agent -Dflume.root.logger=WARN, console
# 再开一个master窗口,开始写信息
cd ~/software/hadoop-data/testlog/
echo "test" > a.log
# 这样kafka的消费窗口就可以收到信息
# 继续给文件追加,消息可以继续收到,这样就可以实时监听日志
echo "test2" >> a.log
 评论
来发评论吧~
Powered By Valine
v1.5.2