此方案包含部分实施要点,作为部署实施参考。主要针对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之后,开始创建集群,按照步骤执行,到达 选择存储库 环节时,需要进行自定义配置。
配置Cloudera Manager Agent
此处配置Cloudera Manager Agent存储库,在上文操作中,已经创建了本次存储库,这里在自定义存储库选项填写本地存储库地址,如图:
配置CDH存储库
上文操作中,已创建了Parcels源,这里的 选择方法 选项选择 使用Parcel(建议) ,如图:
点击 更多选项 按钮,配置Parcels源,删除自带的Parcels源,添加自定义的本地Parcels源,结果如图:
gplextras6可以在用到的时候再配置。
保存之后,Cloudera Manager Server将自动识别到自定义的Parcels源,如图:
点击继续,继续安装集群。
服务分配
主机 | 主要服务 |
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
- 依次停止Hue,Impala和Hive服务。
- 配置Hive。操作 > 更新Hive Metastore NameNodes 。
- 配置Hue。HDFS增加HttpFS服务,在Hue中配置HDFS Web 界面角色,选择刚才配置的HttpFS。
- 按照提示重启。
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集群启用授权