一、配置hostname和hosts
1. 三台机器分别设置hostname为(需要重启ECS):
- master.bd.cn
- slave1.bd.cn
- slave2.bd.cn
2. 然后三台的/etc/hosts统一配置如下映射:
-
<
master
.bd
.cn的内网
IP>
master
.bd
.cn
-
<
slave1
.bd
.cn的内网
IP>
slave1
.bd
.cn
-
<
slave2
.bd
.cn的内网
IP>
slave2
.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主要分为以下几步:
- 通过物理分区创建PV
- 通过PV创建VG
- 在VG上创建LV
- 格式化LV
- 挂载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 登录后
免费版本的 CM5 已经去除 50 个节点数量的限制。
各个 Agent 节点正常启动后,可以在当前管理的主机列表中看到对应的节点。
选择要安装的节点,点继续。如果配置本地 Parcel 包无误,那么下图中的已下载,应该是瞬间就完成了,然后就是耐心等待分配过程就行了,大约 10 多分钟吧,取决于内网网速。
点击继续,开始安装。
可看到检查有两个问题。
1)已启用透明大页面压缩,可能会导致重大性能问题。请运行
-
echo never >
/sys/kernel
/mm/transparent_hugepage/defrag
-
echo never >
/sys/kernel
/mm/transparent_hugepage/enabled
-
echo
10 >
/proc/sys
/vm/swappiness
-
echo
"vm.swappiness = 10"
>> /etc/sysctl.conf
以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。
2)不支持openjdk,手工安装oracle jdk
下载oracle jdk 1.8 rpm安装包 下载地址
上传到3台ECS上,执行安装
yum install jdk-8u181-linux-x64.rpm
解决后,重新检测。如果出现问题,请重新安装CDH,见本文最后章节《CDH安装失败了,如何重新安装》
这一步需要我们手工创建对应的数据库,暂时都用一个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
重新测试链接,通过后,继续
自行修改,继续
通过Cloudera Manager添加Hive服务,在启动Hive的时候遇到错误:
.org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
这种情况是缺少jdbc驱动,于是添加jdbc驱动到相应的包下面。报的错中提示了lib路径,添加一下即可。(注意,最好所有节点都这样执行一次)
-
cd /opt/cloudera/parcels/CDH-
5.15.
0-
1.cdh5.
15.0.p
0.
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 自动复制,所以执行:
cp mysql-connector-java-5.1.38.jar /usr/share/java/mysql-connector-java.jar
然后重试,完成
CDH集群namenode初始化失败原因
是由于之前初始化 namenode 在/DB/dfs/nn 留下了残留数据(失效数据),从而影响再次初始化
解决方法:清空 /DB/dfs/nn 目录下的东西,重新初始化即可
备注:datanode 同理
可能遇到的一些问题:
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"
然后在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.p
0.
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服务。