1 前期规划选型
如果是生产环境,建议从以下几方面考虑集群的规划
1.1 硬件确定
可以选用服务器、普通PC、还是云服务。
一是项目实际需求,二还要结合预算情况、现有的条件来选择。
1.2 集群规模确定
从数据量、计算性能要求、可靠稳定性、容错性等方面考虑。
数据量现有数据量(如现有历史数据)和增量数据(日增、月增数据,一般需要考虑满足1-2年的容量,后续再扩容);数据的副本数(Hadoop默认3副本,乘3倍);数据清洗、融合加工处理、共享等过程产生的,中间表、指标表、主题/专题库等表(乘3-5倍)。注意:HDFS上不同格式的表压缩比也不一样,如文本txt表不压缩,orc有一定的压缩比(1:3),HBase(看是否采用压缩),ES看索引是否有膨胀;储存的冗余量 + 20-30%;
如:现有各种形式的数据量总共30TB,月增数据1TB(算未来24个月),全部都要放到HDFS中存储,默认3副本,ETL数据处理全部用txt表(共享服务HBase、ES等混用)就按照1:1的压缩比储存,算上ODS、清洗融合加工中间表、指标表、主题库/专题课等取4倍。如下计算:
(30 + 1* 24) * 3 * 4 * 1.25 = 810 TB
需要总的磁盘空间810TB,如果是10个数据储存节点,那么每个节点至少要大于81TB的空间,可以挂 9块* 10TB。计算
根据使用到的大数据组件服务来预估
如基于内存的服务对内存的要求,对磁盘IO使用比较频繁的是否考虑多块盘,清洗融合加工频繁的对cpu的要求等等可靠稳定性
集群规模大的,需要区分管理节点、数据储存和计算节点(或者叫工作节点)。容错性
如果考虑对各个服务或者某些服务做HA的,需要再考虑加节点资源。
如果考虑做灾备集群的,需要再加1倍的资源。
此外,还要考虑网络,是否是双网口?千兆还是万兆网络?
从上面几方面确定集群规模,节点数、每个节点的物理配置(CPU、Memery、磁盘空间)、集群网络等
1.3 软件版本确定
操作系统JDK版本CM/CDH版本(包含hadoop、spark等版本是否满足实际需求)元数据库(如MySQL)
2 安装前准备
2.1 修改hosts
CDH 需要 IPv4。不支持 IPv6。
sudo hostnamectl set-hostname douluo01
sudo hostnamectl set-hostname douluo02
sudo hostnamectl set-hostname douluo03
2.2 配置节点的IP-主机名映射信息
douluo01:~$ cat /etc/hosts
192.168.88.150 douluo01 douluo01.devopstack.com
192.168.88.151 douluo02 douluo02.devopstack.com
192.168.88.152 douluo03 douluo03.devopstack.com
2.3 禁用防火墙
sudo service ufw stop
2.4 配置免密登录(所有节点)
生成ssh key:
ssh-keygen -t rsa (每个节点执行)
douluo01上操作互信配置:
ssh-copy-id -i ~/.ssh/id_rsa.pub douluo02
ssh-copy-id -i ~/.ssh/id_rsa.pub douluo03
douluo02、douluo03上同上面操作类似,完成互信配置。
2.5 设置swap空间、关闭大页面压缩(所有节点)——性能考虑
1.swap空间设置
swappiness=0:表示最大限度使用物理內存,之后才是swap空间;
swappiness=100:表示积极使用swap分区,並且把內存上的数据及时转移到swap空间;
如果是混合服务器,不建议完全禁用swap,可以尝试降低swappiness。
Cloudera 建议将 /proc/sys/vm/swappiness 设置为 10(也有说改为0的,Cloudera建议将交换空间设置为0,过多的交换空间会引起GC耗时的激增。)。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。
echo 10 > /proc/sys/vm/swappiness
这样操作重启机器还是还原,要永久改变:
echo "vm.swappiness = 10" >> /etc/sysctl.conf
2.已启用透明大页面压缩,可能会导致重大性能问题,建议禁用此設置。
调整:
echo never |sudo tee /sys/kernel/mm/transparent_hugepage/defrag
echo never |sudo tee /sys/kernel/mm/transparent_hugepage/enabled
2.6 修改最大打开文件数
echo "ulimit -SHn 65535" >> /etc/rc.local
echo "* soft nofile 65535" >>/etc/security/limits.conf
echo "* hard nofile 65535" >>/etc/security/limits.conf
echo "* soft nproc 65535" >>/etc/security/limits.conf
echo "* hard nproc 65535" >>/etc/security/limits.conf
2.7 NTP服务安装和设置
安装NTP(所有节点)
yum -y install ntp
Manager节点:
设置指向NTP服务器,如果局域网内有时间服务器,可以指向时间服务器(manager节点-cdh01)
vi /etc/ntp.conf
注释掉之前的server,然后添加以下NTP服务器
server http://ntp.aliyun.com
其他节点:
vi /etc/ntp.conf
集群的其他节点指向第一个(cdh02、cdh03)
server cdh01
重新启动 ntp 服务和设置开机自启(所有节点):
service ntpd restart
systemctl enable ntpd.service
查看和测试:
ntpdc -c loopinfo #查看与时间同步服务器的时间偏差
ntpq -p #查看当前同步的时间服务器
ntpstat #查看状态定时同步crontab
crontab -e #可以不用设置
10 * * * * /usr/sbin/ntpdate 192.168.88.150
2.8 配置sudo免密
sudo visudo
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
devopstack ALL=(ALL:ALL) NOPASSWD:ALL
3 安装配置cm
CDH安装包下载 CDH官方的网站已经无法直接下载安装包了(需要账号密码),需要相关软件包的可以联系我
3.1 创建 Ubuntu 的 repository
sudo apt-get install dpkg-dev
sudo apt-get install apache2
service apache2 start
sudo systemctl enable apache2
cd /var/www/html/
sudo cp -r p /var/www/html/
sudo chmod -R 777 html/
将 CM 的源加入到 source 文件
cat /etc/apt/sources.list.d/cloudera-manager.list
# Cloudera Manager 6.3.1
deb [arch=amd64] http://192.168.88.150/p/cm6/6.3.1/ubuntu1804/apt bionic-cm6.3.1 contrib
sudo apt-key add /var/www/html/p/cm6/6.3.1/ubuntu1804/apt/archive.key
sudo apt-get update
3.2 安装oracle-j2sdk1.8(cdh01)
sudo apt-get install oracle-j2sdk1.8
3.3 安装cloudera-manager和agent(cdh01)
sudo apt-get install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
3.4 安装 MYSQL 数据库以及 jdbc
3.5 创建cm相关数据库
\#创建数据库并授权
sudo mysql -h27.0.0.1 -uroot -p
create database amon default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on amon.* to 'amon'@'localhost' identified by 'amon';
grant all privileges on amon.* to 'amon'@'%' identified by 'amon';
create database rman default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on rman.* to 'rman'@'localhost' identified by 'rman';
grant all privileges on rman.* to 'rman'@'%' identified by 'rman';
create database metastore default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on metastore.* to 'hive'@'localhost' identified by 'hive';
grant all privileges on metastore.* to 'hive'@'%' identified by 'hive';
create database sentry default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on sentry.* to 'sentry'@'localhost' identified by 'sentry';
grant all privileges on sentry.* to 'sentry'@'%' identified by 'sentry';
create database nav default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on nav.* to 'nav'@'localhost' identified by 'nav';
grant all privileges on nav.* to 'nav'@'%' identified by 'nav';
create database navms default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on navms.* to 'navms'@'localhost' identified by 'navms';
grant all privileges on navms.* to 'navms'@'%' identified by 'navms';
create database scm default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on scm.* to 'scm'@'localhost' identified by 'scm';
grant all privileges on scm.* to 'scm'@'%' identified by 'scm';
create database hue default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on hue.* to 'hue'@'localhost' identified by 'hue';
grant all privileges on hue.* to 'hue'@'%' identified by 'hue';
create database oozie default character set utf8 DEFAULT COLLATE utf8_general_ci;
grant all privileges on oozie.* to 'oozie'@'localhost' identified by 'oozie';
grant all privileges on oozie.* to 'oozie'@'%' identified by 'oozie';
3.6 设置Cloudera Manager数据库
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql amon amon amon
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql rman rman rman
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql hue hue hue
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql metastore hive hive
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql sentry sentry sentry
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql nav nav nav
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql navms navms navms
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql oozie oozie oozie
3.7 启动cm
#启动cloudera-scm-server
sudo systemctl start cloudera-scm-server
sudo systemctl enable cloudera-scm-server
#查看启动日志,等待Jetty启动完成
sudo tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
3.8 浏览器访问安装
浏览器输入http://192.168.88.150:7180/ 用户/密码:admin/admin 按照向导搭建集群。 如果搭建集群遇到Could not find a HOST_MONITORING nozzle from SCM错误,则/etc/hosts添加127.0.0.1 localhost
添加主机
使用 Parcels(建议)
这个远程Parcel储存库URL就保留一个,用本地的那个parcel,修改成http://192.168.88.150/p/cdh6/6.3.2/parcels/就可以了,不要连CDH官网的了地址。
选择安装jdk
提供 SSH 登录凭据
安装agent,安装完点击继续
Parcel 包安装,安装完后点击“继续”
进入cm界面安装服务
安装hdfs
安装zookeeper
安装yarn
安装hbase
安装Cloudera Management Service 服务
4 最终的cm界面
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