C/C++教程

CDH6.3.2搭建

本文主要是介绍CDH6.3.2搭建,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、集群规模确定

CDH体系结构

 

从数据量、计算性能要求、可靠稳定性、容错性等方面考虑。

  • 数据量
  • 现有数据量(如现有历史数据)和增量数据(日增、月增数据,一般需要考虑满足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、磁盘空间)、集群网络等

 

软件版本

 

需要注意的是CDH版本和mysql的对应关系,6.3.2最高对应mariadb10.1,不能兼容更高的版本,否则会出错。通过官网查看,目前cdh6不支持mariadb10.4版本,后来改为10.1版本后正常启动

参考文档: https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_database_requirements.html#cdh_cm_supported_db

                  https://blog.51cto.com/jinkcloud/2482685?source=drt

二、环境准备

1.CDH安装包下载

CDH官方的网站已经无法直接下载安装包了(需要账号密码),需要找一些之前下载过的人索取。

链接:https://pan.baidu.com/s/1dpyhF6TRXaqryab6ZVVXfw 
提取码:1cuo 

CM

CDH

2.安装配置操作系统

安装CentOS 7.9

注意分区参考:

/boot 1G
/swap 8G
/ 剩余全部给根目录

注意:
如果没有在装机的时候分割出来,可以考虑添加8G的swap分区,参考下面方法:
https://www.cnblogs.com/CandiceW/p/10317918.html

使用dd命令创建名为swapfile 的swap交换文件(文件名和目录任意):
dd if=/dev/zero of=/var/swapfile bs=1024 count=8192k
对交换文件格式化并转换为swap分区:
mkswap /var/swapfile
挂载并激活分区:
swapon /var/swapfile
听从系统的建议修改下权限:
chmod -R 0600 /var/swapfile
修改 fstab 配置,设置开机自动挂载该分区:
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab

配置静态IP

