CDH

环境: centos 7.5,CDH 6.3

本文是在Centos7.5下完全离线部署CDH6

公司的CDH为5.X版本,CDH5和CDH6的差异还是有些的。之前搭建过CDH5,但每次多多少少会遇到一些问题,所以这次搭建记录一下。

官方文档地址:cloudera

参考资料:blog

1.搭建前的环境准备

环境要求

操作系统

  • 软件依赖 • Python 2.7+,不支持Python 3(安装HUE需要)

    • perl

    • python-psycopg2 2.5.4+(安装HUE需要)

    • iproute package ○ RHEL7:iproute-3.10 ○ RHEL6:iproute-2.6

说明:通常这部分依赖环境操作系统已经自带,不需要手动安装。

系统版本

• RHEL系列:6.10,6.9,6.8,7.2,7.3,7.4,7.5

• SELS:12 SP3,12 SP2

• Ubuntu系列:16.04 LTS

文件系统

• ext3

• ext4

• XFS

• S3

Kudu仅支持ext4和XFS文件系统,不支持NFS和NAS存储。

文件访问记录

Cloudera建议禁用该项功能,可以提升磁盘性能。
配置/etc/fstab文件:/dev/sdb1 /data1 ext4 defaults,noatime 0 0
不重启即生效命令:mount -o remount /data1
nproc配置:
配置文件位置/etc/security/limits.conf,Cloudera Manager通常会自动配置该文件,但是该项配置可能会被/etc/security/limits.d/目录下的文件覆盖掉。确保nproc限制设置的足够高,比如65536或者262144。

数据库要求

Cloudera Manager和CDH内置嵌入式PostgreSQL数据库,用于非生产环境。生产环境不支持PostgreSQL数据库,必须为集群配置专用外部数据库。

注意:

• 数据库需要使用UTF8编码。对于MySQL和MariaDB,必须使用UTF8编码,而不是utf8mb4;
• 对于MySQL5.7,必须要额外安装MySQL-shared-compat或者MySQL-shared包

版本要求:

• MySQL:5.7
• MariaDB:5.5,10.0
• PostgreSQL:8.4,9.2,9.4
• Oracle:12C

Java要求

仅支持Oracle 64位JDK8,不支持JDK7,JDK9。

版本要求:最低要求1.8u31,推荐1.8u74,1.8u91,1.8u102,1.8u111,1.8u121,1.8u131,1.8u162

网络以及安全要求

• CDH不支持IPv6,操作系统必须要禁用IPv6
• 集群主机必须正确配置/etc/hosts文件
    ○ 应该包含集群中所有主机的主机名和对应IP地址
    ○ 不能含有大写主机名
    ○ 不能有重复的IP地址
• SELinux不得阻止Cloudera Manager或者CDH的操作
• 防火墙必须被禁用或者放开CDH集群所使用的端口
• 对于RHEL或者CENTOS,/etc/sysconfig/network文件中必须包含正确的主机名

浏览器要求

• Chrome:63+
• Firefox:59+
• Safari
• IE:11+
• Edge:41+

所使用的端口:

官方文档介绍:CDH集群端口占用列表

组件版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

组件名称	组件版本 
Apache Avro	1.8.2
Apache Flume	1.8.0
Apache Hadoop	3.0.0
Apache HBase	2.0.0
HBase Indexer	1.5
Apache Hive	2.1.1
Hue	4.2.0
Apache Impala	3.0.0
Apache Kafka	1.0.1
Kite SDK	1.0.0 
Apache Kudu	1.6.0
Apache Solr	7.0.0
Apache Oozie	5.0.0
Apache Parquet	1.9.0
Parquet-format	2.3.1
Apache Pig	0.17.0
Apache Sentry	2.0.0
Apache Spark	2.2.0
Apache Sqoop	1.4.7
Apache ZooKeeper 3.4.5

安装之前

网络相关配置

• 设置唯一主机名:hostnamectl set-hostname new-hostname
• 配置/etc/hosts
• 检测主机名与IP是否正确对应

