CDH 6.3.1 安装
前言 CDH6集群的完全离线部署
环境要求 安装之前查阅下官方文档 的要求
个人关注 操作系统、数据库、JDK 三个点
操作系统
选用 CentOS 7.5
Cloudera Manager和CDH内置嵌入式PostgreSQL数据库,用于非生产环境。生产环境不支持PostgreSQL数据库,必须为集群配置专用外部数据库。
注意:
数据库需要使用UTF8编码。对于MySQL和MariaDB,必须使用UTF8编码,而不是utf8mb4
对于MySQL5.7,必须要额外安装MySQL-shared-compat或者MySQL-shared包
Java要求
支持Oracle 64位JDK8,不支持JDK7,JDK9
安装之前 Host
主机YZ-JDB-106-38-13的名称中有大写字符。在这种情况下,通过Kerberos进行的身份验证将无法正常工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # 一定要注意 hostname 不能包含下划线 # 设置唯一主机名 # 修改hostname hostname yz-100-73-18-59 # 直接修改命令 hostname # 查看修改后的hostname # 修改网络配置文件 vim /etc/sysconfig/network HOSTNAME=yz-JDB-106-35-3 # 修改hosts文件 # 把集群所有的ip与对应的hostname vim /etc/hosts 100.73.41.20 yz-100-73-41-20 100.73.41.21 yz-100-73-41-21 100.73.41.22 yz-100-73-41-22
ssh免密 手动操作如下的代码块所示。 参考自CentOS 配置集群机器之间SSH免密码登录
上图就是SSh免密登陆原理图,从上图可以看出,SSH免密登陆的前提是使用ssh-keygen -t RSA
生成公私秘钥对, 然后通过ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
命令将公钥分发至远程主机。 接下来的每次免密登陆步骤如下:
用户使用ssh user@host命令对远程主机发起登陆;
远程主机对用户返回一个随机串;
用户所在主机使用私钥对这个随机串进行加密,并将加密的随机串返回至远程主机;
远程主机使用分发过来的公钥对加密随机串进行解密;
如果解密成功,就证明用户的登陆信息是正确的,则允许登陆;否则反之。 通过ssh-copy-id user@host
命令分发的公钥都会被保存至远程主机的~/.ssh/authorized_keys
文件中。
1 2 3 4 5 6 7 8 9 10 11 12 13 # 集群密码登录 # 集群中的每台主机上执行下面命令,一路回车,可生成本机的 rsa 类型的密钥 ssh-keygen -t rsa # 执行完之后在 ~/.ssh/ 目录下会生成一个保存有公钥的文件:id_rsa.pub # 把公钥写入 authorized_keys 文件 # 把自己的公钥拷贝到集群中的Master机 ssh-copy-id root@HadoopMaster # 最终Master机上生成~/.ssh/authorized_keys文件 该文件保存所有机器的公钥 # 把~/.ssh/authorized_keys 拷贝到集群的其他机器上 scp ~/.ssh/authorized_keys root@HadoopSlave1:~/.ssh/ scp ~/.ssh/authorized_keys root@HadoopSlave2:~/.ssh/
关闭防火墙 1 2 3 4 5 6 7 8 # 查看防火墙 systemctl status firewalld # 关闭防火墙 systemctl stop firewalld # 开机禁用 systemctl disable firewalld
禁用 SELinux 1 2 3 4 5 6 7 # 关闭SELINUX # 临时生效 setenforce 0 # 永久生效 vim /etc/selinux/config SELINUX=disabled
启用 NTP 集群中所有节点的时间必须要保持同步,可以选择集群中其中一个节点作为ntp服务端,其余节点作为客户端
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 37 38 39 40 41 42 43 44 45 46 # 停止影响的服务 systemctl stop chronyd systemctl disable chronyd # 安装ntp软件 yum -y install ntp # 配置主节点ntp配置文件 vim /etc/ntp.conf driftfile /var/lib/ntp/drift restrict 127.0.0.1 restrict -6 ::1 restrict default nomodify notrap server ntp1.aliyun.com prefer minpoll 6 includefile /etc/ntp/crypto/pw keys /etc/ntp/keys # 配置其他节点ntp文件,同样修改ntp.conf文件 driftfile /var/lib/ntp/drift restrict 127.0.0.1 restrict -6 ::1 restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery #这里是主节点的主机名或者ip server cdh-master.test.com minpoll 6 includefile /etc/ntp/crypto/pw keys /etc/ntp/keys # 启动ntp服务 systemctl start ntpd # 查看ntp服务 systemctl status ntpd # 在其它节点上手动同步主节点的时间,换成你自己的主节点IP ntpdate -u 192.168.0.201 # 配置开机自启动 systemctl enable ntpd # 确认是否同步成功 ntpstat (若网络没问题,过一会synchronised to NTP server ...) ntpq -p (若网络没问题,过一会会看到有一行开头会有个星号)
NTP服务端重启后,客户机要等5分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。
虚拟内存参数设置 需要调整的参数为vm.swappiness,是一个0-100的值,用于控制应用数据从物理内存到磁盘上的虚拟内存的交换,值越高,交换越积极,值越小,交换的次数越少
在大多数Linux系统上,该参数默认值为60,这并不适用于Hadoop集群,因为即使有足够的内存,也可能会进行进程的交换,从而可能会影响Hadoop的性能和稳定性
1 2 3 4 5 6 7 8 # 查看当前该项参数值 cat /proc/sys/vm/swappiness # 修改该项参数值(临时生效) sysctl -w vm.swappiness=0 # (重启后永久生效) echo vm.swappiness = 0 >> /etc/sysctl.conf
禁用 tuned 服务 如果您的群集主机正在运行RHEL / CentOS 7.x,请通过运行以下命令禁用”tuned”服务
1 2 3 4 5 6 7 8 9 10 11 12 13 # 确保tuned服务已开启 systemctl start tuned # 关闭tuned服务 tuned-adm off # 确保没有已激活的配置 tuned-adm list 如果输出内容中包含No current active profile表示关闭成功 # 关闭并且禁用tuned服务 systemctl stop tuned systemctl disable tuned
官方文档Disable the tuned Service
禁用 THP 大多数Linux平台都包含一个名为transparent hugepages的功能,该功能可能会严重降低Hadoop集群的性能
在root权限下,使用以下命令
1 2 3 4 5 # 检查THP是否启用 cat /sys/kernel/mm/transparent_hugepage/enabled cat /sys/kernel/mm/transparent_hugepage/defrag 输出[always] never意味着THP已启用,always [never]意味着THP未启用
该图就表示THP已启用
要禁用透明大页面,请在所有群集主机上执行以下步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 编辑文件,最下面添加两行配置,重启服务器生效 vim /etc/rc.d/rc.local echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag # 赋予/etc/rc.d/rc.local文件可执行权限 chmod +x /etc/rc.d/rc.local # 修改GRUB配置, 仅RHEL/CentOS 7.x需要进行该项操作 # 在GRUB_CMDLINE_LINUX项目后面添加一个参数 vim /etc/default/grub transparent_hugepage=never # 执行命令 grub2-mkconfig -o /boot/grub2/grub.cfg
还可以使用以下命令即刻生效禁用透明的大页面, 但请记住,重新启动后它将失效
1 2 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
官方文档介绍Disabling Transparent Hugepages (THP)
安装 mysql5.7
CDH 对 MySQL 有一些限制,具体如下
MySQL 默认的 datadir 目录是/var/lib/mysql
,要确保该目录存在的分区有足够的空间。
如果 MySQL 启用了 GTID 复制,会导致 Cloudera Manager 安装失败。
数据库需要使用UTF8编码。对于MySQL和MariaDB,必须使用UTF8编码,而不是utf8mb4
对于MySQL5.7,必须要额外安装 MySQL-shared-compat 或者 MySQL-shared 包,因为 Cloudera Manager Agent 包的安装依赖这两个
只需要在集群中某一个节点上安装即可
我这选用MySQL 5.7.25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 首先卸载操作系统可能会自带的mariadb-libs yum -y remove mariadb-libs 解压mysql rpm-bundle tar包 tar -zxvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar # 开始安装mysql, 一定要按照下面的顺序来安装,否则会安装不成功 rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm #(安装Cloudera Manager6需要) # 启动mysql服务 systemctl start mysqld # 如果无法启动,则需要修改mysql数据目录所有者:chown -R mysql:mysql /var/lib/mysql/ # 查看root用户初始密码 grep password /var/log/mysqld.log
1 2 3 4 5 6 7 8 9 10 11 12 13 # 登录mysql修改root密码 mysql -uroot -p # 如果密码复杂度不够,则会禁止修改,默认密码规则为:包含数字、大小写字母、特殊字符,同时还有长度要求 # 可以通过修改全局参数来解决,但是还是要求密码长度至少为8位 mysql> set global validate_password_policy=0; mysql> set password = password('12345678'); # 设置远程登录权限 mysql> grant all privileges on *.* to 'root'@'%' identified by '12345678'; mysql> flush privileges; # 修改mysql数据库默认编码 查看原数据库编码:mysql> SHOW VARIABLES LIKE 'char%';可以看到数据库和服务端的编码都还不是utf8:
编辑/etc/my.cnf文件,在[mysqld]下面添加一行character-set-server=utf8
重启mysql服务:systemctl restart mysqld,再次登录数据库查看编码,修改成功
这里我贴出我的 my.cnf
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 37 38 39 40 41 42 43 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock transaction-isolation = READ-COMMITTED # Disabling symbolic-links is recommended to prevent assorted security risks; # to do so, uncomment this line: symbolic-links = 0 key_buffer_size = 32M max_allowed_packet = 32M thread_stack = 256K thread_cache_size = 64 query_cache_limit = 8M query_cache_size = 64M query_cache_type = 1 max_connections = 550 character-set-server = utf8 #expire_logs_days = 10 #max_binlog_size = 100M #log_bin should be on a disk with enough free space. #Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your #system and chown the specified folder to the mysql user. log_bin=/var/lib/mysql/mysql_binary_log #In later versions of MySQL, if you enable the binary log and do not set #a server_id, MySQL will not start. The server_id must be unique within #the replicating group. server_id=1 binlog_format = mixed read_buffer_size = 2M read_rnd_buffer_size = 16M sort_buffer_size = 8M join_buffer_size = 8M # InnoDB settings innodb_file_per_table = 1 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 64M innodb_buffer_pool_size = 4G innodb_thread_concurrency = 8 innodb_flush_method = O_DIRECT innodb_log_file_size = 512M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid sql_mode=STRICT_ALL_TABLES
安装 CM 文件下载 准备 CM 和 CDH 文件
CM6.3.1
CDH6.3.1
ASC文件
repo 文件
同时还需要下载一个repo 文件、asc文件,同样保存到 Cloudera Manager 目录下
Cloudera Manager 目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 cm6.3.1 ├── allkeys.asc ├── cloudera-manager.repo ├── repodata │ ├── 3662f97de72fd44c017bb0e25cee3bc9398108c8efb745def12130a69df2ecb2-filelists.sqlite.bz2 │ ├── 43f3725f730ee7522712039982aa4befadae4db968c8d780c8eb15ae9872cd4d-primary.xml.gz │ ├── 49e4d60647407a36819f1d8ed901258a13361749b742e3be9065025ad31feb8e-filelists.xml.gz │ ├── 8afda99b921fd1538dd06355952719652654fc06b6cd14515437bda28376c03d-other.sqlite.bz2 │ ├── b9300879675bdbc300436c1131a910a535b8b5a5dc6f38e956d51769b6771a96-primary.sqlite.bz2 │ ├── e28836e19e07f71480c4dad0f7a87a804dc93970ec5277ad95614e8ffcff0d58-other.xml.gz │ ├── repomd.xml │ ├── repomd.xml.asc │ └── repomd.xml.key ├── RPM-GPG-KEY-cloudera ├── RPMS │ ├── noarch │ └── x86_64 │ ├── cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm │ ├── cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm │ ├── cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm │ ├── cloudera-manager-server-db-2-6.3.1-1466458.el7.x86_64.rpm │ ├── enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm │ └── oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm └── SRPMS
sha文件得重命名下,去掉末尾的数字
1 mv CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha1 /var/www/html/cdh6_parcel/CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha
CDH 目录
1 2 3 4 cdh6.3.1 ├── CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel ├── CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha └── manifest.json
搭建 yum 库 1 2 3 4 5 6 # 安装 httpd yum -y install httpd # 启动httpd服务并设置开机自启动 systemctl start httpd systemctl enable httpd
将 Cloudera Manager 目录、CDH 目录移动到 httpd 的 html 目录下
1 2 mv cm6.3.1 /var/www/html mv cdh6.3.1 /var/www/html
修改 repo 文件, {host}改为对应IP
1 2 3 4 5 [cloudera-manager] name=Cloudera Manager 6.3.1 baseurl=http://{host}/cm6.3.1 gpgcheck=0 enabled=1
复制 repo 文件到 yum 文件夹
1 cp cloudera-manager.repo /etc/yum.repos.d
启动httpd服务并准备好目录之后浏览器打开 http://{host}/cm6.3.1 即可看到
清除yum缓存,查看机器是否识别
1 2 yum clean all yum list | grep cloudera
安装 在CM Server节点上操作
1 yum -y install cloudera-manager-server
jdbc 驱动 下载mysql-connector-java-5.1.47.tar.gz 包
解压出mysql-connector-java-5.1.47-bin.jar文件
将 mysql-connector-java-5.1.47-bin.jar 文件上传至 CM Server节点上的 /usr/share/java/ 目录下并重命名为mysql-connector-java.jar(如果/usr/share/java/目录不存在,需要手动创建):
1 2 3 tar zxvf mysql-connector-java-5.1.47.tar.gz mkdir -p /usr/share/java/ cp mysql-connector-java-5.1.47-bin.jar /usr/share/java/mysql-connector-java.jar
创建CDH所需要的数据库 根据所需要安装的服务参照下表创建对应的数据库以及数据库用户,数据库必须使用utf8编码,创建数据库时要记录好用户名及对应密码
我这里就创建 cm 所需要的数据库
1 2 3 4 5 6 7 8 9 CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm'; # 查看授权是否正确 SHOW GRANTS FOR 'scm'@'%'; # 查看数据库和服务端的编码是不是utf8 SHOW VARIABLES LIKE 'char%';
设置数据库 Cloudera Manager Server包含一个配置数据库的脚本
传参格式 scm_prepare_database.sh <db.type> <db.name> <db.user>
mysql数据库与CM Server是同一台主机
1 /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
mysql数据库与CM Server不在同一台主机上
1 /opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h <mysql-host-ip> --scm-host <cm-server-ip> scm scm
在 CM 服务所在服务器,可以看到/etc/cloudera-scm-server/db.properties
文件有相应数据
安装CDH节点 启动 Server 服务 1 systemctl start cloudera-scm-server
然后等待Cloudera Manager Server启动,可能需要稍等一会儿
1 2 3 4 5 # 查看 server 端口、可能需要稍等一会儿 netstat -anlp | grep 7180 # 查看 server 服务状态,active 说明正常 systemctl status cloudera-scm-server
如果启动报错,通过 /var/log/cloudera-scm-server/cloudera-scm-server.log 日志文件去查看状态
访问 WEB 界面 打开浏览器,访问地址:http://:7180,默认账号和密码都为 admin
参考链接