3台阿里云ECS安装CDH大数据集群过程(CentOS7.4+独立数据盘)

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云服务器ECS,u1 2核4GB 1个月
简介:

0x、环境说明

直接购买3台阿里云的ECS(配置4C/32G/30G系统盘+1T数据盘)

购买时先在阿里云生成一个密钥对,把.pem私钥保存到本地,然后购买时选择使用密钥进行无密码SSH登陆,注意统一使用该密钥对进行镜像部署。

服务开通后,进行如下操作。

一、配置hostname和hosts

1. 三台机器分别设置hostname为(需要重启ECS):

  • master.bd.cn
  • slave1.bd.cn
  • slave2.bd.cn

2. 然后三台的/etc/hosts统一配置如下映射:

<master.bd.cn的内网IPmaster.bd.cn
<slave1.bd.cn的内网IPslave1.bd.cn
<slave2.bd.cn的内网IPslave2.bd.cn

二、配置三台ECS之间无密码SSH登陆

1. 将之前下载的.pem私钥上传到三台机器的/root/.ssh/目录下。

# 重命名密钥
mv xxx.pem id_rsa
# 修改文件权限
chmod 600 id_rsa

2. 然后分别通过ssh访问进行验证,例如:

ssh root@slave1.bd.cn

如果登陆不成功,请自行排查问题。

三、挂载数据盘到/opt目录(后面CDH会部署到这里)

1. 创建物理分区

我们只有一个数据盘,默认的位置是在/dev/vdb

可以有以下几种方法查看当前系统中的磁盘:

fdisk -l
lsblk
parted -l

 对/dev/vdb进行分区:

fdisk /dev/vdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x4710ccf3.

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 11943039
Partition 1 of type Linux and of size 5.7 GiB is set

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

2. 基于物理分区创建逻辑卷

逻辑卷(LVM)

当我们创建了了一个分区之后,它的大小便固定了,这个不利于之后的扩展,为此有了LVM,它可以动态地改变分区的大小。

LVM中主要有以下三个概念:

  • PV(Physical Volume):即物理分区或者磁盘。
  • VG(Volume Group):卷组,多个PV组成一个VG,VG就像一个池子一样。
  • LV(Logic Volume):逻辑卷,在VG上创建出来的对机器可见的分区,有自己的文件系统。

虽然LVM可以使用裸盘作为PV,但是并不推荐这么做,推荐先对磁盘进行分区,在用于LVM。

LVM使用步骤

使用LVM主要分为以下几步:

  1. 通过物理分区创建PV
  2. 通过PV创建VG
  3. 在VG上创建LV
  4. 格式化LV
  5. 挂载LV

ECS Centos7.4默认没有lvm管理包,先安装lvm

yum install lvm*

通过命令创建PV

pvcreate /dev/vdb1

# 创建名为LVMVG的组
vgcreate LVMVG /dev/vdb1 

# 创建并将所有空间分配给lv1
lvcreate -l 100%FREE -n lv1 LVMVG

# 格式化lv1
mkfs.ext4 /dev/LVMVG/lv1

3. 将逻辑卷挂载到/opt目录

mount /dev/LVMVG/lv1 /opt

# 配置自动挂载
echo /dev/LVMVG/lv1 /opt ext4 defaults 0 0 >> /etc/fstab

其他一些命令:

# umount
umount /opt

# 删除LV/VG/PV
lvremove /dev/LVMVG/lv1
vgremove LVMVG
pvremove /dev/vdb1

 

四、安装JDK和Mysql

1. 3台ECS都要安装JDK (注意,请直接安装oracle jdk,不要使用openjdk,不然CDH不支持,后续还需要重新安装jdk)

yum install java-1.8.0-openjdk

2. master.bd.cn主节点单独安装mysql

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
yum localinstall mysql57-community-release-el7-8.noarch.rpm
yum install mysql-community-server
systemctl start mysqld
systemctl enable mysqld
systemctl daemon-reload

