IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【FATE - 2】Centos7上Hadoop + Spark集群部署 -> 正文阅读

[大数据]【FATE - 2】Centos7上Hadoop + Spark集群部署

本文参考至Fate集群部署下的hadoop+spark集群部署指南, 仅记录本人部署过程中的操作历程。

一、系统准备

【1】、集群规划

节点名称主机名IP地址IP地址简称虚拟机OS
MasterVM-0-1-centos192.168.26.128128CentOS 7.2
Slave1VM-0-2-centos192.168.26.129129CentOS 7.2
Slave2VM-0-3-centos192.168.26.130130CentOS 7.2

【2】、基础环境配置

1、 hostname配置

1)修改主机名(主机名中不能出现下划线)

在 128 root 用户下执行:

hostnamectl set-hostname VM-0-1-centos

设置192.168.26.128的主机别名

在 129 root 用户下执行:

hostnamectl set-hostname VM-0-2-centos

在 130 root用户下执行:

hostnamectl set-hostname VM-0-3-centos
2)加入主机映射

在目标服务器(128、 129、 130)root 用户下执行:

vim /etc/hosts
192.168.26.128 VM-0-1-centos
192.168.26.129 VM-0-2-centos
192.168.26.130 VM-0-3-centos

加入主机映射

2、 关闭SELinux

安全增强型Linux(SELinux)是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制。

在目标服务器(128、129、 130)root 用户下执行:

sed -i '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config
setenforce 0

关闭SELinux

3、 修改Linux最大打开文件数

在目标服务器(128、129、130)root 用户下执行:

vim /etc/security/limits.conf
# soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错
* soft nofile 65536   # 任何用户可以打开的最大的文件描述符数量
* hard nofile 65536

修改最大打开文件数

4、关闭防火墙

在目标服务器(128、129、130)root 用户下执行

systemctl disable firewalld.service
systemctl stop firewalld.service
systemctl status firewalld.service

关闭防火墙

5、初始化服务器

1)初始化服务器

在目标服务器(128、129 、130)root 用户下执行

groupadd -g 6000 apps      # -g:指定新建工作组的 id
# useradd
# -s<shell>   指定用户登入后所使用的shell
# -G<群组>  指定用户所属的附加群组
# -m  自动建立用户的登入目录
useradd -s /bin/bash -G apps -m app  
passwd app     # 更改使用者的密码
mkdir -p /data/projects/common/jdk    # -p 确保目录名称存在,不存在的就建一个
# chown 设置文件所有者和文件关联组的命令
# -R : 处理指定目录以及其子目录下的所有文件
chown –R app:apps /data/projects      

初始化目标服务器

2)配置sudo

在目标服务器(128、129、130)root 用户下执行

vim /etc/sudoers.d/app
# 第一个ALL:表示来源地,即从哪执行这条命令。ALL表示所有计算机
# 第二个ALL:表示app可以切换到什么用户。ALL表示所有用户
# 第三个ALL:表示app可以切换到哪些组下的用户。ALL表示所有组
app ALL=(ALL) ALL
app ALL=(ALL) NOPASSWD: ALL   # NOPASSWD:ALL表示执行任意命令都不需要密码
Defaults !env_reset

配置sudo

3)配置ssh免密登录(三个root 和 三个app账户 )

本人采用的方法是在A虚拟机 root 账户下生成 公私钥对,并将公钥添加到授权文件,然后复制虚拟机A ,生成虚拟机B 和 虚拟机 C ,此时三台虚拟机root账户因为公私钥对和 授权文件相同,可互相免密登录;

各虚拟机的 app 用户也免密登录:需要将root的 公私钥对 和 授权文件 拷贝至app用户下,然后更改.ssh文件的所有者信息,这样 三个 root 账户 和 三个app账户就可互相免密登录

具体执行过程参照文章:设置虚拟机固定IP以及免密登录

【3】、安装包准备

1、上传以下程序包到服务器上

  1. jdk-1.8-linux-x64.tar.gz
  2. hadoop-2.7.7.tar.gz
  3. scala-2.12.8.tar.gz
  4. spark-2.4.2-bin-hadoop2.6.tar.gz
  5. apache-zookeeper-3.5.5-bin.tar.gz

2、解压

