【CDH】 Centos7离线安装CDH5.14.4以及常见问题解决

    xiaoxiao2022-07-04  132

    一.搭建之前的准备

    1.需要用到的工具包

    Cm 下载 https://archive.cloudera.com/cm5/cm/5/

    CDH 下载 http://archive.cloudera.com/cdh5/parcels/5.14.4/ Mysql : 参考我的博客 离线安装Mysql

    2.搭建环境

    安装包版本 : linux : centos7 mysql : 5.7 jdk : 1.8 CDH : 5.14.4 CM : 5.14.4 IP规划 : 192.168.100.190 : cm1 192.168.100.191 : cm2

    备注 : 我是用vm虚拟机搭建的 因为电脑配置问题, 只能开两台机器 如果电脑内存足够建议最少四台 , 一台主机,三台副机 , 建议 内存最低设置 2G , 硬盘 40G+ , 不然很难跑起来 ,如果是学习的话 , 用户的话建议都用root用户 , 不然会有很多权限问题.

    注意 这里我们都使用离线安装 , 包括mysql , 因为在我自己安装的过程中 , 即使换了centos源 , 在线安装mysql以及依赖时速度仍然很慢 (速度只有十几k), 所以这里我们直接在清华镜像站下载安装包下载.

    二.开始搭建

    1.配置网络 , 修改yum源

    输入 vim /etc/sysconfig/network-scripts/ifcfg-ens32 注意 ! , 我使用的是centos7 , 如果你是centos6 命令会不太一样 按照上图所示配置

    输入 systemctl restart network 重启网络服务

    这里注意 重启网络服务的时候可能会出现问题 如上图 解决方法是输入 service NetworkManager stop 然后重新输入 systemctl restart network 即可

    此时 , 静态ip应该已经配置好了 我们可以输入 ip addr 查看是否有ip 如上图 , 我们的ip已经配置好了

    然后我们需要判断机器是否能联网 使用 ping www.baidu.com' 如上图说明机器已经可以联网了 , 我们可以输入ctrl+c 使其停下 到此第一台机器网络配置已经完成 , 我们需要对第二台机器重复上面的步骤即可

    如果你两台机器的网络都已经配置完成,接下来我们需要配置yum源 这里我们使用的是清华的yum源 具体步骤也可参考 清华CentOS 镜像使用帮助 首先我们需要备份我们之前的默认源 命令是 : cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 然后输入vim /etc/yum.repos.d/CentOS-Base.repo 编辑 yum源文件 删除原有的内容 , 将以下内容添加进去 这个源文件可以点击上面的清华centos7镜像源文件获取

    然后 保存后 输入 yum makecache 更新缓存即可 如图即可 , 那么我们仍需要对第二台机器设置yum源

    2.配置JDK

    首先输入 java -version 如果出现如上图说明系统自带的是openjdk,我们需要把它卸载 安装oracal的jdk 卸载openjdk的方式 : 输入 rpm -qa | grep java 如上图 红框部分是我们需要删除的 我们可以输入 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.212.b04-0.el7_6.x86_64 (直接复制红框部分即可, 前面命令都是一样的) 依次删除四个即可 特别注意命令不要输错 , nodeps前面是两个 - 再次输入 rpm -qa | grep java : 可以看到openjdk 已经被删除(所有节点都需要删除openjdk) 此时我们可以 安装jdk,如果没有jdk的安装包可以去oracle官网下载 网址是 : jdk1.8下载 然后 : cd /usr 进入 usr目录创建Jdk 安装目录 mkdir java 然后进入cd java 进入java目录 然后将 之前下载的jdk上传到java目录 , 这里我使用的是 xshell 的rz 命令上传文件 如果你没有这个命令 ,你可以输入 命令 yum -y install lrzsz 下载 如图 说明上传成功 然后我们需要解压 输入 tar -zxvf jdk-8u152-linux-x64.tar.gz (如果你不想输入那么长的jdk安装包名的话 ,可以输入jdk之后使用tab键补全) 然后等待解压完成 如图 :说明解压完成 , 接下来我们需要配置java环境变量 输入 vim /etc/profile 编辑 如上图 需要在尾部追加

    export JAVA_HOME=jdk安装路径 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    然后输入 source /etc/profile 使配置生效 输入 java -version 出现下图 说明jdk安装成功

    3.设置主机名和host 以及ntp 时间同步

    输入 vim /etc/hostname 编辑hostname文件

    将原先的内容删除 添加新的主机名 ,我的第一台机器主机名是cm1 , 第二台是 cm2 然后 输入 hostname 新的主机名 我的是 hostname cm1 , 然后xhell 重新连接即可 , 此时 主机名已经被重新设置

    然后设置host 输入 vim /etc/hosts 添加红框处的内容 , 让主机ip 和主机名进行映射 , 然后保存退出即可

    设置ntp 时间同步 安装 ntp 服务 : yum -y install ntp 1.修改所有节点的/etc/ntp.conf => 执行 vim /etc/ntp.conf 添加以下内容 restrict 192.168.100.190 nomodify notrap nopeer noquery # 当前节点IP地址 restrict 192.168.100.2 mask 255.255.255.0 nomodify notrap # 集群所在网段的网关(Gateway),子网掩码(Genmask 2.选择一个主节点 ,修改其/etc/ntp.conf 执行 vim /etc/ntp.conf 添加以下内容(这里我选的是 cm1) server ntp1.aliyun.com iburst minpoll 4 maxpoll 10 server ntp1.cloud.aliyuncs.com iburst minpoll 4 maxpoll 10 server 127.127.1.0 Fudge 127.127.1.0 stratum 10 3.设置除主节点以外的节点的 修改/etc/ntp.conf 执行 vim /etc/ntp.conf 添加 : server 192.168.100.190 # 主节点ip Fudge 192.168.100.190 stratum 10 4. 同步时间 在 子节点上执行 ntpdate cm1 进行时间同步 然后执行 systemctl start ntpd 开启ntpd服务 执行 ntpq - p 如图即可

    **注意如果未开启ntp 服务,则会导致ntp时间偏差 **

    4.关闭防火墙和设置禁止交换

    查看防火墙状态 : systemctl status firewalld 如图说明防火墙是开启的

    关闭防火墙 systemctl stop firewalld

    再次查看防火墙状态 , 此时防火墙已经关闭

    这里我们需要再执行一个命令 关闭防火墙开机启动 关闭防火墙自启动 systemctl disable firewalld

    设置禁止交换(每台主机都需要做) 执行 vim /etc/sysctl.conf 在文件的尾部追加一行 vm.swappiness=0 执行 sysctl vm.swappiness=0 出现下图说明成功 执行命令 echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled 然后执行 vim /etc/rc.local 在文件尾部追加 echo never > /sys/kernel/mm/transparent_hugepage/defrag echo never > /sys/kernel/mm/transparent_hugepage/enabled 如图 然后保存退出即可 !

    特别注意 : 截止到现在 , 以上所有步骤都是 所有主机都需要做的!!!

    5.设置免密登录

    下面的命令都是在所有的节点执行的:

    输入命令 mkdir /root/.ssh 创建.ssh目录然后 cd /root/.ssh 进入 .ssh 目录执行 ssh-keygen -t rsa 然后一直回车即可在所有节点执行 ssh-copy-id cm1仅在cm1 上执行 scp authorized_keys root@cm2:/root/.ssh/ 将 authorized_keys 分发到其他节点使用ssh 主机名 判断是否可以免密登录 需要免密登录自己和其他节点 如上图 即可 , 免密登录完成

    6.安装并配置mysql (仅在主节点上安装)

    检测是否有 mariadb 执行 rpm -qa | grep mariadb

    如果有 使用 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64 命令卸载

    使用 whereis mysql 以及 find / -name mysql 查看之前是否安装过mysql以及残留 , 如果有 ,将所有mysql的相关目录删除

    安装mysql 参考我的另外一个博客 : 离线安装Mysql

    查看默认密码 grep 'temporary password' /var/log/mysqld.log 然后使用 mysql -uroot -p默认密码 登陆即可

    注意 !!! : 这里我 手贱 把 /var/log/mysqld.log 删了… 然后就查询不到mysql的初始密码了… 当然解决方法是有的 ! vim /etc/my.cnf 编辑配置文件 在行尾添加下面内容, 跳过验证

    [mysqld] skip-grant-tables

    保存退出 , 然后需要 执行 systemctl restart mysqld 中期服务 执行 mysql -uroot -p 直接登陆即可 默认密码是空

    使用 use mysql;切换到mysql数据库,更新 user 表:

    执行 update user set authentication_string = password('123456'),password_expired = 'N', password_last_changed = now() where user = 'root'; 修改密码为 123456

    在之前的版本中,密码字段的字段名是 password,5.7版本改为了 authentication_string

    5、退出 mysql,编辑 /etc/my.cnf 文件,删除 skip-grant-tables=1的内容

    6、重启mysqld 服务,再用新密码登录即可

    7.然后进行创建用户,授权等操作 – 授权

    grant all on *.* to 'root'@'%' identified by 'Root!!2018' with grant option;

    –创建一个新用户,就使用这个用户名,和密码,后面cm的元数据库会用到

    CREATE USER 'scm'@'%' IDENTIFIED BY 'Root!!2018';

    – 授权

    grant all on *.* to 'scm'@'%' identified by 'Root!!2018' with grant option;

    –创建一个新用户,用户名和密码可以自定义,后面安装hive,oozie会用到

    CREATE USER 'lpy'@'%' IDENTIFIED BY 'Root!!2018';

    –授权

    grant all on *.* to 'lpy'@'%' identified by 'Root!!2018' with grant option;

    – 刷新权限

    flush privileges;

    8.用上面自定义的数据库用户lpy登陆,在MySQL中创建几个数据库备用,数据库名称可以自定义。

    mysql -u lpy -p create database hive; create database hue; create database ooz;

    9.使用scm用户登录MySQL,创建scm数据库备用。

    mysql -u scm -p create database scm;

    备注 : 如果想要设置简单一些的密码 可以取消密码强度验证

    1. vim /etc/my.cnf 2. 尾部追加 plugin-load=validate_password.so validate-password=OFF 4. 重启MySQL: systemctl restart mysqld.service

    7.安装CM 和 CDH

    在所有节点执行 mkdir /opt/cloudera-manager

    在所有节点,将下载好的cloudera-manager-centos7-cm5.14.0_x86_64.tar.gz文件,上传到/opt目录下(用rz命令)

    在所有节点,解压该文件到/opt/cloudera-manager目录。 tar -zxvf /opt/cloudera-manager-centos7-cm5.14.0_x86_64.tar.gz -C /opt/cloudera-manager

    在所有节点,创建用户,这是CM需要使用的用户

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

    在主节点,创建CM服务本地数据存放目录

    mkdir /var/lib/cloudera-scm-server chown cloudera-scm:cloudera-scm /var/lib/cloudera-scm-server

    在所有节点,执行命令: vim /opt/cloudera-manager/cm-5.14.0/etc/cloudera-scm-agent/config.ini 修改server_host为server节点的主机名,我的就是server_host=cm1(server端的主机名)在所有节点,将上面准备好的数据库驱动上传到/usr/share/java目录下在主节点上执行命令。初始化数据库scm。mysql scm scm scm分别代表:数据库类型 database名称 数据库用户名 数据库密码 /opt/cloudera-manager/cm-5.14.0/share/cmf/schema/scm_prepare_database.sh mysql scm scm Root!!2018 如果出现如下提示,则证明CM元数据创建成功。 All done, your SCM database is configured correctly!在主节点执行,创建CDH文件存放目录。 mkdir /opt/cloudera/ cd /opt/cloudera mkdir parcel-repo将上面准备好的CDH的3个文件,上传至/opt/cloudera/parcel-repo路径下。在主节点,启动CM server /opt/cloudera-manager/cm-5.14.0/etc/init.d/cloudera-scm-server start在所有节点,启动CM agent /opt/cloudera-manager/cm-5.14.0/etc/init.d/cloudera-scm-agent start

    注意 : 启动 server 和 agent 需要一分钟以上的时间 需要耐心等待

    最新回复(0)