# 查看root初始密码
grep 'temporary password' /var/log/mysqld.log

# 登陆mysql
mysql -p

# 修改root密码
mysql> ALTER USER   'root'@'localhost' identified by '密码<数字+大小写字母+特殊字符+最少8位>';
mysql> flush privileges;

# 开启远程登陆
mysql> grant all privileges on *.*  to  'root'@'%'  identified by '密码'  with grant option;
mysql> flush privileges;
mysql> exit;

五、安装依赖包

yum -y install chkconfig
yum -y install bind-utils
yum -y install psmisc
yum -y install libxslt
yum -y install zlib
yum -y install sqlite
yum -y install cyrus-sasl-plain
yum -y install cyrus-sasl-gssapi
yum -y install fuse
yum -y install portmap
yum -y install fuse-libs
yum -y install redhat-lsb

 

六、准备CDH离线安装

Cloudera Manager 下载目录

http://archive.cloudera.com/cm5/cm/5/

CDH 下载目录

http://archive.cloudera.com/cdh5/parcels/5.15.0/

manifest.json 下载

http://archive.cloudera.com/cdh5/parcels/5.15.0/manifest.json

CHD5 相关的 Parcel 包放到主节点的/opt/cloudera/parcel-repo/目录中

CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1 重命名为 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha

这点必须注意,否则,系统会重新下载 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel 文件

在3台ECS上均创建文件夹/opt/cloudera-manager

mkdir /opt/cloudera-manager

把下载好的cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz安装包上传至 master.bd.cn 节点/opt/目录

在 master.bd.cn 节点拷贝 cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz 到所有节点:

scp cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz root@slave1.bd.dp:/opt/
scp cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz root@slave2.bd.dp:/opt/

所有ECS节点解压安装 Cloudera Manager Server & Agent

cd /opt
tar xvzf cloudera-manager*.tar.gz -C /opt/cloudera-manager

 

七、开始部署SCM

1. 创建用户 cloudera-scm(所有节点)

cloudera-scm 用户说明,摘自官网:

Cloudera Manager Server and managed services are configured to use the user account cloudera-scm by default, creating a user with this name is the simplest approach. This created user, is used automatically after installation is complete.

Cloudera管理器服务器和托管服务被配置为在默认情况下使用用户帐户Cloudera-scm,创建具有这个名称的用户是最简单的方法。创建用户,在安装完成后自动使用。

执行:在所有节点创建cloudera-scm用户

useradd --system --home=/opt/cloudera-manager/cm-5.15.0/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

2. 配置 CM Agent

修改 master.bd.cn节点/opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名。

在 master.bd.cn 操作将 master.bd.cn节点修改后的 (复制到所有节点)

scp /opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini root@slave1.bd.cn:/opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini

scp /opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini root@slave2.bd.cn:/opt/cloudera-manager/cm-5.15.0/etc/cloudera-scm-agent/config.ini

3. 配置 CM Server 的数据库

在主节点 master.bd.cn 初始化CM5的数据库:

下载 mysql 驱动包:

cd /opt/cloudera-manager/cm-5.15.0/share/cmf/lib
wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

初始化数据库: 

cd /opt/cloudera-manager/cm-5.15.0/share/cmf/schema/

./scm_prepare_database.sh mysql -hmaster.bd.dp -uroot -p密码 --scm-host master.bd.dp cm scm 密码

参数说明:

参数 说明
mysql 数据库用的是mysql,如果安装过程中用的oracle,那么该参数就应该改为oracle
-hhadoop1 数据库建立在hadoop1主机上面,也就是主节点上面.
-uroot 以root用户运行mysql
-p123456 mysql用户
--scm-host CMS的主机,一般是和mysql安装的主机是在同一个主机上
最后三个参数 分别为数据库名称、数据库用户名、数据库密码
   

4. 配置CDH本地安装源

创建 Parcel 目录

master.bd.cn 节点创建目录/opt/cloudera/parcel-repo

然后将下载好的文件

CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel
CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1
manifest.json