tar xvf hadoop-2.7.7.tar.gz -C /data/projects/common
tar xvf scala-2.12.8.tar.gz -C /data/projects/common
tar xvf spark-2.4.2-bin-hadoop2.6.tar.gz -C /data/projects/common
tar xvf apache-zookeeper-3.5.5-bin.tar.gz -C /data/projects/common
tar xvf jdk-1.8-linux-x64.tar.gz -C /data/projects/common/jdk
mv hadoop-2.7.7 hadoop
mv scala-2.11.12 scala
mv spark-2.4.2-bin-hadoop2.6 spark
mv apache-zookeeper-3.5.5-bin zookeeper

3、配置/etc/profile

export JAVA_HOME=/data/projects/common/jdk/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/data/projects/common/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export SPARK_HOME=/data/projects/common/spark
export PATH=$SPARK_HOME/bin:$PATH
# 此处最好将zookeeper的环境也配上(可选)
export ZOO_HOME=/data/projects/common/zookeeper
export PATH=$ZOO_HOME/bin:$PATH

二、集群部署

【1】、Zookeeper集群部署

1、写zoo.cfg配置文件

在128、129、130 app 用户下执行(可在128上配置完,发送到129和130上)

cd /data/projects/common/zookeeper/conf
vi zoo.cfg
tickTime=2000   # 心跳间隔(毫秒),间隔两秒心跳一次
initLimit=10    # 集群中的follower与leader之间初始连接时能容忍的最多心跳数
syncLimit=5     # follower与leader之间请求和答应最多能容忍的最多心跳数
dataDir=/data/projects/common/zookeeper/data/zookeeper     # 该目录是用来存放myid信息跟服务器唯一的ID信息等
dataLogDir=/data/projects/common/zookeeper/logs   # 存储日志
clientPort=2181   # 侦听客户端连接的端口
maxClientCnxns=1000   # 客户端连接最大数量
# ZK集群配置,服务器启动时,在dataDir中查找文件myid来知道它是哪台服务器
server.1= VM-0-1-centos:2888:3888
server.2= VM-0-2-centos:2888:3888
server.3= VM-0-3-centos:2888:3888

zk集群ip配置

报错:Permission denied
原因:app用户无权限修改 /data/projects/common/ 目录文件
解决方案:调整app用户对 /data/projects/common/ 的所有权,再重写 zoo.cfg 文件即可;

# -R 表示修改当前目录及其子目录   app用户  apps组
# 因当前操作目录是/data/projects/common,故 * 代表/data/projects/common

chown -R app:apps *

修改app用户对common文件的权限

2、配置节点id—在dataDir目录下

master节点写1 ,slave节点依次类推 此处写完,可打开myid文件检查是否写成功;

# VM-0-1-centos 
echo 1 >> /data/projects/common/zookeeper/data/zookeeper/myid
# VM-0-2-centos
echo 2 >> /data/projects/common/zookeeper/data/zookeeper/myid
# VM-0-3-centos
echo 3 >> /data/projects/common/zookeeper/data/zookeeper/myid

3、启动zookeeper并查看状态

三个节点,先启动的是leader,后续启动的是follower

# 切换到zookeeper的bin目录下
cd /data/projects/common/zookeeper/bin/   

#  使用zkServer.sh  start 启动zookeeper  ---三个节点,先启动的是leader,后续启动的是follower
./zkServer.sh start   

#  需要三个节点都启动之后,才能正确查看状态
#  使用zkServer.sh  status 查看zookeeper集群状态
./zkServer.sh status 

zookeeper启动状态查看
zk启动报错:java.net.BindException: Address already in use
ZK启动失败address in use

JPS查看状态 java进程 QuorunPeerMain
ZK启动之后的jps

【2】、Hadoop集群部署(ZK集群需要开启)

1、hadoop中加入jdk环境

在128、129、130 app 用户下执行

cd /data/projects/common/hadoop/etc/hadoop

在hadoop-env.sh、yarn-env.sh 中 加入 ** JDK 环境**:

export JAVA_HOME=/data/projects/common/jdk/jdk1.8.0_144

配置jdk环境

2、修改hadoop配置文件

