作者:李继武
1
基础设施
2.1
硬件配置
机器名称 | 系统版本 | 配置 | 用途 | |
---|---|---|---|---|
gdodsdcs2(128.18.9.209) | SLES12 SP3 | CPU | 16Cores | CM节点 |
内存 | 32GB | |||
硬盘 | 80GB(raid1,安装操作系统)100GB * 1 数据盘 | |||
gdodsspark1(128.18.9.202) | SLES12 SP3 | CPU | 56Cores | Master节点兼数据节点 |
内存 | 356GB | |||
硬盘 | 280GB(安装操作系统)1.5TB * 6数据盘(SAT)1.1TB * 1数据盘(SSD)1.7TB * 1数据盘(SSD) | |||
gdodsspark2(128.18.9.203) | SLES12 SP3 | CPU | 56Cores | Master节点兼数据节点 |
内存 | 356GB | |||
硬盘 | 280GB(安装操作系统)1.5TB * 6数据盘(SAT)1.1TB * 1数据盘(SSD)1.7TB * 1数据盘(SSD) | |||
Gdodsspark[3-6](128.18.9.20[4-7]) | SLES12 SP3 | CPU | 56Cores | DataNode节点 |
内存 | 356GB | |||
硬盘 | 280GB(安装操作系统)1.5TB * 6数据盘(SAT)1.1TB * 1数据盘(SSD)1.7TB * 1数据盘(SSD) |
2.2
软件环境
操作系统 | SLES12 SP3 |
---|---|
CM | 6.1.0 |
JDK | 1.8.0_141 |
CDH | 6.1.0 |
Hadoop | 3.0.0 |
Hive | 2.1.1 |
Spark | 2.4.0 |
Zookeeper | 3.4.5 |
sqoop | 1.4.7 |
Postgresql | 9.6.10 |
2.3
角色部署
类型 | IP地址 | 安装服务 |
---|---|---|
管理节点1 | 128.18.9.209 | Cloudera Manager、Cloudera Manager Service |
管理节点2 | 128.18.9.202 | NameNode(Standby)、JournalNode、FailoverController、Zookeeper、ResourceManager(Active)、 JournalNode、Zookeeper、Balancer、Hive MetaStore、Gateway、DateNode、Hive Server2、NodeManager、SparkHistory Server |
管理节点3 | 128.18.9.203 | NameNode(Active)、JournalNode、FailoverController、Zookeeper、ResourceManager(Standby)、HiveServer2、Gateway、Hive MetaStore、JobHistory ServerDateNode、NodeManager |
数据节点 | 128.18.9.204 | DataNode、NodeManager、Gateway、JournalNode、Zookeeper |
数据节点 | 128.18.9.20[5-7] | DataNode、NodeManager、Gateway |
2.4
Access UI
Service Name | Address | Username/Password |
---|---|---|
Cloudera Manager | http://128.18.9.209:7180 | admin/admin |
2.5
Postgresql
元数据库使用的是外部数据库:Postgresql数据库
Address:128.18.9.208:5432
Database | Username | Password | Remark |
---|---|---|---|
metastore | hive | HivePostgres | Database of Hive metastore |
am | am | AmPostgres | Database of Activity Monitor |
cm | cm | CmPostgres | Database of Cloudera Manager |
rm | rm | RmPostgres | Database of Reports Manager |
2.6
数据目录信息
服务 | 角色 | 目录 |
---|---|---|
CM | Service Monitor | /data1/var/lib/ cloudera-service-monitor |
Host Monitor | /data1/var/lib/cloudera-host-monitor | |
Event Server | /data1/var/lib/cloudera-scm-eventserver | |
Reports Manager | /data1/var/lib/cloudera-scm-headlamp | |
HDFS | NameNode | /sdata1/dfs/nn |
JournalNode | /data1/dfs/jn | |
Datanode | /data1/dfs/dn/data2/dfs/dn/data3/dfs/dn/data4/dfs/dn/data5/dfs/dn/data6/dfs/dn/sdata1/dfs/dn/sdata2/dfs/dn | |
YARN | nodeManager | /data1/yarn/nm/data2/yarn/nm/data3/yarn/nm/data4/yarn/nm/data5/yarn/nm/data6/yarn/nm |
Zookerper | Zookerper | /data1/var/lib/zookerper |
3
集群基本配置及部署安装
因节点之间通过root用户相互ssh的权限被关闭,所以不能使用控制台自动化安装agent,需要手动到所有节点安装agent,并修改相关配置。
3.1
前置准备
以下条件原集群已配置完成:
Hosts文件已配置
Ntp时钟同步
防火墙已关闭
Selinux已关闭
1. 修改swappiness
代码语言:javascript复制echo "vm.swappiness = 1" >> /etc/sysctl.conf
echo 1> /proc/sys/vm/swappiness
2. 从系统镜像挂载点配置repo
vim /etc/zypp/repos/iso.repo
代码语言:javascript复制[iso]
name=iso
enabled=1
autorefresh=0
baseurl=file:///mnt
path=/
type=yast2
keeppackages=0
3. 安装httpd
代码语言:javascript复制zypper install httpd
4. 利用httpd制作系统镜像本地zypper源
代码语言:javascript复制mkdir /srv/www/htdocs/iso
cp /mnt/* /srv/www/htdocs/iso
cd /srv/www/htdocs/iso
zypper install createrepo
createrepo .
在apache2的配置文件中添加该文件夹
vim /etc/apache2/httpd.conf
代码语言:javascript复制<Directory "/srv/www/htdocs/iso">
Option Indexes AllowFollowSymLinks
AllowOverride None
</Directory>
5. 利用httpd制作cm本地zypper源和parcel源
代码语言:javascript复制mkdir /srv/www/htdocs/cm6.1.0
mkdir /srv/www/htdocs/cdh6.1.0
将cm的安装包上传到cm6.1.0目录下,特别注意的是,SUSE系统还需要下载一个python-psycopg2依赖包上传到cm6.1.0下
代码语言:javascript复制cd /srv/www/htdocs/cm6.1.0
createrepo .
在apache2的配置文件中添加这两个文件夹
vim /etc/apache2/httpd.conf
代码语言:javascript复制<Directory "/srv/www/htdocs/cm6.1.0">
Option Indexes AllowFollowSymLinks
AllowOverride None
</Directory>
<Directory "/srv/www/htdocs/cdh6.1.0">
Option Indexes AllowFollowSymLinks
AllowOverride None
</Directory>
6. 所有节点配置镜像源和cm源
vim /etc/zypp/repos/iso.repo
代码语言:javascript复制[iso]
name=iso
enabled=1
autorefresh=0
baseurl=http://128.18.9.202/iso
type=rpm-md
gpgcheck=0
vim /etc/zypp/repos/cm.repo
代码语言:javascript复制[cm]
name=cm
enabled=1
autorefresh=0
baseurl=http://128.18.9.202/cm6.1.0
type=rpm-md
gpgcheck=0
3.2
CM节点安装server、agent
1. 安装jdk1.8
代码语言:javascript复制zypper install oracle-j2sdk1.8
2. 安装cloudera-manager-server、cloudera-manager-agent
代码语言:javascript复制zypper install cloudera-manager-server cloudera-manager-agent
3. 修改agent的配置文件,修改其连接的server主机,log目录以及lib目录
代码语言:javascript复制vim /etc/cloudera-scm-agent/config.ini
在数据盘下创建目录
代码语言:javascript复制mkdir -p /data1/var/lib
mkdr -p /data1/var/log
将原来的目录移到这两个目录下
代码语言:javascript复制mv /var/lib/cloudera-scm-agent /data1/var/lib
mv /var/log/cloudera-scm-agent /data1/var/log
启动agent
代码语言:javascript复制systemctl start cloudera-scm-agent
4. 修改server的启动脚本,配置log目录
代码语言:javascript复制vim /opt/cloudera/cm/bin/cm-server
将目录文件移到数据盘上
代码语言:javascript复制mv /var/log/cloudera-scm-server /data1/var/log
5. 初始化cloudera-scm-server的数据库
代码语言:javascript复制sh /opt/cloudera/cm/schema/scm_prepare_database.sh -h128.18.9.208 -P5432 postgresql cm cm CmPostgres
6. 配置postgresql数据库驱动
将驱动上传到httpd节点的/srv/www/htdocs/cdh6.1.0目录下,其他节点通过wget进行拉取
代码语言:javascript复制mkdir -p /usr/share/java
cd /usr/share/java
wget http://128.18.9.202/cdh6.1.0/postgresql-42.2.2.jar
ln -s postgresql-42.2.2.jar postgresql-connector-java.jar
7. 启动server
代码语言:javascript复制systemctl start cloudera-scm-server
3.3
其他节点安装agent
剩余节点都需要手动执行以下操作,手动安装agent并修改配置
1. 安装jdk1.8
代码语言:javascript复制zypper install oracle-j2sdk1.8
2. 安装cloudera-manager-agent
代码语言:javascript复制zypper install cloudera-manager-agent
3. 修改agent的配置文件,修改其连接的server主机,log目录以及lib目录
代码语言:javascript复制vim /etc/cloudera-scm-agent/config.ini
在数据盘下创建目录
代码语言:javascript复制mkdir -p /sdata1/var/lib
mkdr -p /sdata1/var/log
将原来的目录移到这两个目录下
代码语言:javascript复制mv /var/lib/cloudera-scm-agent /sdata1/var/lib
mv /var/log/cloudera-scm-agent /sdata1/var/log
4. 配置postgresql数据库驱动
代码语言:javascript复制mkdir -p /usr/share/java
cd /usr/share/java
wget http://128.18.9.202/cdh6.1.0/postgresql-42.2.2.jar
ln -s postgresql-42.2.2.jar postgresql-connector-java.jar
5. 启动agent
代码语言:javascript复制systemctl start cloudera-scm-agent
3.4
修改数据盘所属用户及权限
由于原来数据盘都是由ods用户挂载,并且权限是700,这将导致root安装集群时无法生成所需目录,最终安装失败
修改这些数据盘目录所属用户为root,所属用户组为root,权限赋予755
代码语言:javascript复制chown root:root /data1
chown root:root /data2
chown root:root /data3
chown root:root /data4
chown root:root /data5
chown root:root /data6
chown root:root /sdata1
chown root:root /sdata2
chmod 755 /data1
chmod 755 /data2
chmod 755 /data3
chmod 755 /data4
chmod 755 /data5
chmod 755 /data6
chmod 755 /sdata1
chmod 755 /sdata2
4
控制台安装
1. 打开http://128.18.9.209:7180,以admin/admin登录
2. 点“继续”
3. 勾选同意,点继续
4. 选择“60天试用版”,点击继续
5. 点击“继续”
6. 点击“当前管理主机”,全部勾选,点击“继续”
7. 点击“更多选项”
8. 将其他的parcel路径删掉,添加自己制作的parcel包下载路径
9. 点击继续
10. 开始下载并分发parcel包,等待下载分发激活完成
11. 确保下方的主机检查项全部通过,点击“继续”
12. 点击“自定义服务”,勾选需要的服务
13. 输入元数据库的信息,测试连接
14. 配置相关目录
Datenode数据目录暂时默认即可,后期根据不同的节点分配不同的角色组,来分配不同的目录。
Namenode数据目录:
SecondaryNamenode数据目录:
CM服务数据目录:
NodeManager数据目录:
Zookeeper数据目录:
15. 点击“继续”,等待安装完成。
16. 配置DataNode目录,先配置角色组,设置Datanode角色为三个组,Datenode Default Group,onlywithzk,withnamenode:
17. 根据不同的角色来分配datanode目录,以为namenode、zk、journalNode留出独立的数据盘:
5
启用HA
本集群启用了HDFS,YARN的高可用
JournalNode数据目录为:
6
配置组件的log,tmp等目录
7
集群基本配置
7.1
Cloudera Manager
这些服务主要是提供监控功能,目前的调整主要集中在内存放,以便有足够的资源完成集群管理。
服务 | 选项 | 配置值 |
---|---|---|
Activity Monitor | Java Heap Size | 4GB |
Service Monitor | Java Heap Size | 4GB |
Host Monitor | Java Heap Size | 4GB |
Event Server | Java Heap Size | 4GB |
Alert Publisher | Java Heap Size | 2GB |
Reports Manager | Java Heap Size | 4GB |
7.2
HDFS配置
服务 | 选项 | 配置值 |
---|---|---|
NameNode | Java Heap Size | 4GB |
dfs.namenode.handler.countNameNode处理程序计数 | 54 | |
dfs.datanode.fsdataset.volume.choosing.policyDataNode 卷选择策略 | Round Robin | |
dfs.namenode.avoid.read.stale.datanode避免读取失效 DataNode | false | |
dfs.namenode.write.stale.datanode.ratio写入失效 DataNode 比率 | 0.5 | |
dfs.namenode.safemode.threshold-pctSafemode 阈值百分比 | 0.999 | |
dfs.umaskmode默认值 Umask | 022 | |
DataNode | Java Heap Size | 1GB |
dfs.datanode.handler.countDataNode处理程序计数 | 3 | |
dfs.datanode.max.xcieversDataNode最大传输线程数 | 4096 | |
JournalNode | Java Heap Size | 1GB |
Failover Controller | Java Heap Size | 512MB |
7.3
YARN配置
服务 | 选项 | 配置值 |
---|---|---|
ResourceManager | Java Heap Size | 4GB |
yarn.scheduler.minimum-allocation-mb最小容器内存 | 1GB | |
yarn.scheduler.increment-allocation-mb容器增量内存 | 512MB | |
yarn.scheduler.maximum-allocation-mb最大容器内存 | 230GB | |
yarn.scheduler.minimum-allocation-vcores最小容器虚拟内核 | 1 | |
yarn.scheduler.increment-allocation-vcores容器虚拟内核增量 | 1 | |
yarn.scheduler.maximum-allocation-vcores最大容器虚拟内核 | 56 | |
yarn.resourcemanager.recovery.enabled启用 ResourceManager Recovery | false | |
NodeManager | Java Heap Size | 1GB |
yarn.nodemanager.resource.memory-mb容器内存 | 230GB | |
yarn.nodemanager.resource.cpu-vcores容器虚拟内核数量 | 56 | |
yarn.nodemanager.remote-app-log-dir删除应用程序日志目录 | /tmp/logs | |
Gateway | mapreduce.map.memory.mbMap 任务内存 | 2GB |
mapreduce.reduce.memory.mbReduce 任务内存 | 4GB | |
yarn.app.mapreduce.am.resource.mbApplicationMaster 内存 | 1GB |
7.4
Zookeeper配置
服务 | 选项 | 配置值 |
---|---|---|
Zookeeper | maxClientCnxns最大客户端连接数 | 180 |
Java Heap Size | 1GB | |
maxSessionTimeout最大会话超时 | 120000 |
7.5
Hive配置
服务 | 选项 | 配置值 |
---|---|---|
HiveServer2 | Java Heap Size | 4GB |
Hive MetaStore | Java Heap Size | 8GB |
Hive Gateway | Java Heap Size | 2GB |