cdh的好处,一键启动和关闭组件,可以拓展各种组件,可以直接查看某个组件的日志,以及监控状态。核心就是不需要你在去用命令启动,和关闭。最好的,我觉得是,比如你hbase出了问题,要去维护,你不需要手动先去关闭hdfs、hive等,你只用点一下关闭hdfs的按钮,他会自动帮你先去关闭哪些依赖的组件,如果你点的是关闭hbase集群,你不需要一台一台点,也不用自己写脚本,他也会帮你挨着关闭。启动也是一样。
目录
如果你的虚拟机给的内存少于14G,不用往下看了,机器压力非常大,建议先装内存条。
我们做大数据的,机器就是要大硬盘,大内存,高核cpu,其他无所谓,如果要做机器学习,那你显卡还得很好。
执行 sudo yum -y install cloudera-manager-daemons cloudera-manager-server出现拒绝连接
没有可用软件包 cloudera-manager-daemons。没有可用软件包 cloudera-manager-agent。错误:无须任何处理
cdh scm_prepare_database.sh脚本执行后没有反应,mysql的scm库中没有相关表
cdh执行/opt/cloudera/cm/schema/scm_prepare_database.sh出现错误
时隔2年,重新复习一遍
6.3是社区的免费版,再往后是收费版
文档老了,花了2天,解决完所有bug,先来一张图

又花了1天,把集群内部东西全部修复

我打算全部删除,重新来一次,文档要修改的非常细,这样我以后就可以3小时内搭完。
官方建议,主节点内存32GB,2核心以上,从节点16GB,2核以上
虚拟机化测试,官方建议,社区版,最低要求每台8G,企业版最低要求,10G
经过测试,发现只有主节点要求高,从节点不需要太高

本人硬件:32GB内存,16核cpu的笔记本电脑。
| 节点名称 | 硬盘 | 内存 |
|---|---|---|
| hadoop1 | 150G | 12G |
| hadoop2 | 50G | 6G |
| hadoop3 | 50G | 6G |
主节点内存要大于12G,(如果是三台机器的话,那么主节点的压力很大,建议内存是从节点的两倍)
从节点,我使用后发现,给的8G完全够了,所以这次给6G
hive安装的话,官方建议最低核数为4,所以建议主节点给4核,其他2核
cdh建议,datanode至少3个,主节点1个,从节点2个。如果datanode也放在主节点上,那么内存就不够了,就会全部预警。实际开发中,至少4台,但是我们内存有限就3台虚拟机,所以datanode还是只给2个

由于cdh在线安装会由于网络原因失败,自己建立本地httpd,进行安装。所以需要下载所有相关的资源。
他是cdh管理平台的相关安装包

他是cdh的parcel包,里面包含各种大数据组件的安装包(如hdfs、hive、zookeeper、hbase、spark...)
什么hdfs,hive都在这个压缩文件里

cm管理和监控 大数据组件,需要通过mysql进行监控,并且像hive(存储元数据)、hue这些组件需要依赖于外部mysql
我选择的mysql是外部安装(没有什么压力的节点),没有装在cdh的节点,这样就可以防止当某台节点过大,挂了,导致mysql挂,而mysql又是其他节点的元数据,引起都挂的情况

工具资源;
自己写的同步文件脚本,mysql-connector-java-5.1.47.jar(cdh与mysql通信需要这个),指定版本jdk(cdh对jdk要求很严,sun公司的jdk几乎都不支持)

vmware虚拟机安装教程-边搭边写_我要用代码向我喜欢的女孩表白的博客-CSDN博客
搭建3台,hadoop1(12g,150gb,4核),hadoop2(6g,50gb,2核),hadoop3(6g,50gb,2核)
若为正式环境,按自己需求配置,cdh6建议不少于5台datanode
免密登录
hdfs和其他通信是通过ssh,如果不配置,则每次心跳感应,需要你输入密码
关闭selinux和swap
关闭selinux(cdh官方等都建议关闭它,它的作用是限制资源访问,比如给你的impala限制了资源,由于impala用户权限低,查询就会很慢,失去了它的作用)
关闭swap(避免交换内存,默认是开启,如果你内存不够,那么他就会先写到磁盘上,然后释放的时候,会将磁盘中的内存,加载了内存中,如果磁盘中的消耗的资源大于内存,结果就是宕机,关闭后,相当于是一种保护策略)
httpd安装与yum.repo配置(含cdh服务安装)
我通过本地yum,访问httpd源,进行安装,全部都是本地环境进行下载,所以快,cdh安装自定义源也是httpd,这一步也会对cdh进行安装,包含关闭防火墙,关闭后,所有端口都可以访问,就可以通过我的windows访问服务端的httpd,cdh页面,服务端也能访问mysql
hostname、network、host同步
不配置的话,在cdh页面安装时会出现agent心跳接收不到,而且hosts必须是faq写法(就是ip 域名 别名),如果域名和别名名字不一样,会出现警告
mysql安装与scm脚本执行
这步会提前创建好,各个大数据组件的mysql库,并且会执行scm脚本,检测方式是,如果成功,启动cm-server后,则会在scm库下出现各种cdh的日志监控表,这个成功了,才能通过7180接口,进入到cdh界面
cdh启动
启动cm-server还有cm-agent
页面组件安装
如果上面步骤都成功了,则可以进入可视化的网页进行部署了
通过ssh生成密钥(所有节点)
ssh-keygen
遇到提示全部按enter