/data/projects/common/Hadoop/etc/hadoop 目录下修改
core-site.xml – 集群全局参数、
hdfs-site.xml – 配置HDFS组件的属性、
mapred-site.xml – 配置map-reduce组件的属性、
yarn-site.xml – 配置集群资源管理系统参数,
需要根据实际情况修改里面的IP主机名、目录等
参考如下:

  • core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <!-- hadoop临时目录用来存放nn临时文件 -->
        <name>hadoop.tmp.dir</name>
        <!-- 该目录必须预先手工创建 -->
        <value>/data/projects/common/hadoop/tmp</value>
    </property>
    <property>
       <!-- 定义HadoopMaster的URI和端口 -->
        <!-- 此处使用fs.defaultFS, 而不是fs.default.name -->
        <name>fs.defaultFS</name>
        <value>hdfs://fate-cluster</value>
    </property>
    <property>
      <!-- Hadoop所使用的编解码器,gzip和bzip2为自带,snappy需单独安装 -->
        <name>io.compression.codecs</name>
        <value>org.apache.hadoop.io.compress.GzipCodec,
            org.apache.hadoop.io.compress.DefaultCodec,
            org.apache.hadoop.io.compress.BZip2Codec,
            org.apache.hadoop.io.compress.SnappyCodec
        </value>
    </property>
    <property>
    <!-- 配置该root允许通过代理访问的主机节点 -->
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
    <!-- 配置该root允许代理的用户所属组 -->
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
    
    <property>
    
     <!-- 指定zookeeper地址:ZooKeeper默认开启在2181端口 -->
        <name>ha.zookeeper.quorum</name>
   <value>VM-0-1-centos:2181,VM-0-2-centos:2181,VM-0-3-centos:2181</value>
    </property>
    <!-- Authentication for Hadoop HTTP web-consoles -->
        <property>
                <name>hadoop.http.filter.initializers</name>
                <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
        </property>
        <property>
                <name>hadoop.http.authentication.type</name>
                <value>simple</value>
        </property>
        <property>
                <name>hadoop.http.authentication.token.validity</name>
                <value>3600</value>
        </property>
        <property>
                <name>hadoop.http.authentication.signature.secret.file</name>
                <value>/data/projects/commom/hadoop/etc/hadoop/hadoop-http-auth-signature-secret</value>
        </property>
        <property>
                <name>hadoop.http.authentication.cookie.domain</name>
                <value></value>
        </property>
        <property>
                <name>hadoop.http.authentication.simple.anonymous.allowed</name>
                <value>true</value>
        </property>
</configuration>
  • hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description>设置副本数</description>
    </property>
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>fate-cluster</value>
        <description>为namenode集群定义一个services name</description>
        
    </property>
    <property>
        <name>dfs.ha.namenodes.fate-cluster</name>
        <value>nn1,nn2</value>
        <description> nameservice 包含哪些namenode,为各个namenode起名</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.fate-cluster.nn1</name>
        <value>VM-0-1-centos:9000</value>
        <description>namenode 的rpc地址和端口号,rpc用来和datanode通讯</description>
    </property>
    <property>
        <name>dfs.namenode.http-address.fate-cluster.nn1</name>
        <value>VM-0-1-centos:50070</value>
        <description>namenode 的http地址和端口号,web客户端</description>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.fate-cluster.nn2</name>
        <value>VM-0-2-centos:9000</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.fate-cluster.nn2</name>
        <value>VM-0-2-centos:50070</value>
    </property>
    <property>
    <!-- namenode间用于共享编辑日志的journal节点列表 -->
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://VM-0-1-centos:8485;VM-0-2-centos:8485;VM-0-3-centos:8485/fate-cluster</value>
    </property>
    <property>
    
    <!-- journalnode 上用于存放edits日志的目录 -->
        <name>dfs.journalnode.edits.dir</name>
        <value>/data/projects/common/hadoop/data/journaldata</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///data/projects/common/hadoop/data/dfs/nn/local</value>
        <description> namenode 存放name table(fsimage)本地目录</description>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/projects/common/hadoop/data/dfs/dn/local</value>
        <description>datanode存放block本地目录</description>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.fate-cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>shell(/bin/true)</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/app/.ssh/id_rsa</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>10000</value>
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
        <value>NEVER</value>
    </property>
</configuration>

  • mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

  • yarn-site.xml
