此方案包含部分实施要点,作为部署实施参考。主要针对RHEL/Centos7.x系统,其他系统可能会有不同。
主机配置章节包含了部分针对Hadoop的操作系统优化。

服务

版本

操作系统

CentOS 7

Cloudera Manager

6.3.1

CDH

6.3.2

前言

如果要启用FreeIPA,最好先安装ipa-server。当然在部署好集群后安装也可以。
Cloudera Manager Server节点需要安装IPA admin libraries,可以将ipa-server直接部署在Cloudera Manager Server节点上。
如果安装ipa-server的节点已运行httpd服务,需要先停用httpd服务,否则会有端口冲突,无法顺利配置ipa-server,配置好ipa-server后,httpd服务也会自动启动。
建议做好主机配置后,优先安装ipa-server。

主机角色

主机角色

说明

Master hosts

运行Hadoop主进程,例如HDFS NameNode 和 YARN Resource Manager。

Utility hosts

运行其他非主进程的集群进程,例如Cloudera Manager 和 Hive Metastore。

Gateway hosts

启动集群工作的客户端访问点。

Worker hosts

运行DataNodes和其他分布式进程,例如Impalad。

主机配置

每个主机都要进行配置。

网络名

确保每个主机都是固定IP。

主机名命名规范

主机名的字符必须全部小写。

主机角色

主机名命名规范

Master Hosts

master[1-N].bigdata.zxxk.com

Utility Hosts

utility[1-N].bigdata.zxxk.com

Gateway Hosts

gateway[1-N].bigdata.zxxk.com

Worker Hosts

worker[1-N].bigdata.zxxk.com

设置主机名

按照主机名命名规范,设置主机名,命令示例:

sudo hostnamectl set-hostname master1.bigdata.zxxk.com

hosts文件

编辑 /etc/hosts 文件,添加集群中每个节点的IP地址和FQDN映射,示例如下:

10.1.25.31 master1.bigdata.zxxk.com master1
10.1.25.32 utility1.bigdata.zxxk.com utility1
10.1.25.33 gateway1.bigdata.zxxk.com gateway1
10.1.25.34 worker1.bigdata.zxxk.com worker1

防火墙

禁用防火墙,并关闭防火墙服务的开机启动设置。示例命令如下:

sudo systemctl disable firewalld
sudo systemctl stop firewalld

SELinux模式

如果启用了SELinux,需要关闭SELinux,关闭方法如下。
编辑 /etc/selinux/config (系统不同,此文件位置可能不同),确保 SELINUX=disabled 。

NTP服务

如果使用FreeIPA,这里优先使用ntpd服务。
chronyd比ntpd更易用,这里介绍使用chronyd作为时钟同步服务。

安装

如果已安装,跳过此步。

yum install chrony

配置

配置时间服务器,以保证各个主机的时间保持一致,编辑 /etc/chrony.conf 文件,调整时间服务器配置:

server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst

启动服务

systemctl start chronyd
systemctl enable chronyd

Kernel Limits

文件描述符

文件描述符值建议设置为102400或更大。
编辑/etc/security/limits.conf 文件,修改或调整nofile配置,如下:

* - nofile 102400

上述命令同时配置了soft和hard类型的文件描述符,如果需要分开配置,配置方式如下:

* soft nofile 102400
* hard nofile 102400

关闭tuned服务

tuned是linux的系统性能监控调优工具,确认服务处于运行状态

systemctl start tuned

关闭

tuned-adm off

确认关闭

tuned-adm list

如果发现No current active profile ,表示已关闭。
停止服务并关闭自动启动

systemctl stop tuned
systemctl disable tuned

关闭Transparent Hugepages

透明大页被用来改善操作系统内存管理
编辑/etc/rc.d/rc.local 文件,增加以下命令:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

修改文件权限

chmod +x /etc/rc.d/rc.local

编辑/etc/default/grub 文件,增加以下选项:

transparent_hugepage=never

运行命令

grub2-mkconfig -o /boot/grub2/grub.cfg

调整内存交换配置

linux内和参数vm.swappiness ,用于控制内存交换,值范围为0-100,一般默认为60。
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面
内存交换会影响Hadoop集群的稳定性和性能,建议调整为1。
查看

cat /proc/sys/vm/swappiness

设置默认值,重启生效,编辑 /etc/sysctl.conf 文件,追加:

vm.swappiness=1

不重启修改设置(系统重启会恢复为默认值)