发送密钥到其他节点
在hadoop1(就是101)节点 执行,他问你问题,你就yes,过程中需要输入其他节点的密码
ssh-copy-id 192.168.30.102
ssh-copy-id 192.168.30.103
这样从hadoop1通过ssh到hadoop2和hadoop3就不需要密码
同样在hadoop2执行
ssh-copy-id 192.168.30.101
ssh-copy-id 192.168.30.103
在hadoop3执行
ssh-copy-id 192.168.30.101
ssh-copy-id 192.168.30.102
如果节点很多,建议写个脚本,最后单元测试下,看看是否能跳转成功,避免后续因为这个问题,找不到原因,力求,每步都是对的。
关闭selinux
先临时关闭
setenforce 0
在永久关闭
vi /etc/selinux/config
修改SELINUX为disabled,并且注释掉之前的enforcing

这里我用了同步脚本(ssync,作用就是将文件,复制到其他节点),由于里面都是相同内容,我才使用。使用同步脚本前,先看旁边的脚本说明

关闭swap(所有节点)
临时关闭
swapoff -a
永久关闭
vi /etc/fstab
注释掉swap这一行

登录到其他节点,执行临时关闭,并注释掉这一行(不能使用同步脚本,因为每个节点的uuid不同)
创建software目录
mkdir /software
将资源复制到这个目录下,由于编码问题,我复制过去,改成了英文
cm6,cdh6,tools 分别对应 cm管理平台资源,cdh大数据组件资源,cdh工具资源

将ssync复制到根目录
- cd /software/
-
- cp ssync /
分发脚本步骤

配置节点ip特殊说明
vi /ssync

将/software资源通过ssync发送到其他节点

- #关闭防火墙
- systemctl stop firewalld.service
- #查看防火墙状态
- systemctl status firewalld.service
- #永久关闭防火墙(其实就是关闭后,设置开机不自动启动)
- systemctl disable firewalld.service
windows本地防火墙也要关闭,集群要与本地mysql元数据通信(我是windows上的mysql作为集群元数据)
安装httpd
选择任意一台机器安装,我选择的101节点
- # 安装httpd,安装本地仓库和Cloudera Manager Server都依赖httpd
- sudo yum -y install httpd
- # 启动httpd
- sudo systemctl start httpd
- # 查看httpd状态
- service httpd status
- #开机自启
- sytemctl enable httpd
修改httpd配置
vi /etc/httpd/conf/httpd.conf
修改Listen端口号,默认是80,改成9999,因为我80端口在使用。

增加.parcel(这样cdh的包也能通过yml解析到)

httpd的默认文件是/var/www/html
配置完成,重启服务,更新
sudo systemctl restart httpd
通过浏览器访问,查看是否成功
如果直接是httpd文件服务器页面,就ok,如果为Testing 123..(apache默认首页),请移步到最下方问题汇总进行解决