<?xml version="1.0"?>

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>rmCluster</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>VM-0-1-centos:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>VM-0-1-centos</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>VM-0-2-centos</value>
    </property>
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>VM-0-1-centos:2181,VM-0-2-centos:2181,VM-0-3-centos:2181</value>
    </property>
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.store.class</name>   
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>

    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>20480</value>
    </property>
    <property>
        <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
        <value>97.0</value>
    </property>
</configuration>

3、新建目录

cd  /data/projects/common/hadoop
mkdir ./tmp
# dfs.namenode.name.dir
mkdir -p ./data/dfs/nn/local
# dfs.datanode.data.dir
mkdir -p ./data/dfs/dn/local    

4、启动–依次执行以下命令

在128 、129 、130 app 用户下执行

# 启动JournalNode节点
hadoop-daemon.sh start journalnode

在128 app 用户下执行

# 格式化HDFS
hdfs namenode -format
# 启动NameNode
hadoop-daemon.sh start namenode

在129 app用户下操作

hdfs namenode -bootstrapStandby

在128 app 用户下执行

# 格式化ZKFC
hdfs zkfc -formatZK

在129 app 用户下操作

# 启动NameNode
hadoop-daemon.sh start namenode

在128、129 app 用户下操作

# 启动zkfc节点
hadoop-daemon.sh start zkfc

在128、129 app用户下操作

# 启动ResourceManager
yarn-daemon.sh start resourcemanager

在128、129、130 app用户下操作

# 启动NodeManager
yarn-daemon.sh start nodemanager

在128、129、130 app用户下操作

# 启动DataNode
hadoop-daemon.sh start datanode

5、验证

jps查看开启的进程 一定要有 NameNode 和 DataNode

hadoop启动之后的nn

hadoop启动之后的dn

http://192.168.26.128:50070 查看hadoop状态(129上也可查看)

hadoop集群启动成功

http://192.168.26.128:8088 查看yarn集群状态

hadoop集群启动成功

【3】、Spark集群部署(ZK和hadoop集群都开着,且fate的python环境配置好)

1、配置slaves

在128 app 用户下修改,并发送slaves文件至 129 、130 用户下

cd /data/projects/common/spark/conf 
vi slaves

加入 VM-0-2-centos 、VM-0-3-centos
slaves文件配置

2、配置集群文件

在128 app 用户下修改,并发送slaves文件至 129 、130 用户下

vi spark-defaults.conf

加入

spark.master yarn

spark.eventLog.enabled true

spark.eventLog.dir hdfs://fate-cluster/tmp/spark/event

spark.yarn.jars hdfs://fate-cluster/tmp/spark/jars/\*.jar

在spark-env.sh加入

export JAVA_HOME=/data/projects/common/jdk/jdk1.8.0_144

export SCALA_HOME=/data/projects/common/scala

export HADOOP_HOME=/data/projects/common/hadoop

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://fate-cluster/tmp/spark/event"

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HADOOP_HOME}/lib/native

# 此处配置pyspark的python环境,需要在fate安装配置python虚拟环境后才能正常启动

export PYSPARK_PYTHON=/data/projects/fate/common/python/venv/bin/python

export PYSPARK_DRIVER_PYTHON=/data/projects/fate/common/python/venv/bin/python

3、启动Spark集群

Master机器上启动 (128机器上Master启动,则129和130的worker都启动了)

sh /data/projects/common/spark/sbin/start-all.sh

spark启动成功

jps进程查看 有Master 和 Worker(slaves)
spark启动后的master
spark启动之后的worker

4、验证spark + hadoop 集群

Master机器上(128机器)验证集群

cd /data/projects/common/spark/spark-2.4.1-bin-hadoop2.7/jars
hdfs dfs -mkdir -p /tmp/spark/jars
hdfs dfs -mkdir -p /tmp/spark/event
hdfs dfs -put *jar /tmp/spark/jars      # spark运行时要把jar包存放到HDFS上
/data/projects/common/spark/bin/spark-shell --master yarn --deploy-mode client 

出错:没有fate-cluster
识别不了fate-cluster
解决办法:修改hadoop中的core-site.xml中 fs.default.name 改为 fs.defaultFS

<property>
       <!-- 定义HadoopMaster的URI和端口 -->
        <name>fs.defaultFS</name>
        <value>hdfs://fate-cluster</value>
</property>

再次重新启动即可成功:
spark集群启动成功

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:53:50  更:2021-08-06 09:55:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/29 18:21:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码