CDH在Centos 7离线安装

    xiaoxiao2021-03-25  168

    由于本人原来都是采用在线安装方式,使用公司港台服务器代理,速度还是很可观的。不过最近要求在Centos 7上离线安装,有点坑,网上的很多都是抄来抄去,安装到一半可能就走不下去,这里是本人亲测,遇到的问题都一一说明并且解决掉。这里趟了一遍,希望对读者有帮助。不说废话,进入主题:

    Cloudera官网给出三种安装方式,我们采用PathC,使用下载好的包进行安装。我这里只使用本地虚拟机来进行安装说明:

    机器本身环境配置(所有机器):

    设置本身机器ip

    首先查看自身机器网卡,我用的NAT方式:

    [root@localhost Desktop]# ifconfig

    那么看到eno16777736为我们的外部网卡,我们接下来修改他的ip:

    [root@localhost Desktop]# vi/etc/sysconfig/network-scripts/ifcfg-eno16777736

    我们会看到如下:

    然后我们改为静态ip:

    此处的网关需要查看自己网段的网关。然后我们重启网路:

    [root@localhostDesktop]# systemctl restart network

    再次查看网络:

    [root@localhost Desktop]# ifconfig

    没有问题,已经成功。

    更改DNS

    如果我们现在运行如下命令会发现我们不识别baidu:

    [root@localhost Desktop]# ping www.baidu.com

    ping: unknown host www.baidu.com

    这说明我们的DNS没有设置好,修改相应配置:

    [root@localhost Desktop]# vi /etc/resolv.conf

    正常里面是空的,加入:

    nameserver 8.8.8.8

    nameserver 8.8.4.4

    保存退出,然后重启网络然后尝试:

    更改成功

    更改主机名字(看自己意愿,我假设分别是wm001,wm002,wm003):

    接下来我们更改主机名字。首先我们输入如下命令,查看本机主机名字:

    我们需要更改名字:

    [root@localhost Desktop]# vi /etc/hostname 然后把原来名字去掉,改为:

    wm001

    保存退出,再次查看:

    更改yum源:

    Yum原本的源都在国外,更新特别浪费时间,我们改为阿里源:

    首先我们将原来的源进行备份:

    [root@localhost Desktop]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    接下来我们用阿里源进行替换:

    [root@localhost Desktop]# wget -O/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    接下来我们makecache一下,然后更新包:

    [root@localhost Desktop]# yum makecache

    [root@localhost Desktop]# yum update

    过程可能会很长,y输入然后一直继续。

    至此,yum源更新完毕。

    Cloudera 安装开始:

    Cloudera manager 选择

    首先考虑到我们集群中所用的为Centos 7,所以Cloudera Manager我选的为最新版本:

    Cloudera Manager 5.10.0,主要是根据官网文档选择,下载地址为:

    http://archive.cloudera.com/cm5/repo-as-tarball/

    如下贴出该版本支持的Centos 各系统:

    CDH选择

    由于我们的cloudera manager已经选择了,所以CDH版本也可以确定:

    CDH-5.10.0-1.cdh5.10.0.p0.41-el7.parcel,至于4或者5都可以:

    下载地址为:http://archive.cloudera.com/cdh5/

      

    JDK选择

    官网给出:

    所以不管java的版本是1.7还是1.8,只要符合上述要求即可。Centos 7自带java,我们查看一下版本:

    Cloudera官方给出:

    所以我们需要卸载本机自带的openJDK,安装我们自己的JDK到/usr/java/目录下。我们进行如下操作:

    首先我们查看安装的Java并且卸载该java(所有机器):

    现在java已经卸载干净,我们上oracle官网,下载我们所需的java版本:

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

    然后安装我们的java:

    可以看到,我们安装的java被安装到了/usr/java目录下,并且创建了一个latest链接文件,然后我们把java的目录放到环境中去:

    至此,java环境准备完毕。

    配置SSH

    一般centos 7默认安装了openssh,我们在wm001上创建密匙,这里需要说明一下,根据官网说明:

    我们使用root用户创建密匙(所有机器):

    接着我们需要修改hosts文件,依据Cloudera官网:

    所以我们要在每台机器的hosts文件中加入其余机器的信息,我们现在只在wm001中加入,稍后会写相应的脚本来传递到各个机器上。在wm001上改为如下:

    127.0.0.1  localhost

    ::1        localhost

    192.168.75.128 wm001

    192.168.75.129 wm002

    192.168.75.130 wm003

     

    然后我们在wm001上创建文件autossh.sh脚本,然后编辑:

    #!/bin/bash

    # 注意此处用于主机已经生成了ssh-key

    password='moon'

    auto_ssh(){

     /usr/bin/expect <<-EOF

    set time 30

    spawn ssh-copy-id -i $HOME/.ssh/id_rsa.pub$1

    expect {

    "*yes/no" { send"yes\r"; exp_continue }

    "*password:" { send"$password\r" }

    }

    expect eof

    EOF

    }

    for i in $@;do

     auto_ssh $i

    done

    ## 至此所有互信已经完成,接下来开始复制host文件

    for i in $@;do

     scp/etc/hosts root@$i:/etc/hosts

     #scp/shellscripts/hello root@$i:/usr/local

    done

    脚本中的password是各机器root用户登陆密码。

    然后我们赋予可执行权限:

    由于脚本使用了expect包,而centos默认不安装,所以此时我们需要安装一下:

    然后我们运行脚本:

    显示成功,我们测试一下:

    如上说明我们已经把各机器ssh成功,并且hosts文件我们也已经拷贝成功。

    至此,SSH配置完毕。

    安装配置MYSQL

    根据官网所述:

    我们需要一个外部数据库来存储集群的信息,我们使用mysql。版本我们采用:5.6,包采用:

    mysql-community-release-el7-5.noarch.rpm。因为根据官方,5.6是支持的:

    下载地址为:http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

    然后我们开始安装mysql的rpm包,此处注意,我们只在wm001上安装:

    然后我们更新yum:

    然后安装mysql-server:

    之所以我们不直接使用yum是因为centos7 不提供mysql的版本,所以需要我们手动下载导入:

    接下来设置mysql开机启动:

    [root@wm001 ~]# systemctl enable mysqld.service

     

    然后启动mysql:

    [root@wm001 ~]# systemctl start mysqld

     

    接下来,设置root用户密码:

    [root@wm001 ~]# mysqladmin -u root password 'wordemotion'

    防火墙等设置:

    首先官方文档中描述:

    这里建议关闭防火墙,如果非要开启的话,官网有个对照,各个核心控件所需开启的端口,手动开启即可。 关闭SELinux:

    [root@wm001 ~]#  systemctl stop firewalld.service

    [root@wm001 ~]# vim /etc/selinux/config

    NTP设置

    由于机器都是虚拟机,时间相同,不设置。此跳过。(安装公司集群时,务必设置)

    Cloudera Manager 安装

    现在我们要正式开始安装cloudera manger了,首先把我们事先下载好的cloudera manager上传到各个机器:

    然后我们把文件解压到/opt目录下(每台机器都如此):

    tar -zxvf cloudera-manager-centos7-cm5.10.0_x86_64.tar.gz -C  /opt/

     

    接下来我们要在所有的机器上配置主机的名字:

    vim /opt/cm-5.10.0/etc/cloudera-scm-agent/config.ini

    接下来我们要在所有机器上创建用户,具体原因如官方解释:

    运行命令如下:

    useradd --system --home-dir /opt/cm-5.10.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

     

    接下来我们要为cloudera manager建立数据库,不过在此之前我们需要下载msyql数据库驱动下载地址:http://dev.mysql.com/downloads/connector/j/

    我们解压把文件上传到/opt/cm-5.10.0/share/cmf/lib/目录下:

    cp mysql-connector-java-5.1.40-bin.jar /opt/cm-5.10.0/share/cmf/lib/

     

    scp   mysql-connector-java-5.1.40-bin.jar wm002:/opt/cm-5.10.0/share/cmf/lib/

     

    这样之后我们开始创建库,cm给了脚本自动创建数据库等,所以我们只需要运行该脚本即可:

    /opt/cm-5.10.0/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -pwordemotion --scm-host localhost scm word@emotion

    其中wordemotion 是数据库的root用户密码,而后面的word@emotion是新的用户scm的密码。

     

    现在按照原理数据库应该已经有了该库,我们查看一下:

    没有问题,数据库已经成功创建。

    启动Cloudera Manager

    现在我们开始启动cloudera manager,首先在wm001上启动server:

    /opt/cm-5.10.0/etc/init.d/cloudera-scm-serverstart

    然后我们在所有机器上启动agent

    /opt/cm-5.10.0/etc/init.d/cloudera-scm-agentstart

    我们在wm001上查看相应端口是已经打开,出现如图所示证明已经打开:

    我们在浏览器查看:

    http://192.168.75.128:7180

    出现如下图所示证明安装成功,默认账号密码都是admin:

    登陆,我们进入到如下界面,先不要着急点击继续

    CDH安装

    我们在下载CDH的时候会有相对应的sha文件,我们这里是:

    CDH-5.10.0-1.cdh5.10.0.p0.41-el7.parcel.sha1

    我们需要重命名该文件为:

    CDH-5.10.0-1.cdh5.10.0.p0.41-el7.parcel.sha

    然后把

    CDH-5.10.0-1.cdh5.10.0.p0.41-el7.parcel与上面的sha文件一起放入到/opt/cloudera/parcel-repo/目录下(只是主机如此操作):

    mv CDH-5.10.0-1.cdh5.10.0.p0.41-el7.parcel /opt/cloudera/parcel-repo/

     

    继续Cloudera Manager安装

     我们在刚才的网页选择接受然后继续:

    这里我们选择免费版,一般中小型公司都选择免费版,完全能够解决绝大多数业务所需。继续:

    继续:

    在这里我们能够看到三个主机,这也就说明只要我们的所有agent成功启动的话,我们就可以在这里看到所有的机器。

    选中所有机器继续:

    保持默认,继续:

    到了此页面我发现集群卡住不动。

     

    发现此问题我首先想到的是去看日志:

    路径是:/opt/cm-5.10.0/log/cloudera-scm-agent

    [root@wm001 cloudera-scm-agent]# tail -n 300 cloudera-scm-agent.log

     

    我们发现确实agent发生错误,错误如下:

    如上错误信息也就说明了用split去切分的时候,字段>4个,所以报错。

    我追踪脚本找到报错位置:

    然后我们找到调用的位置:

    注释详细的说明了该方法是用update-alternatives找到指定名字的所有alternatives。那么我不知道具体要找的是哪个名字,但是我知道指定有一个名字用空格切分长度大于4。去国外的网站也查了,很多人遇到这个问题,使用如下脚本进行定位:

    那么我们定位到了是因为这个包造成的。那么两种方案:

    一种是把这个包卸载:

    alternatives --display libjavaplugin.so.x86_64

    alternatives --remove libjavaplugin.so.x86_64 /usr/lib64/IcedTeaPlugin.so

     

    一种是更改此脚本文件,关闭server和agent,重新启动:

    /opt/cm-5.10.0/etc/init.d/cloudera-scm-agent stop(所有机器)

    /opt/cm-5.10.0/etc/init.d/cloudera-scm-stop stop

     

    先把原来的脚本进行备份:

    cp  /opt/cm-5.10.0/lib64/cmf/agent/build/env/lib/python2.7/site-packages/cmf-5.10.0-py2.7.egg/cmf/client_configs.py ./client_configs.py.bak

     

    然后把该脚本覆盖老脚本,同时发往各个机器:

    scp  client_configs.py  wm002:/opt/cm-5.10.0/lib64/cmf/agent/build/env/lib/python2.7/site-packages/cmf-5.10.0-py2.7.egg/cmf/client_configs.py

     

    这样之后我们启动server和agent:

    /opt/cm-5.10.0/etc/init.d/cloudera-scm-server start

    /opt/cm-5.10.0/etc/init.d/cloudera-scm-agent start

     

    然后我们打开网页,依照之前的操作到上次卡住的地方,如今已经能够正常运行了,我们等待一段时间即可:

    等待时间可能会偏长,等全部成功如下图时,继续:

    这时需要等待一段时间:

    出现如图所示时,点击完成:

    当下面的内核出现的时候,我们选择自定义(hdfs,spark,yarn,zookeeper),根据需求自定义,我这里只是演示而已:

    后我们点击继续:

     

    下面的页面一般建议默认文件夹,最后的zk如果机器充裕的话建议三个,我这三台机器配置较差,就用了一个,然后我们继续:

    出现如下页面时,我们等待审核:

    然后默认路径继续:

    然后集群开始为我们启动各个组件,时间随着机器配置而定,如果机器配置很烂的话,很有可能会启动失败。

     

    启动成功后我们继续如下图:

    然后点击完成:

    然后我们进入到管理界面,途中的警告是因为我磁盘和内存太小导致的,不影响使用,我们集群CPU和IO的监控也已经为我们启动。

    至此,我们的生产模式离线安装成功完成。

     

    【注】:最后出现的问题个人感觉可能是centos版本导致的,我的虚拟机就是centos 7.0,是不在cdh支持的列表中的,所以出现了那个问题。同样也有可能我们使用的最新的Cloudera Manager,目前他不够完善导致的,不过目前可以通过修改脚本而不用改动机器,个人认为该问题不算集群风险。

    转载请注明原文地址: https://ju.6miu.com/read-1816.html

    最新回复(0)