[root@master1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s3"
UUID="9c969854-3983-40d0-998b-31659eb363a8"
DEVICE="enp0s3"
ONBOOT="yes"
IPV6_PRIVACY="no"
IPADDR=192.168.50.189
NETMASK=255.255.255.0
GATEWAY=192.168.50.1
DNS1=192.168.50.1
DNS2=192.168.50.1

##########重启network#################
[root@master1 ~]# systemctl restart network

配置yum源

下载新的阿里云yum源

wget  http://mirrors.aliyun.com/repo/Centos-7.repo

清除缓存

yum clean all # 清除系统所有的yum缓存
yum makecache # 生成yum缓存

配置Ip与主机名映射

[root@master1 ~]# cat /etc/hosts

192.168.50.189  master1.cluster  master1
192.168.50.190  worker1.cluster  worker1
192.168.50.191  worker2.cluster  worker2
192.168.50.192  worker3.cluster  worker3

配置无密码登录

###安装Cloudera Manager本身并不需要ssh无密码登陆,这里做配置主要是为了后续配置集群方便。实现多个机器的ssh免密码登录的核心思想是把每一个机器的rsa公钥集中到一个文件中,并且把这个文件分发到所有的机器上面去。

详细配置链接:https://blog.csdn.net/wjzholmes/article/details/100415396

mkdir -p /root/.ssh

进入/root/.ssh/目录下执行命令生成id_rsa.pub文件
ssh-keygen -t rsa ###之后一路回车,产生秘钥

并将秘钥追加至authorized_keys文件中
cat id_rsa.pub >> authorized_keys ###在.ssh文件下运行此命令

将此节点authorized_keys文件传至下一台机器
scp authorized_keys root@worker1:/root/.ssh

以此类推,将每台机器文件追加并传至下一台机器,然后将最后一台机器的秘钥再分发到每台机器中。

禁用防火墙 (所有节点执行)

在所有节点上关闭防火墙

systemctl status firewalld           检查防火前状态
systemctl stop firewalld             关闭防火墙
systemctl disable firewalld         主机重启自动关闭防火墙

禁用SELinux(所有节点执行)

在命令行运行:

sed -i 's/^SELINUX=.∗/SELINUX=disabled/g' /etc/selinux/config
setenforce 0,使其立即生效

修改/etc/selinux/config文件(在某些系统中,可能是/etc/sysconfig/selinux文件),将SELINUX=enforcing修改为SELINUX=disabled
更新配置之后要重启服务器生效。

设置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 > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

加入启动生效配置中
[root@master1 ~]# cat /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

设置用户最大可打开文件数,进程数,内存占用(所有节点)

vi /etc/security/limits.conf

*    soft    nofile   32728
*    hard    nofile   1024999
*    soft    nproc   65535
*    hard    noroc    unlimited
*    soft    memlock    unlimited
*    hard    memlock    unlimited

NTP服务安装和设置

Hadoop对集群中各个机器的时间同步要求比较高,要求各个机器的系统时间不能相差太多,不然会造成很多问题。可以配置集群中各个机器和互联网的时间服务器进行时间同步,但是在实际生产环境中,集群中大部分服务器是不能连接外网的,这时候可以在内网搭建一个自己的时间服务器(NTP服务器),集群的各个机器与这个时间服务器进行时间同步。我们选择其中一个节点cdh01机器作为NTP服务器,其他机器和它自动同步。

安装NTP(所有节点)
yum -y install ntp

添加以下NTP服务器
server http://ntp.aliyun.com

重新启动 ntp 服务和设置开机自启(所有节点):
service ntpd restart
systemctl enable ntpd.service

查看和测试:

ntpdc -c loopinfo #查看与时间同步服务器的时间偏差
ntpq -p #查看当前同步的时间服务器
ntpstat #查看状态定时同步crontab
crontab -e #可以不用设置
10 * * * * /usr/sbin/ntpdate master1

配置和安装CDH

1.配置CM源

注意:操作系统可以先配置本地yum。CDH的安装包都是rpm包。如果使用rpm安装方式安装起来是比较复杂的,会有很多依赖问题需要解决,就需要使用yum帮助我们解决依赖问题。(也可以是在线的阿里yum源,之前在按照好操作系统之后已经设置了aliyun的yum,所有这里省略centos yum源)

配置CM源:

在cdh01节点上安装并启动httpd

#安装
yum install httpd
#启动
service httpd start
#开机自启
systemctl enable httpd
或者chkconfig httpd on
cd /var/www/html/进入到这个目录下
mkdir cm6; mkdir cdh6
#将cdh的安装包和cm的包拷贝到创建的目录
#拷贝cm安装包和jdk到cm6
cp cloudera-manager-* /var/www/html/cm6/
cp enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm /var/www/html/cm6
cp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm /var/www/html/cm6
#拷贝cdh安装包和元数据文件
cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel /var/www/html/cdh6/
cp manifest.json /var/www/html/cdh6/

安装createrepo命令,然后进入到cm6目录创建yum源
yum install -y createrepo #下载createrepo
cd /var/www/html/cm6 #命令进入到cm6安装包的httpd资源位置
createrepo . #创建yum源的描述meta

配置yum源(每个节点)
cat >> /etc/yum.repos.d/cm.repo << EOF

[CM]
name=cm6
baseurl=http://cdh01/cm6/
gpgcheck=0
EOF

查看yum配置源是否生效
yum clean all
yum repolist

安装Mariadb(master1)

#设置yum源

[root@master1 ~]# cat /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

#安装
yum install -y MariaDB-server MariaDB-client MariaDB-compat  MariaDB-devel MariaDB-common MariaDB-shared
#启动和开机自启
systemctl start mariadb && systemctl enable mariadb
#配置Mariadb数据库
mysql_secure_installation #可以在遇[Y/n]输入y设置密码 [账号/密码:root/root]

初始化管理节点数据库(master1)

mkdir -p /usr/share/java
cp /mnt/lb/mysql-connector-java-5.1.34.jar /usr/share/java/mysql-connector-java.jar(这里需要分发到所有节点)
#创建CDH各服务使用的数据库
-- 1. scm
DROP DATABASE IF EXISTS scm;
CREATE DATABASE IF NOT EXISTS scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'scm'@'%';
CREATE USER IF NOT EXISTS 'scm'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON scm.* TO 'scm'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 2. amon

DROP DATABASE IF EXISTS amon;
CREATE DATABASE IF NOT EXISTS amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'amon'@'%';
CREATE USER IF NOT EXISTS 'amon'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON amon.* TO 'amon'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 3. rman

DROP DATABASE IF EXISTS rman;
CREATE DATABASE IF NOT EXISTS rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'rman'@'%';
CREATE USER IF NOT EXISTS 'rman'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON rman.* TO 'rman'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 4. hue

DROP DATABASE IF EXISTS hue;
CREATE DATABASE IF NOT EXISTS hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'hue'@'%';
CREATE USER IF NOT EXISTS 'hue'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON hue.* TO 'hue'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 5. hive

DROP DATABASE IF EXISTS hive;
CREATE DATABASE IF NOT EXISTS hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'hive'@'%';
CREATE USER IF NOT EXISTS 'hive'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 6. sentry

DROP DATABASE IF EXISTS sentry;
CREATE DATABASE IF NOT EXISTS sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'sentry'@'%';
CREATE USER IF NOT EXISTS 'sentry'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON sentry.* TO 'sentry'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 7. nav

DROP DATABASE IF EXISTS nav;
CREATE DATABASE IF NOT EXISTS nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'nav'@'%';
CREATE USER IF NOT EXISTS 'nav'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON nav.* TO 'nav'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 8. navms

DROP DATABASE IF EXISTS navms;
CREATE DATABASE IF NOT EXISTS navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'navms'@'%';
CREATE USER IF NOT EXISTS 'navms'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON navms.* TO 'navms'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 9. oozie

DROP DATABASE IF EXISTS oozie;
CREATE DATABASE IF NOT EXISTS oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

DROP USER IF EXISTS 'oozie'@'%';
CREATE USER IF NOT EXISTS 'oozie'@'%' IDENTIFIED BY 'Bdpp1234!';
GRANT ALL PRIVILEGES ON oozie.* TO 'oozie'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
#执行数据库初始脚本
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h localhost -uroot -pshdata --scm-host localhost scm root root
注意:初始化完成之后,登录的root账号的密码变成了root,可以根据scm_prepare_database.sh脚本分析出来

安装其他的agent节点(work1、work2、work3)

#安装
yum install -y oracle-j2sdk1.8.x86_64
#安装agent
yum install cloudera-manager-daemons cloudera-manager-agent -y

修改配置文件(所有节点)

修改Cloudera Agent配置文件/etc/cloudera-scm-agent/config.ini,配置server_host为主节点cdh01
#通过vi命令修改
vi /etc/cloudera-scm-agent/config.ini
server_host=cdh01
#也可以通过sed命令修改(推荐)
sed -i "s/server_host=localhost/server_host=cdh01/g" /etc/cloudera-scm-agent/config.ini

配置JAVA_HOME(所有节点)

vi /etc/profile
#add for JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera/
export PATH=PATH:PATH:PATH:JAVA_HOME/bin

启动CDH

1.启动Cloudera Manager(cdh01)
#启动
service cloudera-scm-server start //systemctl start cloudera-scm-server
#设置开机自启???
chkconfig cloudera-scm-server on //systemctl enable cloudera-scm-server
2.启动Cloudera Agent(所有节点)
#启动
service cloudera-scm-agent start //systemctl start cloudera-scm-agent
#开机自启
//systemctl enable cloudera-scm-agent

可以访问http://192.168.100.10:7180 进行组件服务的安装操作了
用户名/密码: admin/admin

Web页面安装配置

大部分按照常规的设置即可。
以下是特别的地方做下记录。

1.集群名字

Cluster_shdata

2.选择储存库时,远程库的设置

点击这里之后,设置远程库特别注意一下(根据知乎同学的反馈,借用截图。于20210604修改)

借用的截图说明下,下面这个远程Parcel储存库URL就保留一个,用本地的那个parcel,修改成http://cdh01/cdh6就可以了,不要连CDH官网的了地址。

 

 

选择之前建立好的mysql中的数据库,并测试数据库连接:

 

这里参考《大数据平台架构与实现》只安装Zookeeper、HDFS、Yarn、Hive、HBase、Spark、Oozie、Kafka、Hue。

 

 

安装完成后界面如下:

安装遇到的问题

1 安装CDH时候出现主机运行状态不良情况
问题:通过Cloudera WEB界面安装Hadoop过程中,在安装Parcel步骤时,一个节点分配激活失败,报错信息显示”主机运行状况不良
分析:
CM的集群是Server-Agent模式的,那么必须有一个唯一的id来标识Server和Agent属于同一个集群,在Agent端就是使用cm_guid文件来记录id的。
假设server端重新安装了一遍,重新构建集群,而agent没有重新安装,那么他们的id是一定不同的,就会造成主机运行状况不良的异常。
解决方法:
删除agent目录下面的cm_guid文件,并重启失败节点的agent服务恢复
find / -name cm_guid
rm -rf /var/lib/cloudera-scm-agent/cm_guid
systemctl restart cloudera-scm-agent
解决方案参考以下链接:
https://blog.csdn.net/holdbelief/article/details/80287471

2 Required List parameter 'hosts[]' is not present
问题:安装cdh的parcel包下一步时显示 Required List parameter 'hosts[]' is not present的报错

解决方法:

查看日志,跟manifest.json文件有关,删除/opt/cloudera/parcel-repo/目录下的manifest.json文件,重新上传。

重启cloudera-scm-server,报错解决。

参考: https://blog.csdn.net/wjzholmes/article/details/106079673

 

 3.safemode: Access denied for user root. Superuser privilege is required

因磁盘空间不足,内存不足,系统掉电等其他原因导致dataNode datablock丢失。

原因分析(Cause Analysis)*

由于系统断电,内存不足等原因导致dataNode丢失超过设置的丢失百分比,系统自动进入安全模式

解决办法(Solution)*

安装HDFS客户端,并执行如下命令:

                                步骤 1     执行命令退出安全模式:hadoop dfsadmin -safemode leave

                                步骤 2     执行健康检查,删除损坏掉的block。

                                   hdfs fsck -list-corruptfileblocks

                                   hdfs fsck  /  -delete

 参考:https://blog.csdn.net/czp11210/article/details/76695745

 

4.Hue: Thrift Server role must be configured in HBase service to use the Hue HBase Browser application

 解决办法:
在这里插入图片描述
重启hue之后,还有红色感叹号!,看下图解决
在这里插入图片描述

 参考: https://blog.csdn.net/weixin_43970277/article/details/116226464

 

其余问题参考:https://blog.csdn.net/weixin_39338423/article/details/108402582

 

 参考:

https://zhuanlan.zhihu.com/p/366308900

https://blog.csdn.net/qq_40856560/article/details/109007683

https://www.cnblogs.com/swordfall/p/10816797.html

https://www.cnblogs.com/dengbangpang/p/13224244.html

https://blog.csdn.net/wsdc0521/article/details/108366867

这篇关于CDH6.3.2搭建的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!