禁用防火墙

• 停止防火墙:systemctl stop firewalld
• 关闭防火墙开机自启动:systemctl disable firewalld

设置SELinux执行模式

1. 检查SELinux模式:getenforce,如果输出permissive或者disabled,你可以跳过该步骤,如果输出enforcing,则需要继续下面的操作步骤。
2. 编辑/etc/selinux/config(在某些操作系统可能是/etc/sysconfig/selinux)文件,将SELINUX=enforcing修改为SELINUX=permissive,保存该文件。
3. 重启操作系统生效或者执行:setenforce 0临时禁用SELinux。
4. 当CDH安装部署完成之后,可以重新启用SELinux,修改SELinux配置文件,然后执行:setenforce 1命令。

配置局域网内yum源

安装Cloudera Manager需要很多依赖包,强烈建议搭建一个局域网内yum源,在集群中某一个节点上部署即可。 可参考我之前的文章:CentOS7下使用FTP搭建局域网内Yum源 配置NTP服务

集群中所有节点的时间必须要保持同步,可以选择集群中其中一个节点作为ntp服务端,其余节点作为客户端。

• 安装ntp软件:yum -y install ntp
• 配置ntp服务端/etc/ntp.conf
• 配置ntp客户端/etc/ntp.conf
• 启动ntp服务:systemctl start ntpd
• 配置开机自启动:systemctl enable ntpd
• 同步客户端时间与服务端时间相同:ntpdate -u <ntp-server>

具体配置说明可参考我之前的文章:环境准备-配置ntp时间同步 安装jdk8 集群所有节点都要安装。 可参考我之前的文章:环境准备-JDK1.8安装 安装mysql5.7 只需要在集群中某一个节点上安装即可。 可参考我之前的文章:CentOS7下使用RPM安装MySQL5.7 集群性能优化相关配置 集群所有节点都需要进行这些配置。 可参考我之前的文章:CDH6集群性能调优(操作系统层面) 环境准备部分完毕

来自 https://www.staroon.dev/2018/12/01/CDH6BeforeInstall/

  • CDH6需要java 1.8版本
  • 需要安装Mysql

1.添加host /etc/hosts Eric1 192.168.2.10 2,禁用防火墙 Systemctl stop firewalld 关闭开机自启 Systemctl disalbe firewalld

安装NTP 集群中所有节点的时间必须要保持同步,可以选择集群中其中一个节点作为ntp服务端,其余节点作为客户端。 • 安装ntp软件:yum -y install ntp • 配置ntp服务端/etc/ntp.conf • 配置ntp客户端/etc/ntp.conf • 启动ntp服务:systemctl start ntpd • 配置开机自启动:systemctl enable ntpd • 同步客户端时间与服务端时间相同:ntpdate -u

来自 https://www.staroon.dev/2018/12/01/CDH6BeforeInstall/

安装java1.8 1.安装java环境 环境存放到 cd /opt/ 下载 wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz (这里是用华为的镜像地址下载,oracle需要登陆账号) 解压到指定目录 tar -zxvf jdk-8u202-linux-x64.tar.gz vim ~/.bashrc 添加环境变量如下 export JAVA_HOME=/opt/jdk1.8.0_202 ## 这里要注意目录要换成自己解压的jdk 目录 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 立即生效 source ~/.bashr 验证 java -version

安装数据库 yum install mariadb-server -y systemctl start mariadb #启动MariaDB systemctl stop mariadb #停止MariaDB systemctl restart mariadb #重启MariaDB systemctl enable mariadb #设置开机启动

这里安装maridb

数据库配置 CDH官方给的有一份推荐的MySQL的配置内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12

