# CDH安装

参考资料:

# 环境配置

  1. 所有节点修改主机名

    hostnamectl set-hostname cdh01
    hostnamectl set-hostname cdh02
    hostnamectl set-hostname cdh03

  2. 所有节点设置hosts映射信息

    vi /etc/hosts

    192.168.25.10 cdh01
    192.168.25.11 cdh02
    192.168.25.12 cdh03

  3. 所有节点关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    systemctl status firewalld

  4. 所有节点关闭SeLinux

    # 查看selinux状态,如果输出为enforcing,则需要关闭
    getenforce
    
    vi /etc/selinux/config
    SELINUX=enforcing修改为SELINUX=disabled
    # 或者
    sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
    # 立即生效
    setenforce 0
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  5. 所有节点配置免密登录。

    ssh-keygen -t rsa 
    ssh-copy-id -i ~/.ssh/id_rsa.pub cdh02
    ssh-copy-id -i ~/.ssh/id_rsa.pub cdh03
    
    1
    2
    3
  6. 所有节点设置swap空间

    # 查看当前内存和swap使用情况,如果swap分区不为0,则可跳过这步
    free -h
    cat /proc/swaps
    # 开启关闭swap
    swapon -a
    swapoff -a
    
    # swap大小设置推荐
    # 4G以内的物理内存,SWAP 设置为内存的2倍。
    # 4-8G的物理内存,SWAP 等于内存大小。
    # 8-64G 的物理内存,SWAP 设置为8G。
    # 64-256G物理内存,SWAP 设置为16G。
    
    # 查看使用swap的规则阈值
    # swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间。
    # swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
    cat /proc/sys/vm/swappiness
    # 临时修改
    sysctl vm.swappiness=0
    # 永久修改,在/etc/sysctl.conf 文件里添加如下参数:
    vm.swappiness=0
    
    # 使用文件作为交换分区
    # 生成swap-file,大小为1G
    dd if=/dev/zero of=/swap-file bs=1M count=1024
    # 将交换文件格式化为swap分区,记录UUID
    mkswap /swap-file
    
    Setting up swapspace version 1, size = 8388604 KiB
    no label, UUID=e7d93441-2606-4cd0-a5bd-c983f579d6cb
    # 永久生效,配置/etc/fstab,更新UUID,新增/swap-file配置
    UUID=e7d93441-2606-4cd0-a5bd-c983f579d6cb
    /swap-file     swap         swap    defaults        0 0
    
    # 启动交换分区
    swapon /swap-file
    
    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

    下面是第二种方法:

    # 查看当前交换大小
    cd /usr/lib/tuned
    grep "vm.swappiness" * -R
    
    # 临时修改
    # 查看当前内核参数
    sysctl vm.swappiness
    # 临时修改
    sysctl vm.swappiness=10
    # 查看修改后内核参数
    sysctl vm.swappiness
    
    # 永久修改
    sed -i s/"vm.swappiness = 30"/"vm.swappiness = 10"/g  /usr/lib/tuned/virtual-guest/tuned.conf
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
  7. 关闭透明大页面压缩。

    # 临时关闭
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    grep Huge /proc/meminfo
    
    #永久关闭
    echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
    echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
    chmod +x /etc/rc.d/rc.local
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  8. NTP服务安装,Hadoop对集群中各个机器的时间同步要求比较高,要求各个机器的系统时间不能相差太多,不然会造成很多问题。可以配置集群中各个机器和互联网的时间服务器进行时间同步,但是在实际生产环境中,集群中大部分服务器是不能连接外网的,这时候可以在内网搭建一个自己的时间服务器(NTP服务器),集群的各个机器与这个时间服务器进行时间同步。我们选择其中一个节点cdh01机器作为NTP服务器,其他机器和它自动同步。

    # 安装ntp
    yum -y install ntp
    
    # 时间同步配置
    vi /etc/ntp.conf
    # 主节点指向NTP服务器
    server http://ntp.aliyun.com
    # 从节点指向主节点
    server cdh01
    
    # 重新启用ntp服务器,并设置开机启动
    service ntpd restart
    systemctl enable ntpd.service
    
    # 查看和测试
    ntpdc -c loopinfo #查看与时间同步服务器的时间偏差
    ntpq -p #查看当前同步的时间服务器
    ntpstat #查看状态定时同步crontab
    
    # 查看时区
    ls -l /etc/localtime
    timedatectl list-timezones
    # 设置时区
    timedatectl set-timezone Asia/Hong_Kong
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

# 配置源

因为我们使用的离线版,需要把cdh的安装包缓存导入进来。

  1. 安装httpd,createrepo

    yum install -y httpd createrepo
    service httpd start
    #开机自启
    systemctl enable httpd
    或者chkconfig httpd on
    
    1
    2
    3
    4
    5
  2. 将缓存复制到各个目录

    cd /var/www/html/
    mkdir cm6 cdh6
    
    # 复制cdh相关
    cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel /var/www/html/cdh6/
    cp manifest.json /var/www/html/cdh6/
    
    # 复制cm相关的
    cp cloudera-manager-* /var/www/html/cm6/
    cp enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm /var/www/html/cm6
    cp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm /var/www/html/cm6
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  3. 创建yum源

    cd /var/www/html/cm6
    createrepo . 
    
    cat >> /etc/yum.repos.d/cm.repo << EOF
    
    [CM]
    name=cm6
    baseurl=http://cdh01/cm6/
    gpgcheck=0
    EOF
    
    yum clean all
    yum repolist
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