我们安装cdh都是离线安装,在线安装太慢,离线安装实际上也是模仿在线安装,只是把在线安装的httpd地址,改成了我们自己本地的httpd服务器。
httpd中的地址,我没有修改,所以文件必须放在/var/www/html默认目录下
cloudera-manager的安装包是存放在cm6目录下的
cdh大数据的相关组件是存放在cdh6目录下的
创建文件夹cm6
mkdir -p /var/www/html/cloudera-repos/cm6
进入/software目录,我上传资源的目录
--strip-components=1的意思是,直接解压内部的内容,到cm6的目录
如果不加,则会在外面创建一个目录,解压到创建的目录中,这样cdh会读取不到
-C 的意思是指定解压位置
- cd /software/cm6
-
- #解压cm压缩包,到httpd服务cm6文件夹
-
- tar -zxvf cm6.3.1-redhat7.tar.gz -C /var/www/html/cloudera-repos/cm6/ --strip-components=1
-
- #修改权限
-
- sudo chmod -R ugo+rX /var/www/html/cloudera-repos/cm6
将此资源目录的2个文件也传过去
allkeys.asc 文件密钥
manifest.json 各兼容组件版本
- cp allkeys.asc /var/www/html/cloudera-repos/cm6/
-
- cp manifest.json /var/www/html/cloudera-repos/cm6/
创建文件夹cdh6
mkdir -p /var/www/html/cloudera-repos/cdh6
进入cdh6资源目录
- cd /software/cdh6
-
- #将cdh资源目录的内容复制到httpd的cdh6目录中
-
- cp * /var/www/html/cloudera-repos/cdh6/
-
- #修改权限
- sudo chmod -R ugo+rX /var/www/html/cloudera-repos/cdh6
记得将.sha1后缀文件改为.sha
目录不要改变,cdh默认目录它,如果你要改变,还需要改cdh配置
这个,在cdh的页面设置parcel源的时候,指定本地地址就是它
- sudo mkdir -p /opt/cloudera/parcel-repo
-
- #将cdh资源目录下的内容复制过去
-
- cd /software/cdh6
-
- #将cdh资源目录的内容复制到httpd的cdh6目录中
-
- cp * /opt/cloudera/parcel-repo
记得修改 .sha1改为.sha
# 创建 /etc/yum.repos.d/cloudera-repo.repo 文件
vi /etc/yum.repos.d/cloudera-repo.repo
cloudera-repo.repo文件的内容如下,
[cloudera-repo]
name=cloudera-repo
baseurl=http:///cloudera-repos/cm6/
enabled=1
gpgcheck=0
注意:版本不能随便使用,cdh不兼容sun公司jdk,对版本要求比较苛刻
进入/software/tools资源目录
- cd /software/tools
-
- #安装
-
- rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
刚刚自动安装,目录在这 /usr/java/jdk1.8.0_181-cloudera
vi /etc/profile
里面在最后填写
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=$PATH:$JAVA_HOME/bin
sh /ssync /etc/profile
- source /etc/profile
-
- java -version

安装守护进程、和server以及agent
注意
server是只有101,主节点安装
agent是 所有节点,都安装
- # 在cmserver服务器上安装Cloudera Manager Server
- sudo yum -y install cloudera-manager-daemons cloudera-manager-server
-
- # 在所有需要cm server监控的服务器上安装Cloudera Manager agent,101,102,103
- sudo yum -y install cloudera-manager-daemons cloudera-manager-agent
这里我已经在本地搭建过了mysql(传送门中的mysql是8.0,cdh6不支持8.0,只支持5.7,自己下载5.7的版本,安装步骤可以服用传送门中mysql, mysql8.0搭建传送门)
这里只说与cdh相关的部分
ssl验证,如果是http请求会被警告,而我本地没有ssl证书,那就是http请求
centos7中的是在conf中,而windows是在bin目录中自己建立的my.ini

sql语句(其中scm是cm平台的核心)
- # 创建Cloudera组件所需的数据库
- 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 hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
- CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
- CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
- CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
- CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
- CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

mysql外部时间与本机是同步(所有机器)
由于是虚拟机,关机后时间就不走了。所以同步一下
- yum install ntpdate -y #安装
- ntpdate ntp1.aliyun.com #同步阿里云
- date #查看现在时间,看看是否改变
设置对外授权,其他ip也能访问mysql,以及更新配置
- grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
-
- flush privileges;
cdh要能读到mysql连接的jar包
创建目录(cdh读取mysql连接的目录,不能随便改变)
mkdir /usr/share/java
从tools资源包中,复制mysql到这个目录中
- cd /software/tools
-
- cp mysql-connector-java-5.1.47.jar /usr/share/java/
改名
mv /usr/share/java/mysql-connector-java-5.1.47.jar /usr/share/java/mysql-connector-java.jar
分发到其他节点
sh /ssync /usr/share/java/mysql-connector-java.jar
主节点执行
mysql第一个参数是代表数据类型,元数据库用哪种库
scm是第二个参数,代表哪个库
root是第三个参数,代表哪个用户
-h代表是否外部数据库,如果不写默认localhost,我的是外部数据库(没有压力的节点),因为如果是放在一台中,这个节点挂了,那么他的mysql也挂,其他的服务都依赖mysql,所以都会挂。
更多详情,请查看官方文档,以及sh脚本内部
sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm root -h 192.168.30.101
输入root的密码,执行完毕