[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
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
key_buffer = 16M
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
#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 MariaDB, if you enable the binary log and do not set
#a server_id, MariaDB 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/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

来自 https://docs.cloudera.com/documentation/enterprise/6/6.0/topics/install_cm_mariadb.html#install_cm_mariadb

下载CM6 RPM包 https://archive.cloudera.com/cm6/6.3.1/redhat7/yum/RPMS/x86_64/ 下载以下四个包放在 自己新建的/opt/cloudera-repos

cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm 2019-10-11 08:42 9.00MB cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm 2019-10-11 08:42 1.00GB cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm 2019-10-11 08:42 11.00KB cloudera-manager-server-db-2-6.3.1-1466458.el7.x86_64.rpm 2019-10-11 08:42 10.00KB oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm 2019-10-11 08:42 176.00MB

配置Cloudera Manager yum库 注意:不要尝试使用FTP搭建CM的YUM库! 首先安装httpd和createrepo: yum -y install httpd createrepo 启动httpd服务并设置开机自启动: systemctl start httpd systemctl enable httpd 然后进入到前面准备好的存放Cloudera Manager RPM包的目录cloudera-repos下: cd /upload/cloudera-repos/ 生成RPM元数据: createrepo .

[root@bogon cloudera-repos]# createrepo . Spawning worker 0 with 1 pkgs Spawning worker 1 with 1 pkgs Spawning worker 2 with 1 pkgs Spawning worker 3 with 1 pkgs Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete

然后将cloudera-repos目录移动到httpd的html目录下: mv cloudera-repos /var/www/html/ 确保可以通过浏览器查看到这些RPM包

http://192.168.2.106/cloudera-repos/

接着在Cloudera Manager Server主机上创建cm6的repo文件(要把哪个节点作为Cloudera Manager Server节点,就在这个节点上创建repo文件): cd /etc/yum.repos.d vim cloudera-manager.repo 添加如下内容:

1. [cloudera-manager]
2. name=Cloudera Manager 6.0.1
3. baseurl=http://cdh601/cloudera-repos/
4. gpgcheck=0
5. enabled=1

保存,退出,然后执行yum clean all && yum makecache命令: [root@bogon yum.repos.d]# yum clean all && yum makecache 已加载插件:fastestmirror 正在清理软件源: base cloudera-manager extras updates Cleaning up everything Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos Cleaning up list of fastest mirrors 已加载插件:fastestmirror base | 3.6 kB 00:00:00
cloudera-manager | 2.9 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/13): cloudera-manager/filelists_db | 102 kB 00:00:00
(2/13): cloudera-manager/primary_db | 6.5 kB 00:00:00
(3/13): cloudera-manager/other_db | 864 B 00:00:00
(4/13): base/7/x86_64/group_gz | 165 kB 00:00:00
(5/13): extras/7/x86_64/primary_db | 153 kB 00:00:01
(6/13): extras/7/x86_64/other_db | 100 kB 00:00:00
(7/13): base/7/x86_64/other_db | 2.6 MB 00:00:02
(8/13): extras/7/x86_64/filelists_db | 207 kB 00:00:02
(9/13): updates/7/x86_64/other_db | 368 kB 00:00:00
(10/13): updates/7/x86_64/primary_db | 5.9 MB 00:00:07
(11/13): updates/7/x86_64/filelists_db | 3.3 MB 00:00:07
(12/13): base/7/x86_64/filelists_db | 7.3 MB 00:00:14
(13/13): base/7/x86_64/primary_db | 6.0 MB 00:01:01
Determining fastest mirrors

  • base: mirror.lzu.edu.cn
  • extras: mirror.lzu.edu.cn
  • updates: mirror.bit.edu.cn 元数据缓存已建立

安装CM yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server