# 安装

所有节点需要安装下前置依赖包:

yum install -y bind-utils libxslt cyrus-sasl-plain cyrus-sasl-gssapi portmap fuse-libs /lib/lsb/init-functions httpd mod_ssl openssl-devel python-psycopg2 Mysql-python fuse
1

# 主节点安装

我们默认把cdh01当作主节点。

  1. 安装cloudera-manager和agent

    #安装JDK
    yum install -y oracle-j2sdk1.8.x86_64
    #安装cloudera-manager
    yum install -y cloudera-manager-agent cloudera-manager-daemons cloudera-manager-server cloudera-manager-server-db-2 postgresq-server
    
    1
    2
    3
    4
  2. 安装Mariadb

    #安装
    yum install -y mariadb-server
    #启动和开机自启
    systemctl start mariadb && systemctl enable mariadb
    #配置Mariadb数据库
    mysql_secure_installation #可以在遇[Y/n]输入y设置密码 [账号/密码:root/root]
    
    1
    2
    3
    4
    5
    6
  3. 初始化管理节点数据库

    mkdir -p /usr/share/java
    # 这一步在主节点上好像不需要
    cp /root/mysql-connector-java-5.1.34.jar /usr/share/java/mysql-connector-java.jar(这里需要分发到所有节点)
    # 执行数据库初始脚本
    /opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h localhost -uroot -proot --scm-host localhost scm root root
    # 注意:初始化完成之后,登录的root账号的密码变成了root,可以根据scm_prepare_database.sh脚本分析出来
    
    1
    2
    3
    4
    5
    6

# 从节点安装

我们在cdh02和cdh03的从节点上安装:

  1. 安装agent

    yum install -y oracle-j2sdk1.8.x86_64
    #安装agent
    yum install cloudera-manager-daemons cloudera-manager-agent -y
    
    1
    2
    3

# 配置启动

下面是所有节点需要做的操作:

  1. 修改配置文件

    # 修改Cloudera Agent配置文件/etc/cloudera-scm-agent/config.ini,配置server_host为主节点cdh01
    vi /etc/cloudera-scm-agent/config.ini
    server_host=cdh01
    # 也可以通过sed命令修改(推荐)
    sed -i "s/server_host=localhost/server_host=cdh01/g" /etc/cloudera-scm-agent/config.ini
    
    1
    2
    3
    4
    5
  2. 配置JAVA_HOME

    vi /etc/profile
    #add for JAVA_HOME
    export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera/
    export PATH=$PATH:$JAVA_HOME/bin
    
    1
    2
    3
    4
  3. 启动CDH

    1. 启动Cloudera Manager(cdh01)

      # 启动服务
      service cloudera-scm-server start
      # 或者如下
      systemctl start cloudera-scm-server
      
      # 设置开机自启
      chkconfig cloudera-scm-server on
      # 或者如下
      systemctl enable cloudera-scm-server
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
    2. 启动Cloudera Agent(所有节点)

      # 启动
      service cloudera-scm-agent start 
      # 或者如下
      systemctl start cloudera-scm-agent
      
      # 设置开机自启
      chkconfig cloudera-scm-agent on
      # 或者如下
      systemctl enable cloudera-scm-agent
      
      1
      2
      3
      4
      5
      6
      7
      8
      9

# Web界面配置

访问http://ip:7180来进行web配置。

  1. 将远程url设置为

    http://cdh01/cdh6/
    
    1

    remoteurl

  2. 配置如下组件

    cdhconfig

  3. 配置下数据库

    mysql -uroot -proot
    
    create database hive default charset utf8;
    create user 'hive'@'%' identified by '123456';
    grant all on hive.* TO 'hive'@'localhost' identified by '123456';
    grant all on hive.* TO 'hive'@'%' identified by '123456';
    flush privileges;
    
    create database oozie default charset utf8;
    grant all on oozie.* TO 'oozie'@'%' identified by '123456';
    flush privileges;
    
    create database hue default charset utf8;
    grant all on hue.* TO 'hue'@'%' identified by '123456';
    flush privileges;
    
    create database reports default charset utf8;
    grant all on reports.* TO 'reports'@'%' identified by '123456';
    flush privileges;
    
    create database activitylog default charset utf8;   
    create user 'activitylog'@'%' identified by '123456';
    grant all on activitylog.* TO 'activitylog'@'localhost' identified by '123456';
    grant all on activitylog.* TO 'activitylog'@'%' identified by '123456';
    flush privileges;
    
    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

# 其他问题

# 纠删码策略警告

会提示Erasure Coding Policy Verification Test,纠删码策略是HDFS集群提供的数据恢复的安全机制,出现这个警告是因为当前的HDFS集群DataNode节点数不满足当前所配置的纠删码策略需要的最小主机数。

  • RS-3-2-1024k策略需要至少5台DataNode节点
  • RS-6-3-1024k策略需要至少9台DataNode节点
  • RS-10-4-1024k策略需要至少14台DataNode节点

如果无法满足最低的5台DataNode节点要求,所以可以选择关闭纠删策略。

# 金丝雀

会提示HDFS Canary,在重启HDFS集群后,由于NameNode加载镜像时会进入安全模式,所以会出现创建临时文件失败的情况。解决办法是自己可以恢复。

# JobHistory启动失败

因权限受据,JobHistory启动失败。

sudo -u hdfs hdfs dfs -chmod -R 777 /