拷贝到该目录下。

mkdir -p /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
cd /opt/cloudera/parcel-repo

重命名,CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1 否则,系统会重新下载 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel

mv CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha

 

slave1.bd.cn和slave2.bd.cn 节点创建目录/opt/cloudera/parcels,执行:

mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels

 

5. 启动 CM Manager&Agent 服务
注意,mysql 服务启动,防火墙关闭

master.bd.cn节点执行:

/opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-server start
/opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-agent start

slave1和slave2节点执行:

/opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-agent start

访问 http://master.bd.cn:7180 若可以访问(用户名、密码:admin),则安装成功。

Manager 启动成功需要等待一段时间,过程中会在数据库中创建对应的表需要耗费一些时间。

 

八、开始安装CDH

CM Manager && Agent 成功启动后,登录前端页面进行 CDH 安装配置。

admin / admin 登录后

97968a09ab74a704b9da7a546c65243052e.jpg

17277ef21fca56746829685201ac66f7006.jpg

免费版本的 CM5 已经去除 50 个节点数量的限制。

f3fc87a0c44bb16ee779f2f8cda6476415b.jpg

各个 Agent 节点正常启动后,可以在当前管理的主机列表中看到对应的节点。

17fd5d70e8631c299c0d7939b2ed924eabc.jpg

选择要安装的节点,点继续。如果配置本地 Parcel 包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了,大约 10 多分钟吧,取决于内网网速。

74fe1dd4c41417e92f1aaad1e7e2fde0900.jpg

点击继续,开始安装。

d1f427a7888a970c65f012ca710eb415f50.jpg

48e66308d1fcae59121173f64322b7a63d1.jpg

 

519d8d935a16cac095b85c8bbb803ac6de5.jpg

可看到检查有两个问题。

1)已启用透明大页面压缩,可能会导致重大性能问题。请运行    

echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled  

以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。

037730072c86836240e101b17cd0e30d5bd.jpg

2)不支持openjdk,手工安装oracle jdk

d8879f49c30b2c1fc0b93a9fd982b259a43.jpg

下载oracle jdk 1.8 rpm安装包 下载地址

上传到3台ECS上,执行安装

yum install jdk-8u181-linux-x64.rpm

解决后,重新检测。如果出现问题,请重新安装CDH,见本文最后章节《CDH安装失败了,如何重新安装》

78b858efb97d0fd930a798763911fc234d4.jpg

19116445af9d6f3203ee8b153d476704bfd.jpg

1aed06e95430131ce680637fbe77b76824e.jpg

898f4805703b820709abe4d3a3c5eb91b73.jpg

这一步需要我们手工创建对应的数据库,暂时都用一个mysql服务,修改数据库主机均为master.bd.cn。

创建数据库,推荐使用utf8mb4字符集,并分配scm用户权限给hive库(当然也可以新建个hive用户)

CREATE DATABASE `hive` CHARACTER SET 'utf8mb4';

GRANT Select, Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Show View, Trigger, Update ON `hive`.* TO `scm`@`master.bd.dp`;
CREATE DATABASE `hue` CHARACTER SET 'utf8mb4';

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `hue`.* TO `scm`@`master.bd.dp`;
CREATE DATABASE `am` CHARACTER SET 'utf8mb4';

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `am`.* TO `scm`@`master.bd.dp`;
CREATE DATABASE `oozie` CHARACTER SET 'utf8mb4';

GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, Index, Insert, Lock Tables, References, Select, Show View, Trigger, Update ON `oozie`.* TO `scm`@`master.bd.dp`;

点击测试,如果报错:

JDBC driver cannot be found. Unable to find the JDBC database jar on host : slave2.bd.dp.

需要下载jdbc到lib目录下:

cd /opt/cloudera-manager/cm-5.15.0/share/cmf/lib/

wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

重新测试链接,通过后,继续

d9dc8c103027cd98a67a12d5e78d4372999.jpg

自行修改,继续

3b52f0eb08a292858935c62c0bc699ff4f6.jpg