sudo sysctl -w vm.swappiness=1

挂载磁盘

格式化

格式化为ext4格式,以磁盘/dev/vdb为例,命令如下:

mkfs.ext4 /dev/vdb

挂载

示例:将磁盘/dev/vdb挂载到目录/data/1
1、创建挂载目录:

mkdir -p /data/1

2、配置/etc/fstab文件,追加行:

/dev/vdb	/data/1	ext4	defaults	0	0

3、挂载:

mount -a

重启系统

完成上述配置后,重启系统。

部署FreeIPA(可选)

如果需要集成FreeIPA,建议优先部署FreeIPA。
Centos7部署FreeIPA

部署Cloudera Manager

操作机器:utility1.bigdata.zxxk.com

制作Cloudera Manager系统源

设置web服务

安装httpd服务,并启动。

yum install httpd
systemctl start httpd
systemctl enable httpd

下载并发布安装包库

下载

wget https://archive.cloudera.com/cm6/6.3.1/repo-as-tarball/cm6.3.1-redhat7.tar.gz

发布

mkdir -p /var/www/html/cloudera-repos/cm6/6.3.1
tar xvfz cm6.3.1-redhat7.tar.gz -C /var/www/html/cloudera-repos/cm6/6.3.1 --strip-components=1
wget -P /var/www/html/cloudera-repos/cm6/6.3.1 https://archive.cloudera.com/cm6/6.3.1/allkeys.asc
chmod -R ugo+rX /var/www/html/cloudera-repos/cm6/6.3.1

配置系统源

创建 /etc/yum.repos.d/cloudera-repo.repo 文件,写入以下内容:

[cloudera-manager]
name=Cloudera Manager 6.3.1
baseurl=http://utility1.bigdata.zxxk.com/cloudera-repos/cm6/6.3.1/
gpgkey=http://utility1.bigdata.zxxk.com/cloudera-repos/cm6/6.3.1/RPM-GPG-KEY-cloudera
gpgcheck=1
enabled=1
autorefresh=0
type=rpm-md

更新系统源:yum update

安装Cloudera Manager Server

安装JDK

集群所有主机都需要安装JDK。
CDH6.3及以上支持jdk1.8,这里使用openjdk1.8,安装命令如下:

yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

安装Cloudera Manager包

安装命令如下:

yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server

安装并配置数据库

1、数据库使用MariaDB,安装命令如下:

yum install mariadb-server

2、配置数据库
停止数据库服务:

systemctl stop mariadb

编辑 /etc/my.cnf 文件,按照如下信息进行配置:

[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

3、启动数据库并设置root密码
启动:

systemctl start mariadb
systemctl enable mariadb

设置root密码:

/usr/bin/mysql_secure_installation

交互如下:

[...]
Enter current password for root (enter for none):
OK, successfully used password, moving on...
[...]
Set root password? [Y/n] Y
New password:
Re-enter new password:
[...]
Remove anonymous users? [Y/n] Y
[...]
Disallow root login remotely? [Y/n] N
[...]
Remove test database and access to it [Y/n] Y
[...]
Reload privilege tables now? [Y/n] Y
[...]
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

4、安装MySQL JDBC Driver
使用yum安装的MySQL JDBC驱动包对于MariaDB不可用,这里手动下载安装。
下载地址:http://www.mysql.com/downloads/connector/j/5.1.html 这里使用5.1.49,下载命令如下:

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.49.tar.gz

解压

tar zxvf mysql-connector-java-5.1.49.tar.gz

安装

mkdir -p /usr/share/java/
cd mysql-connector-java-5.1.49
cp mysql-connector-java-5.1.49-bin.jar /usr/share/java/mysql-connector-java.jar

5、创建数据库
部分服务依赖数据库服务存储数据,需要在MariaDB中为服务创建相应的数据库。
进入MariaDB:

mysql -u root -p

为将要安装的服务创建数据库并授权:

IDENTIFIED BY 用户创建用户密码,请不要创建过于简单的密码,同时注意将密码记录下来,以备后续使用。

CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';

CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'amon';

CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'rman';

CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue';

CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';

CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'sentry';

CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie';

数据库备份:https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cm_ag_backup_dbs.html#cm_ag_backup_dbs_mariadb

设置Cloudera Manager数据库

设置命令如下:

/opt/cloudera/cm/schema/scm_prepare_database.sh [options] <databaseType> <databaseName> <databaseUser> <password>

按照上述创建的数据库信息,设置命令示例如下:

/opt/cloudera/cm/schema/scm_prepare_database.sh -h localhost mysql scm scm scm

启动Cloudera Manager Server

启动命令:

systemctl start cloudera-scm-server

执行启动命令之后,监控日志:

tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log

当出现以下信息时,访问 http://utility1.bigdata.zxxk.com:7180:

INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.

默认管理员用户信息:admin/admin

部署CDH

制作CDH Parcels源

制作cdh6 parcels源

mkdir -p /var/www/html/cloudera-repos/cdh6/6.3.2/parcels
wget -P /var/www/html/cloudera-repos/cdh6/6.3.2/parcels https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
wget -P /var/www/html/cloudera-repos/cdh6/6.3.2/parcels https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1
wget -P /var/www/html/cloudera-repos/cdh6/6.3.2/parcels https://archive.cloudera.com/cdh6/6.3.2/parcels/manifest.json
mv /var/www/html/cloudera-repos/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 /var/www/html/cloudera-repos/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
chmod -R ugo+rX /var/www/html/cloudera-repos/cdh6

制作gplextras6 parcels源

mkdir -p /var/www/html/cloudera-repos/gplextras6/6.3.2/parcels
wget -P /var/www/html/cloudera-repos/gplextras6/6.3.2/parcels https://archive.cloudera.com/gplextras6/6.3.2/parcels/GPLEXTRAS-6.3.2-1.gplextras6.3.2.p0.1605554-el7.parcel
wget -P /var/www/html/cloudera-repos/gplextras6/6.3.2/parcels https://archive.cloudera.com/gplextras6/6.3.2/parcels/GPLEXTRAS-6.3.2-1.gplextras6.3.2.p0.1605554-el7.parcel.sha1
wget -P /var/www/html/cloudera-repos/gplextras6/6.3.2/parcels https://archive.cloudera.com/gplextras6/6.3.2/parcels/manifest.json
mv /var/www/html/cloudera-repos/gplextras6/6.3.2/parcels/GPLEXTRAS-6.3.2-1.gplextras6.3.2.p0.1605554-el7.parcel.sha1 /var/www/html/cloudera-repos/gplextras6/6.3.2/parcels/GPLEXTRAS-6.3.2-1.gplextras6.3.2.p0.1605554-el7.parcel.sha
chmod -R ugo+rX /var/www/html/cloudera-repos/gplextras6

存储库设置

登入Cloudera Manager Server Web之后,开始创建集群,按照步骤执行,到达 选择存储库 环节时,需要进行自定义配置。

CDH yarn开启高可用 cdh高可用部署方案_CDH yarn开启高可用

配置Cloudera Manager Agent

此处配置Cloudera Manager Agent存储库,在上文操作中,已经创建了本次存储库,这里在自定义存储库选项填写本地存储库地址,如图:

CDH yarn开启高可用 cdh高可用部署方案_html_02

配置CDH存储库

上文操作中,已创建了Parcels源,这里的 选择方法 选项选择 使用Parcel(建议) ,如图:

CDH yarn开启高可用 cdh高可用部署方案_CDH yarn开启高可用_03


点击 更多选项 按钮,配置Parcels源,删除自带的Parcels源,添加自定义的本地Parcels源,结果如图:

gplextras6可以在用到的时候再配置。

CDH yarn开启高可用 cdh高可用部署方案_cloudera_04

保存之后,Cloudera Manager Server将自动识别到自定义的Parcels源,如图:

CDH yarn开启高可用 cdh高可用部署方案_html_05


点击继续,继续安装集群。

服务分配

主机

主要服务

Master Host 1

NameNode

JournalNode

FailoverController

YARN ResourceManager

ZooKeeper

JobHistory Server

Master Host 2

NameNode

JournalNode

FailoverController

YARN ResourceManager

ZooKeeper

HBase Master

Master Host 3

Spark History Server

JournalNode (requires dedicated disk)

ZooKeeper

HBase Master

Utility Host 1

Cloudera Manager

Cloudera Manager Management Service

Hive Metastore

Impala Catalog Server

Impala StateStore

Oozie

Sentry

Gateway Host 1

Hue

HiveServer2

Sqoop 1 Client

Gateway configuration

Worker Hosts

DataNode

NodeManager

Impalad

HBase RegionServer

Kafka Hosts

Kafka broker

安装服务注意事项

HDFS

关键配置

说明

示例配置

dfs.datanode.data.dir

hdfs数据存储目录列表,每个目录对应一个物理磁盘,目录个数推荐:8

/data/1/dfs/dn,/data/2/dfs/dn

dfs.namenode.name.dir

hdfs元数据存储目录列表,每个目录对应一个物理磁盘,目录个数推荐:2

/data/1/dfs/nn,/data/2/dfs/nn

dfs.namenode.checkpoint.dir

Secondary NameNode检查点目录

/data/1/dfs/snn,/data/2/dfs/snn

dfs.journalnode.edits.dir

journalnode编辑目录。可以在启用HA的时候配置此项。

/data/dfs/jn

YARN

关键配置

说明

示例配置

yarn.nodemanager.local-dirs

NodeManager存储中间数据的目录列表,配置到每个数据盘

/data/1/yarn/nm,/data/2/yarn/nm

yarn.nodemanager.log-dirs

NodeManager存储容器日志文件的目录列表,配置每个数据盘

/data/1/yarn/container-logs,/data/2/yarn/container-logs

Impala

关键配置

说明

示例配置

scratch_dirs

Impala溢写目录列表

/data/1/impala/impalad,/data/2/impala/impalad

Kafka

关键配置

说明

示例配置

log.dirs

Kafka数据存储目录

/data/1/kafka/data,/data/2/kafka/data

offsets.topic.num.partitions

偏移量topic分区数,部署后不可更改

默认值50,建议100-200

Hue

关键配置

说明

配置

time_zone

时区

Asia/Shanghai

Oozie

关键配置

说明

配置

oozie.processing.timezone

时区。在Cloudera Manager的Oozie服务配置中搜索oozie-site.xml,添加此配置。修改配置后,hue使用oozie的bundles功能会有问题,不过,暂时不需要使用bundles功能。

GMT+0800

安装之后

安装LZO压缩

安装
1、集群各节点安装lzo:

yum install lzo

2、Cloudera Manager下载、分发并激活gplextras6 parcel。
oozie邮件服务器配置
主要配置如下:

配置

说明

oozie.email.smtp.host

用于 Oozie 电子邮件操作的 SMTP 服务器主机

oozie.email.from.address

Oozie 电子邮件操作用于邮寄所有邮件的发件人地址

oozie.email.smtp.auth

启用对 Oozie 电子邮件操作的 SMTP 身份验证

oozie.email.smtp.username

用于 Oozie 电子邮件操作的 SMTP 用户名

oozie.email.smtp.password

用于 Oozie 电子邮件操作的 SMTP 密码

oozie.email.smtp.port

用于 Oozie 电子邮件操作的 SMTP 服务器端口

启用HA及注意事项

HDFS

注意事项

1、NameNode主机应该具有相同的硬件配置。
2、JournalNode服务部署在master主机上是更好的选择。
3、NameNode和JournalNode都应该拥有专用的磁盘。
4、JournalNode服务至少部署三个,并保持服务数量是奇数。
5、每个JournalNode的 JournalNode Edits Directory 属性可以不相同,但目录必须是空的。
6、 JournalNode Edits Directory 属性指定的目录的拥有者必须是 hdfs:hadoop ,而且必须拥有读写和执行权限(drwx------)。
7、当前的master节点在format时会失败,可以忽略。

启用HA

1、选择HA主机和jounalnode编辑目录,按照向导启用。
2、配置其他服务使用HDFS HA

  1. 依次停止Hue,Impala和Hive服务。
  2. 配置Hive。操作 > 更新Hive Metastore NameNodes 。
  3. 配置Hue。HDFS增加HttpFS服务,在Hue中配置HDFS Web 界面角色,选择刚才配置的HttpFS。
  4. 按照提示重启。

YARN

选择HA主机,按照向导启用。

HBase

选择HA主机,增加一个HBase Master实例。

启用安全

安全策略使用Kerberos + Sentry。

启用Kerberos

重要:在启用Kerberos之前,请将需要的CDH平台的功能配置完全,避免启用Kerberos之后添加新功能。如果在启用Kerberos之后添加新的功能,容易出现问题。

有两个选择:
1、FreeIPA
2、MIT Kerberos
推荐使用FreeIPA。

集成FreeIPA

CDH6.3.2集成FreeIPA

集成MIT Kerberos

CentOS7部署MIT KerberosCDH6.3.2集群集成MIT Kerberos

启用授权

CDH6.3.2集群启用授权