打开mysql查看scm表是否有数据
没有数据

启动scm-server
sudo systemctl status cloudera-scm-server
查看,发现数据刷新成功,脚本只是写入,通过systemctl,才会真正把数据写到mysql

cm的server和agent是通过读取host进行识别和心跳的,如果hostname和network不同步的话,会导致cdh页面安装,agent心跳感知不到
官方的hosts配置的主机名必须是fqdn(ip 域名 主机名)必须写满
这里域名要和主机名保持一致,不然会报警告
(正常情况下主机名就是域名,为了方便这里我都写主机名),
并且hostname是唯一(节点之间不能重复)
修改hosts(每台节点)
vi /etc/hosts
加入ip 节点域名 节点名称

修改hostname(所有节点-不同节点,名称不同,如果192.168.30.101节点就是hadoop1)
hostnamectl set-hostname hadoop1
主节点启动,server和agent
- service cloudera-scm-server start
-
- service cloudera-scm-agent start
其他节点全部启动agent
service cloudera-scm-agent start
进入页面192.168.30.101:7180初始账号、密码都是admin


集群名称

【1-3】代表搜索1-3


点击继续
和我们之前搭好的httpd对应

地址与httpd对应

CDH and other software 选择使用 Parcel包
在更多选项里,删除所有远程parcel存储库的URL(下载不下来的,因为官方很慢)
选择我们对应的httpd地址,复制到下面的URL中(橙色部分)


配置成功没有问题的话,CDH版本下面会出现

我这里密码一样,方便使用

上面步骤如果没有错误,就会像我一样,安装过程不会遇到问题

之后他会自动进行下一步安装,此时你应该能听到,散热器发出的声音


跟着他的点就行了(把页面的检查网络性能和检查主机都点),我这是点击了,网页翻译后


遇到警告

显示检查器结果

按照他说的改,首先设置为小于10
每台机器执行(临时的)
sudo sysctl vm.swappiness=10
然后永久修改(每台机器)
echo 'vm.swappiness=10'>> /etc/sysctl.conf
按照他说的命令复制
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
重新运行检测

先给大家看看,我的内存负荷

好,我们继续按照
我选择了spark,hive,zookeeper,hue(数据工程),当然后面你也可以自己加

我选择了datanode(所有节点,但是很丑,默认是3个节点,但是cdh你给3台主机,他只给你2个节点,真正的cdh是4台)


主服务器负荷太多,因为,没有内存,做真cdh4台了
点继续
这里选择使用jdbc

填写账号密码,连接地
jdbc:mysql://192.168.30.2:3306/metastore?useSSL=false&useUnicode=true&&characterEncoding=utf-8
库要对应

注意,hive的库是metastore
红色的地方是容易写错的点


这个地方最好保留下来,方便你下次找不到,文件看日志的时候,可以看这个
(邮件告警我没有做,正常应该写一个脚本告警,然后脚本给某人发邮件),我下次写一个py脚本,然后放上去,给某人发邮件。以前写爬虫的时候做过。
datanode 目录 /dfs/dn
namenode 数据目录 /dfs/nn
hdfs检查点目录 /dfs/snn
hive仓库位置 /user/hive/warehouse
hive元数据端口 9083
hostMonitor目录 /var/lib/cloudera-host-monitor
serviceMonitor存储目录 /var/lib/cloudera-service-monitor
ooize 目录 /user/oozie
ooize 服务目录 /var/lib/oozie/data
nodeMnager(yarn) 目录 /yarn/nm
zk数据目录 /var/lib/zookeeper
zk事务目录 /var/lib/zookeeper

此时,如果你内存太小,会安装失败,此时,你将再次听到,散热器的声音


完成

有的时候有很多红色,需要解决。
这次,我没有做宕机实验,上次直接关闭了虚拟机,模仿宕机,所以再次出现就有了很多红色,只有一些黄色需要解决,我挂起一下虚拟机,下次从这里进行排错
挂起虚拟机后,需要时间同步
- # 安装NTP
- yum -y install ntp
-
- # 添加NTP远程时间同步服务器,通常安装后会自动配置,没有的话在自行添加
- # vim /etc/ntp.conf
-
- # 启动NTP
- sudo systemctl start ntpd
- # 设置NTP服务开机自动重启
- sudo systemctl enable ntpd
- # 同步节点的时间
- # 命令格式(ntp_server为/etc/ntp.conf 配置文件中的NTP服务器地址):ntpdate -u
- ntpdate -u 0.centos.pool.ntp.org
- # 同步系统时钟
- hwclock --systohc