通过Cloudera Manager添加Hive服务,在启动Hive的时候遇到错误:

.org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver

94314822f9f731eace74531b47cc5649106.jpg

这种情况是缺少jdbc驱动,于是添加jdbc驱动到相应的包下面。报的错中提示了lib路径,添加一下即可。(注意,最好所有节点都这样执行一次)

cd /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/lib/hive/lib/

wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

然后点击“Resume”重试。

很可能oozie也没有,注意看日志信息,是从 /usr/share/java/mysql-connector-java.jar 自动复制,所以执行:

42fb863c89a45837642c3b98dab4380d04c.jpg

cp mysql-connector-java-5.1.38.jar /usr/share/java/mysql-connector-java.jar

然后重试,完成

66c66f6d5378cc7b1094de942f547985c49.jpg

1c529f2eef298dd77bb8e42500bee66a58f.jpg

可能遇到的一些问题:

1. hue的load balancer无法启动

解决:安装httpd和mod_ssl

yum -y install httpd

yum -y install mod_ssl

2. HDFS NFS Gateway 无法启动、挂载失败问题

解决:HDFS NFS Gateway工作需要依附 rpcbind 服务,所以启动前需要确定rpcbind服务正常开启。 service rpcbind start
但是HDFS NFS 服务会与系统自带的NFS服务冲突,所以在启动前需要关闭系统自带的NFS服务。service nfs stop

service nfs stop
service rpcbind start

3. HDFS-副本不足的块

原因是设置的副本备份数与DataNode的个数不匹配。

我们在之前理论篇中已经说明了dfs. replication属性默认是3,也就是说副本数---块的备份数默认为3份。

但是我们这里集群只有两个DataNode。所以导致了达不到目标---副本备份不足。

解决方法

这种情况下的修复有2个步骤,1是设置目标备份数为2,2是通过命令更改当前备份数。

副本不足和副本过多都可以用这2个步骤解决,主要是跟DataNode的个数对应。

设置目标备份数为2

点击集群-HDFS-配置

搜索dfs. replication,设置为2后保存更改。

dfs.replication这个参数其实只在文件被写入dfs时起作用,虽然更改了配置文件,但是不会改变之前写入的文件的备份数。

所以我们还需要步骤2

在cm0中通过命令更改备份数:

su hdfs
hadoop fs -setrep -R 2 /

这里的-R 2的数字2就对应我们的DataNode个数。

如果遇到safe mode无法执行,则先执行解除safemode命令:

hadoop dfsadmin -safemode leave

 

九、安装 Kafka 组件

1. 配置并分配 Kafka parcel 包
    在 Web 页面中,主机 -> Parcel 里面会列出当前集群以配置和分配的 parcel 包,目前只配置了 CDH5,Kafka 单独存在于其他 parcel 包中,所以需要单独加载 parcel ,然后分配到集群内各节点。 

Cloudera官方Kafka组件的parcel包下载地址为:http://archive.cloudera.com/kafka/parcels/latest/ 照旧下载 percel 文件,以及该文件的 sha1 串,然后重命名 ***.sha1 为 ***.sha 方可。

下载好以上两个文件后,放到 master.bd.cn 节点的 /opt/cloudera/parcel-repo/ 目录下 

无需重启 server 守护进程,在页面即可在线刷新、分配、激活。

2. 集群内安装 Kafka 服务

这里需要确认和修改 2 个默认配置

  • 复制进程,默认为1,修改为 3(视业务量而定)
  • 分区数,默认分区数为 50,这里暂且保留。
  • 删除旧topic,默认打开,不做更改。

业务端口为 9092 。

启动可能会遇到OOM的错误,导致无法启动

Fatal error during KafkaServerStartable startup. Prepare to shutdown
java.lang.OutOfMemoryError: Java heap space

解决:

登录到kafka运行的节点,修改kafa启动脚本:

vi /opt/cloudera/parcels/KAFKA-3.1.0-1.3.1.0.p0.35/lib/kafka/bin/kafka-server-start.sh

