• 离线环境CentOS部署CDH集群手册


    前言

    本文说明

    本文主要讲解基于离线环境下,利用三台服务器部署CDH集群方案。三台服务可以是物理机组成的同网段CentOS系统,也可以是私有云组成的同网段CentOS系统。

    本版约定

    Linux版本:CentOS 7.6

    CDH版本:CDH-5.16.1

    CM版本:cloudera-manager-centos7-cm5.16.1_x86_64

    资源包

    • CentOS 7.6镜像:CentOS-7-x86_64-DVD-1810.iso
    • JDK: jdk-8u162-linux-x64.tar.gz
    • MySQL & Connector
      mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
      mysql-connector-java-5.1.47.jar
    • Cloudera-Manager & CDH
      cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz
      CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha
      CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel
      manifest.json
    • Kafka
      KAFKA-1.2.0.jar
      KAFKA-2.1.1-1.2.1.1.p0.18-el7.parcel
      KAFKA-2.1.1-1.2.1.1.p0.18-el7.parcel.sha
      manifest-kafka.json
    • Spark2
      SPARK2_ON_YARN-2.3.0.cloudera2.jar
      SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-el7.parcel
      SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-el7.parcel.sha
      manifest_spark.json
    • Sqoop
      hive-hcatalog-core.jar
      hive-jdbc.jar
      java-json.jar

    前提说明

    服务器名称 子服务 服务器 master 服务器 worker01 服务器 worker02
    HDFS NameNode
    HDFS DateNode
    HDFS SecondaryNameNode
    Hive Hive
    Hue Hue
    Impala Impala
    Kafka Kafka
    Zookeeper Zookeeper Server

    部署步骤(特别说明,下面是以root用户操作,假设三台服务器采用固定IP,分别是192.168.0.101、192.168.0.102、192.168.0.103)

    一、配置hosts文件(所有节点)

    • 进入hosts文件配置
    vim /etc/hosts
    
    • 添加下面的内容,三个节点都需要(此处按照官网案例,三段式结构:IP,全名称,别名):
    192.168.0.101 master.com.cn master
    192.168.0.102 worker01.com.cn worker01
    192.168.0.103 worker02.com.cn worker02
    
    • 每个节点,分别设置相应的主机名称,与上面添加的内容相呼应:(保证这边的设置名称与后面安装的CDH中主机名称保持一致)
      举例master节点:
    hostnamectl set-hostname master.com.cn
    

    举例worker01节点:

    hostnamectl set-hostname worker01.com.cn
    

    举例worker02节点:

    hostnamectl set-hostname worker02.com.cn
    

    二、配置免密登入(所有节点)

    参考网址:略

    • 每台机器先使用ssh命令(ssh 主机别名),以在主目录产生一个.ssh 文件夹:
    ssh master
    

    然后输入no即可

    • 每台机器均进入~/.ssh 目录进行操作
    cd ~/.ssh
    
    • 输入下面命令,根据提示,一路回车,产生公钥和密钥
    ssh-keygen -t rsa
    
    • 将每台机器上的id_rsa.pub公钥内容复制到authorized_keys文件中:(cp命令:cp 源文件 目标文件)
    cp id_rsa.pub authorized_keys
    
    • 将所有的authorized_keys文件进行合并(最简单的方法是将其余两台worker主机的文件内容追加到master主机上),worker01和worker02分别执行:
    cat ~/.ssh/authorized_keys | ssh -p 22 root@master 'cat >> ~/.ssh/authorized_keys'
    

    上述命令解释:
    cat 待复制内容
    | (管道符号)
    ssh 端口命令前缀 远程端口(根据实际情况) 目标主机用户@目标主机名称
    cat >>(追加到) 目标文件

    • 将master上的authorized_keys文件分发到其他主机上
    scp -P 22 ~/.ssh/authorized_keys root@worker01:~/.ssh/
    scp -P 22 ~/.ssh/authorized_keys root@worker02:~/.ssh/
    

    三、关闭防火墙及清空规则(所有节点)

    systemctl stop firewalld
    systemctl disable firewalld
    iptables -F
    

    四、关闭selinux(所有节点)

    vi /etc/selinux/config 
    # 将SELINUX=enforcing改为SELINUX=disabled 
    

    设置后需要重启才能⽣效

    reboot
    

    五、设置时区及时钟同步(主从结构)

    如果是基于私有云搭建集群,默认时钟同步已经做好。如果发现存在时间差,获取私有云中固定的那台时钟同步IP,三个节点先进行一次手动同步,在通过定时任务,进行定时同步。
    如果纯物理机,按照如下操作:

    • 修改时区(所有节点),设置成东八区,即亚洲/上海
    timedatectl set-timezone Asia/Shanghai
    
    • 安装NTP服务(所有节点)
    yum install -y ntp
    
    • 编辑获取时间来源(主节点)
      进入ntp.conf文件中
    vi /etc/ntp.conf
    

    添加内容(定位到都是server那几行)

    #server指定ntp服务器的地址 将当前主机作为时间服务器
    #fudge设置时间服务器的层级 stratum 0~15  ,0:表示顶级 , 10:通常用于给局域网主机提供时间服务
    #注意:fudge必须和server一块用, 而且是在server的下一行
    server 127.127.1.0 #use local clock 
    fudge  127.127.1.0  stratum  10 
    #允许哪些⽹段的机器来同步时间 
    restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
    
    • 从节点对应文件相应位置添加内容,指向主节点IP
    server 127.127.1.0 #use local clock 
    fudge  127.127.1.0  stratum  10 
    
    restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
    
    • Ntpd服务启动(主节点)
    #启动
    systemctl start ntpd
    #查看当前状态
    systemctl status ntpd
    
    • 从节点禁用NTP服务(从节点)
    #停止
    systemctl stop ntpd
    #禁用
    systemctl disable ntpd
    #查看当前状态
    systemctl status ntpd
    
    • 手动同步时钟(从节点)
    /usr/sbin/ntpdate master
    
    • 定时同步时间(从节点)
    #编辑crontab
    crontab -e
    #进入文件添加定时任务,每天凌晨定时执行同步主节点名称
    00 00 * * * /usr/sbin/ntpdate master
    

    六、部署JDK(所有节点)

    • 安装前检查是否已存在JDK,如果则卸载原有的
    #查询当前所有安装的jdk版本,通过rpm命令查看
    rpm -qa | grep jdk
    

    上述命令输出了如下jdk

    copy-jdk-configs-3.3-10.el7_5.noarch
    java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
    java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
    
    #通过rpm命令卸载
    rpm -e --nodeps copy-jdk-configs-3.3-10.el7_5.noarch
    rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
    rpm -e --nodeps java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
    
    #直到都卸载完毕,再次利用查看命令检查是否都卸载完毕 
    rpm -qa|grep jdk
    
    • 安装JDK
      解压JDK到/opt目录下,(并修改文件的所有者和所有者组为root)
    tar -zxvf /opt/package/jdk-8u162-linux-x64.tar.gz -C /opt/
    chown root:root /opt/jdk1.8.0_162/ -R
    
    • 配置JDK环境
    #进入/etc/profile文件
    vim /etc/profile
    

    在profile文件末尾添加JDK路径

    #输出JAVA_HOME
    export JAVA_HOME=/opt/jdk1.8.0_162
    #java的bin路径追加到原来PATH路径,并输出
    export PATH=$PATH:$JAVA_HOME/bin
    

    让修改后的文件生效

    source /etc/profile
    
    • 测试JDK是否安装成功,如果出现相应的版本(自己安装的那个)、运行环境版本、虚拟机,就说明成功
    java -version
    
    • 将主节点的JDK和环境配置文件分发到worker01、worker02两台主机
    #发送jdk
    scp -P 22 -r /opt/jdk1.8.0_162/ @worker01:/opt/
    scp -P 22 -r /opt/jdk1.8.0_162/ @worker02:/opt/
    #发送配置文件
    scp -P 22 -r /etc/profile @worker01:/etc/profile
    scp -P 22 -r /etc/profile @worker02:/etc/profile
    

    七、部署MySQL(主节点)

    假设:设置MySQL的用户名和密码都是root。实际部署请正确设置。

    • 卸载原有MySQL,
    #rpm命令删除几种默认mysql类型数据库
    rpm -qa | grep -E 'mariadb|mysql'
    rpm -qa | grep -E 'mariadb|mysql' | xargs rpm -e --nodeps
    rpm -qa | grep -E 'mariadb|mysql'
    
    • 安装MySQL
    #创建目录
    mkdir /opt/mysql -p
    
    #复制MySQL至指定位置并解压
    tar -xvf /opt/package/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql/
    
    #进入指定目录并安装
    cd /opt/mysql/
    #rpm命令执行安装
    rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
    

    如果出现依赖检测失败,请安装相应的依赖,利用yum install包。

    • 启动MySQL、查看MySQL、设置开自启动
    systemctl start mysqld  
    systemctl status mysqld  
    systemctl enable mysqld 
    
    • 修改root密码
    #在日志文件中查看mysql的root用户默认密码
    grep 'temporary password' /var/log/mysqld.log
    #如下,默认密码为root@localhost: 后面的内容,即:Lo)Kust_F4ek
    2022-01-13T14:44:29.262863Z 1 [Note] A temporary password is generated for root@localhost: Lo)Kust_F4ek
    
    • 取消密码策略检测,不然设置root这种简单密码无法设置成功,最后修改密码为root
    #修改/etc/my.cnf文件
    vim /etc/my.cnf
    
    #在文件中添加以下内容以禁用密码策略
    validate_password=off
    
    #重新启动mysql服务
    systemctl restart mysqld
    
    #进入mysql,
    mysql -uroot -p
    
    #并输入第一步中获取的密码 
    Lo)Kust_F4ek
    
    #修改密码为root
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
    
    • 修改数据库编码为utf-8,修改上传文件大小限制。
      在/etc/my.cnf 文件中添加以下内容
    character_set_server=utf8
    
    init_connect='SET NAMES utf8'
    
    max_allowed_packet = 128M
    
    
    • 添加 root 用户的远程登录权限
    #进入mysql
    mysql -uroot -proot
    
    #修改root的远程访问权限,提供给客户端访问能力
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    
    # flush privileges:刷新MySQL的系统权限,使其即时生效,否则就重启服务器
    FLUSH PRIVILEGES;
    
    • 在MySQL中创建用户及数据库:下面的数据库实例为后面安装大数据服务组件准备,一些大数据组件初始化需要元数据,得提前为它们准备实例和对应的用户名。
      进入MySQL,创建用户及数据库,复制如下命令
    create database cmf DEFAULT CHARACTER SET utf8; 
    grant all on cmf.* TO 'cmf'@'%' IDENTIFIED BY 'cmf'; 
    
    create database amon DEFAULT CHARACTER SET utf8; 
    grant all on amon.* TO 'amon'@'%' IDENTIFIED BY 'amon'; 
    
    create database oozie DEFAULT CHARACTER SET utf8; 
    grant all on oozie .* TO oozie @'%' IDENTIFIED BY 'oozie'; 
    
    create database hive DEFAULT CHARACTER SET utf8; 
    grant all on hive.* TO hive@'%' IDENTIFIED BY 'hive'; 
    
    flush privileges;
    exit;
    
    • 部署MySQL JDBC jar(所有节点)
    #若目录/usr/share/java/不存在则创建
    mkdir -p /usr/share/java/
    
    #复制MySQL连接器至相应的目录
    cp /opt/package/mysql-connector-java-5.1.47.jar /usr/share/java/mysql-connector-java.jar
    
    #发送至两外两台服务器
    scp -P 22 -r /opt/package/mysql-connector-java-5.1.47.jar @worker02:/usr/share/java/mysql-connector-java.jar
    scp -P 22 -r /opt/package/mysql-connector-java-5.1.47.jar @worker01:/usr/share/java/mysql-connector-java.jar
    

    八、部署CM服务

    • 离线部署Server 和 Agent (主从结构)
      说明:Server部署在主节点,Agent部署所有节点包括主节点。
    #创建目录并解压(所有节点)
    mkdir -p /opt/cloudera-manager
    tar -zxvf /opt/package/cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz -C /opt/cloudera-manager/
    
    #分发解压后的cm目录:
    scp -r -P 22 /opt/cloudera-manager/ @worker01:/opt/
    scp -r -P 22 /opt/cloudera-manager/ @worker02:/opt/
    
    
    #修改Agent配置,指向主节点(所有节点)
    sed -i "s/server_host=localhost/server_host=master/g" /opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-agent/config.ini
    #解释:其实/opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-agent/config.ini文件中server_host等于的对象改成master
    
    • 修改Server配置(主节点)
    #进入server对应的数据库设置文件
    vim /opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-server/db.properties 
    
    #进行修改如下选项,下面的cmf就是前面数据库那会创建的实例
    com.cloudera.cmf.db.type=mysql
    com.cloudera.cmf.db.host=master
    com.cloudera.cmf.db.name=cmf
    com.cloudera.cmf.db.user=cmf
    com.cloudera.cmf.db.password=cmf
    com.cloudera.cmf.db.setupType=EXTERNAL
    
    #上述文件保存完后再发送其他节点
    scp -P 22 /opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-server/db.properties @worker01:/opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-server/
    scp -P 22 /opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-server/db.properties @worker02:/opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-server/
    
    #创建用户(所有节点):用户是cloudera-scm
    useradd --system --home=/opt/cloudera-manager/cm-5.16.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
    
    #修改用户及用户组(所有节点)
    chown -R cloudera-scm:cloudera-scm /opt/cloudera-manager
    
    • 部署离线Parcel源(主节点)
    #创建离线源目录
    mkdir -p /opt/cloudera/parcel-repo
    
    #移动离线源到目录,并修改文件名称
    cp /opt/package/CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel /opt/cloudera/parcel-repo/
    cp /opt/package/CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha /opt/cloudera/parcel-repo/
    cp /opt/package/manifest.json /opt/cloudera/parcel-repo/
    
    #目录修改用户及用户组
    chown -R cloudera-scm:cloudera-scm /opt/cloudera
    
    #创建组件安装目录、用户及用户组(所有节点)
    mkdir -p /opt/cloudera/parcels
    chown -R cloudera-scm:cloudera-scm /opt/cloudera
    
    • 启动并监控日志(可以省略
      补充参数(所有节点)
    #说明:swappiness是Linux内核参数,控制换出运行时内存的相对权重。swappiness参数值可设置范围在0到100之间。  低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间。
    #cat << EOF >> 命令说明:再文件尾添加内容。
    cat << EOF >> /etc/sysctl.conf 
    vm.swappiness=10 
    EOF
    
    #关闭THP
    #说明:Transparent HugePages是在运行时动态分配内存的,而标准的HugePages是在系统启动时预先分配内存,并在系统运行时不再改变。因为Transparent HugePages是在运行时动态分配内存的,所以会带来在运行时内存分配延误。
    echo never > /sys/kernel/mm/transparent_hugepage/defrag 
    echo never > /sys/kernel/mm/transparent_hugepage/enabled 
    
    #使文件成为可执行文件(命令:chmod +x)
    chmod +x /etc/rc.d/rc.local
    
    • 启动server(主节点)
    /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-server start
    
    #立马查看输出日志:(tail -100f 查看文件最后一百行日志,且可以不断看到后面持续打印的日志)
    tail -100f /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server/cloudera-scm-server.log
    
    • 启动Web界面。前置条件:前面的日志输出正常,比如看到成功启动了web容器,7180端口输出等。
      在windows桌面,打开浏览器,网址:主机IP:7180
      默认账号和密码:admin/admin

    • 启动所有的Agent(所有节点)

    #回到Linux命令行输入界面
    /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-agent start
    
    #立马查看输出日志:(tail -100f 查看文件最后一百行日志,且可以不断看到后面持续打印的日志)
    tail -100f /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-agent/cloudera-scm-agent.log
    
    • 帮助命令(正常情况就不需要执行
    #如需要关闭agent服务,可以执行:
    /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-agent stop
    
    #如需要关闭server服务,可以执行(一般先停agent后停server):
    /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-server stop
    

    CDH的集群部署,进入window浏览器,刚才登入地址。只截取重要图片

    • 基础安装
      1.接收条款和协议
      2.选择免费列(免费 在许可证哪一行可以看到)
      3.继续
      4.为CDH集权安装指定主机,名称那一列选中我们的三台主机。如果没有,可以通过搜索 “master,worker01,worker02” 。
      5.集群安装,选择CDH版本,选择我们的

    6.等待下载安装,其实就是安装我们执行的parcel(详见前面“部署离线Parcel源(主节点)”)。
    7.出现检查主机正确性,验证下面都✔

    • HDFS、YARN、Zookeeper安装
      1.选择自定义安装

    2.选择安装服务

    3.分配节点
    HDFS:调整SecondaryNameNode安装服务器(节点),不要跟NameNode在同一个服务器上,可以放到worker01或者worker02上。数据节点DataNode三个服务器都选。
    Cloudera Management Service:默认都放在了主节点上,建议不修改。
    YARN:避免主节点master服务压力过大,可以把ResourceManager节点调整到其他节点
    ZooKeeper:三个节点都选

    4.集权设置全部选默认,点击继续
    5.自动启动进程,点击继续

    • 其他服务安装,走添加服务模式(略)
      在进行Hive安装的时候,需要配置hive元数据:数据库名称、用户名、密码。(翻看前面MySQL那边,可以得知,数据库名称hive、用户名root、密码root),输入完成后,可以点击测试连接,连接成功继续。

    • Spark2 安装(主节点)
      前提:关闭CM集群,可以通过界面关闭
      回到Linux命令行输入界面

    #在主节点创建文件夹
    #创建上传包文件目录
    mkdir -p /opt/package/spark2.3/csd
    
    #安装包文件目录
    mkdir -p /opt/cloudera-manager/cloudera/csd
    

    上传SPARK2_ON_YARN-2.3.0.cloudera2.jar (此jar由于集成cloudera manager需要)到/opt/package/spark2.3/csd
    利用上传工具上传,比如sftp
    SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-el7.parcel 、 SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-el7.parcel.sha 、manifest_spark.json
    到/opt/package/spark2.3/

    #把包拷贝到安装目录
    cp /opt/package/spark2.3/csd/SPARK2_ON_YARN-2.3.0.cloudera2.jar /opt/cloudera-manager/cloudera/csd/
    
    #指定用户和用户组
    chown cloudera-scm:cloudera-scm /opt/cloudera-manager/cloudera/csd/SPARK2_ON_YARN-2.3.0.cloudera2.jar
    
    #分配644权限
    chmod 644 /opt/cloudera-manager/cloudera/csd/SPARK2_ON_YARN-2.3.0.cloudera2.jar
    
    #将原有的配置文件备份,后面spark2配置文件需要在同一个目录下命名为manifest.json:
    mv /opt/cloudera/parcel-repo/manifest.json  /opt/cloudera/parcel-repo/manifest.json.bak
    
    #将spark2 对应的parcel都复制到安装目录
    cp /opt/package/spark2.3/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-el7.parcel /opt/cloudera/parcel-repo/
    cp /opt/package/spark2.3/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101-el7.parcel.sha /opt/cloudera/parcel-repo/
    cp /opt/package/spark2.3/manifest_spark.json  /opt/cloudera/parcel-repo/
    
    #spark2 配置文件改名复制,与前面的备份配置文件呼应,CM安装程序只认程序只认manifest.json,不认manifest_spark.json
    mv /opt/cloudera/parcel-repo/manifest_spark.json  /opt/cloudera/parcel-repo/manifest.json
    
    #启动CM集群
    /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-agent start
    /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-server start
    

    在CM中更改cds的路径并重启CM集群
    路径更改为/opt/cloudera-manager/cloudera/csd

    上面操作重启完成后,按照下图操作先分配再激活

    接下来就可以添加Spark2服务了。

  • 相关阅读:
    【ARM】2440裸机系列-RTC数字时钟
    【ARM】2440裸机系列-图片显示
    【Acm】算法之美—Anagrams by Stack
    【C/C++】程序如何来,编译全过程
    【Cmd】批处理
    【Cmd】那些年,我们迷恋的cmd命令(二)
    【Cmd】那些年,我们迷恋的cmd命令(一)
    【web技术】html特效代码(二)
    【web技术】html特效代码(一)
    【安全】加密解密整理
  • 原文地址:https://www.cnblogs.com/gzhcsu/p/16015956.html
Copyright © 2020-2023  润新知