配置本地Parcel存储库 Cloudera Manager Server安装完成后,进入到本地Parcel存储库目录: cd /opt/cloudera/parcel-repo 将第一部分下载的CDH Parcel文件(CDH-6.0.1-1.cdh6.0.1.p0.590678-el7.parcel和manifest.json)上传至该目录下,然后执行命令生成sha文件: sha1sum CDH-6.0.1-1.cdh6.0.1.p0.590678-el7.parcel | awk ‘{ print $1 }’ > CDH-6.0.1-1.cdh6.0.1.p0.590678-el7.parcel.sha 然后执行下面的命令修改文件所有者: chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/* 最终/opt/cloudera/parcel-repo目录内容如下:

mysql配置 /etc/my.cnf

启动mysql 配置开机自启

systemctl start mariadb #启动MariaDB systemctl enable mariadb

查看端口 安装netstat yum install net-tools

配置mysql 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/目录不存在,需要手动创建): 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

来自 https://www.staroon.dev/2018/12/01/CDH6Install/

创建CDH所需要的数据库 根据所需要安装的服务参照下表创建对应的数据库以及数据库用户,数据库必须使用utf8编码,创建数据库时要记录好用户名及对应密码:

我这里就先创建4个数据库及对应用户: CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL ON scm.* TO ‘scm’@'%’ IDENTIFIED BY ‘scm’; GRANT ALL ON amon.* TO ‘amon’@'%’ IDENTIFIED BY ‘amon’; GRANT ALL ON rman.* TO ‘rman’@'%’ IDENTIFIED BY ‘rman’; GRANT ALL ON metastore.* TO ‘hive’@'%’ IDENTIFIED BY ‘hive’;

GRANT ALL ON oozie.* TO ‘oozie’@'%’ IDENTIFIED BY ‘oozie’; GRANT ALL ON hue.* TO ‘hue’@'%’ IDENTIFIED BY ‘hue’;

FLUSH PRIVILEGES;

SHOW GRANTS FOR ‘scm’@'%'; SHOW GRANTS FOR ‘amon’@'%'; SHOW GRANTS FOR ‘rman’@'%'; SHOW GRANTS FOR ‘hive’@'%';

来自 https://www.staroon.dev/2018/12/01/CDH6Install/

设置Cloudera Manager 数据库 Cloudera Manager Server包含一个配置数据库的脚本。 • mysql数据库与CM Server是同一台主机 执行命令:/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm

mysql数据库与CM Server不在同一台主机上 执行命令:/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h –scm-host scm scm

来自 https://www.staroon.dev/2018/12/01/CDH6Install/

[root@eric1 schema]# /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm Enter SCM password: JAVA_HOME=/opt/jdk1.8.0_202 Verifying that we can write to /etc/cloudera-scm-server Creating SCM configuration file in /etc/cloudera-scm-server Executing: /opt/jdk1.8.0_202/bin/java -cp /usr/share/java/mysql-connector-java.jar:/usr/share/java/oracle-connector-java.jar:/usr/share/java/postgresql-connector-java.jar:/opt/cloudera/cm/schema/../lib/* com.cloudera.enterprise.dbutil.DbCommandExecutor /etc/cloudera-scm-server/db.properties com.cloudera.cmf.db. [ main] DbCommandExecutor INFO Unable to login using supplied username/password. [ main] DbCommandExecutor ERROR Error when connecting to database. java.sql.SQLException: Access denied for user ‘scm’@‘localhost’ (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)[mysql-connector-java.jar:5.1.47]

安装CDH节点 启动Cloudera Manager Server服务 systemctl start cloudera-scm-server

wget http://192.168.1.171/cloudera-repos/oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm

export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera ## 这里要注意目录要换成自己解压的jdk 目录 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH

然后等待Cloudera Manager Server启动,可能需要稍等一会儿,可以通过命令tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log去监控服务启动状态。 当看到INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.日志打印出来后,说明服务启动成功,可以通过浏览器访问Cloudera Manager WEB界面了。

查看本地端口 netstat

访问Cloudera Manager WEB界面 打开浏览器,访问地址:http://<server_host>:7180,默认账号和密码都为admin:

来自 https://www.staroon.dev/2018/12/01/CDH6Install/

选择安装的机器。

rm /usr/bin/host

因为只有一台机器这里选择基础安装

自定义角色分配,因为只有一台,这里按照默认来,将必须组件分到一台上面

将之前讲好的mysql数据库信息填进去。

等待设置成功

由于只有一台机器。中间因为GC,导致步骤失败多次,多试几遍就好

集群优化参考 https://www.staroon.dev/2018/11/30/CDH6Performance/