添加最后一行启动命令前一行添加 export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

de4c883c57ba9f6a210b7652233533c1a31.jpg

然后在CM中重试即可。

 

附1:CDH安装失败了,如何重新安装

1> 删除Agent节点的UUID 

      # rm -rf /opt/cloudera-manager/cm-5.15.0/lib/cloudera-scm-agent/*

2>  清空主节点CM数据库

      进入主节点的Mysql数据库,然后drop database cm;

3> 删除Agent节点namenode和datanode节点信息

     # rm -rf /opt/dfs/nn/*

     # rm -rf /opt/dfs/dn/*

4> 在主节点上重新初始化CM数据库

5> 执行启动脚本

     主节点:# /opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-server start

     Agent节点:# /opt/cloudera-manager/cm-5.15.0/etc/init.d/cloudera-scm-agent start

过一会儿,即可通过主节点的7180端口重新进行CDH的安装 http://主节点IP:7180/cmf/login。

附2:HUE执行Oozie-Sqoop1命令式找不到msyql driver问题

cd /opt/cloudera/parcels/CDH-5.15.0-1.cdh5.15.0.p0.21/lib/sqoop/
wget http://maven.aliyun.com/nexus/service/local/repositories/hongkong-nexus/content/Mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

然后重启Oozie和Hue服务。

目录
相关文章
|
2月前
|
人工智能 数据管理 Serverless
阿里云数据库走向Serverless与AI驱动的一站式数据平台具有重大意义和潜力
阿里云数据库走向Serverless与AI驱动的一站式数据平台具有重大意义和潜力
404 2
|
2月前
|
人工智能 运维 Cloud Native
、你如何看待阿里云数据库走向Serverless与AI驱动的一站式数据平台?
、你如何看待阿里云数据库走向Serverless与AI驱动的一站式数据平台?
147 2
|
2月前
|
Kubernetes 安全 Docker
在 K8s 集群中创建 DERP 服务器
在 K8s 集群中创建 DERP 服务器
|
2月前
|
存储 数据可视化 数据管理
基于阿里云服务的数据平台架构实践
本文主要介绍基于阿里云大数据组件服务,对企业进行大数据平台建设的架构实践。
698 0
|
2月前
|
人工智能 数据管理 大数据
阿里云数据库走向Serverless与AI驱动的一站式数据平台是一个很有前景和意义的发展方向
阿里云数据库走向Serverless与AI驱动的一站式数据平台是一个很有前景和意义的发展方向
33 2
|
26天前
|
存储 弹性计算 安全
阿里云活动内云服务器没有数据盘怎么办?购买后如何购买并挂载云盘?
在我们通过阿里云的活动来购买云服务器的时候,一般默认情况下只有系统盘,是没有数据盘的,但是很多用户处于实际使用需求和安全等方面的需求,通常都需要在购买之后单独再购买一块云盘作为数据盘挂载到云服务器上,本文以图文形式为大家展示阿里云活动内云服务器购买流程以及购买后如何购买并挂载云盘,适合新手用户参考。
阿里云活动内云服务器没有数据盘怎么办?购买后如何购买并挂载云盘?
|
1月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
140 1
|
1月前
|
存储 弹性计算 Linux
阿里云ECS(CentOS镜像)安装docker
阿里云ECS(CentOS镜像)安装docker
372 0
|
1月前
|
人工智能 DataWorks 数据可视化
心动基于阿里云DataWorks构建游戏行业通用大数据模型
心动游戏在阿里云上构建云原生大数据平台,基于DataWorks构建行业通用大数据模型,如玩家、产品、SDK、事件、发行等,满足各种不同的分析型应用的要求,如AI场景、风控场景、数据分析场景等。
331 1
|
2月前
|
人工智能 运维 数据管理
阿里云数据库走向Serverless与AI驱动的一站式数据平台
阿里云数据库走向Serverless与AI驱动的一站式数据平台
271 2

热门文章

最新文章