zk至少要3台,我只给了1台,所以报这个警告,添加多个zk就好

解决


他说分配有问题,这个直接点, Memory Overcommit Validation Threshold
设置成0.9就行

点进去是这样

这个没有办法,CDH6对hdfs备份采取了更加强大的模式,有好几种,但是对节点要求最小的模式,也至少要5台,所以这个警告,我们无视,CDH5没有这种功能,所以不会警告
另一个警告

他说namenode至少要1G,所以我们改成1024 兆字节就好

点进去改就行

内存够,就没有问题,但是内存不够,所以这些报警就忽略。
其中4个报警,3个是因为内存达到阈值,超过百分之90的配置就会警告(默认是百分之80)
还有1个是,hdfs的节点要求,至少5台,才能用这个默认模式的高效存储。
至此,结束
这是apache 的默认界面,能访问代表你配置成功,但是他的页面覆盖了你的文件系统,需要删除默认界面,再进行重启
vi /etc/httpd/conf.d/welcome.conf
将其内容全部注释掉

重启http
systemctl restart httpd
成功


httpd的默认接口不要修改,yum,读取本地默认为80端口。
有2个解决方法:
1)修改httpd为80,这我肯定是不会去修改的,为什么我也说过
2) 修改cdh的yum.repo,让他指向你指定的端口
我采用的第二种方法
vi /etc/yum.repos.d/cloudera-repo.repo
加上端口号

重新执行
sudo yum -y install cloudera-manager-daemons cloudera-manager-server
安装成功


原因是因为,你的yum里面没有配置,我是从节点,没有把主节点的clouder.repo复制过来,所以在从节点执行yum,他在自己的yum仓库中没有找到,所以会出现这个错误。
解决方式,将你配置了cloudera.repo的yum文件复制到,其他节点的yum仓库中
sh /ssync /etc/yum.repos.d/cloudera-repo.repo
再次执行,安装agent命令
sudo yum -y install cloudera-manager-daemons cloudera-manager-agent
正常安装

sudo /opt/cloudera/cm/schema/scm_prepare_database.sh
满足这几个就没有问题
首先mysql要能被连接,
关闭防火墙,
设置让任何用户ip都能通过密码访问,记得要刷新
本机与mysql节点时间要相同,
cdh要能读到mysql连接的jar包
最后显示脚本成功后,一定要重新启动cm-server,他是启动时,将sh中命令,执行表到数据库中。
DbCommandExecutor ERROR Error when connecting to database.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Cannot load connection

原因是,我没有建立scm库
sql执行
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
之后在执行还是错误,因为我连接的是-h 192.168.30.101
我忘记了我是外部数据库,外部数据库的节点是192.168.30.2(自己设置的vm8的网络适配器的ip,这样就算我换wifi,服务端照样可以访问)
改为-h 192.168.30.2

进入集群->点击cloudera Manager删除机器

删除
勾选后,点击已选择的操作(千万不要点成了,从群集中删除,因为你没有集群,你要从cloudera中删除)
Remove From cloudera Manager
然后点击添加集群,就好了

1)由于修改了存储库的parcel(更多选项),他没有反应过来 ,点击返回上一级,在返回上一级,然后重新继续,就能加载出来了
2)是检查,httpd上的,后缀为sha的文件,必须把.sha1改成sha。
cd /var/www/html/cloudera-repos/cdh6
mv CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
3)是检查 /opt/cloudera/parcel-repo 是否.sha1没有改成sha
cd /opt/cloudera/parcel-repo
mv CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
最后重启cm-server,cm-agent

/var/www/html/xxxx中的sha1改为sha

/opt/cloudera/parcel-repo中的sha1修改为sha

弄完重启
节点
service cloudera-scm-server restart
service cloudera-scm-agent restart
再次进入,出现了


已分配是0 
查看top,以为是内存问题,结果发现并不是,于是查看agent状态
service cloudera-scm-agent status

发现和其他成功节点不一样,他有错误
/opt/cloudera/cm-agent/lib/python2.7/site-packages/psutil/_pslinux.py:477: RuntimeWarning: dirty, writeback, mapped, commit_limit memor...ere set to 0
运行警告,内存不能设置为0
查看日志
File "/opt/cloudera/cm-agent/lib/python2.7/site-packages/flood/util/rpc.py", line 33, in resolveHostPort
return HostPort(socket.gethostbyname(w[0]), port)
gaierror: [Errno -2] Name or service not known
看到name我就想到了host
修改/etc/hosts(我之前把他注释掉了)


终于从0B开始走了

成功
