使用Cloudera的CDH部署Hadoop:准备工作

1配置网络名称

集群中的每一台主机配置如下:

1.1设置主机名为唯一的名称

命令

sudo hostnamectl set-hostname customhostname

注意

就连host01.example.com也不能和host01.standby.example.com同时存在于一个集群中。

例如,customhostname为bg84.cnki.com

sudo hostnamectl set-hostname bg84.cnki.com

1.2修改/etc/hosts

第一部分为ip地址,第二部分是主机名或域名,第三部分是主机别名,每部分用空格分隔。典型的域名一定是FQDN,例如:myhost-1.example.com,而myhost-1是不合法的。也不能用别名。

例,我有七台机器做一个集群,配置每台主机的完全域名

192.168.107.83 bg83.cnki.com bg83

192.168.107.84 bg84.cnki.com bg84

192.168.107.85 bg85.cnki.com bg85

192.168.107.86 bg86.cnki.com bg86

192.168.107.87 bg87.cnki.com bg87

192.168.107.88 bg88.cnki.com bg88

192.168.107.89 bg89.cnki.com bg89

192.168.107.90 bg90.cnki.com bg90

注:

FQDN(Fully Qualified Domain Name,全限定域名):同时带有主机名和域名且使用句点连接的名称。

1.3修改每台主机/etc/sysconfig/network

添加HOSTNAME=foo-1.example.com

1.4确认每台主机的标识

执行命令uname -a

执行命令/sbin/ifconfig,注意inet addr和eth0 (or bond0)

执行命令 host -v -t A $(hostname)

但是Centos7执行这个命令超时。

(重启机器:shutdown -r now)

2禁用防火墙

保存已有的防火墙配置:

iptables-save > /root/firewall.rules

禁用防火墙:

sudo chkconfig iptables off

sudo service iptables stop

对于CentOS7来说,但是上面的命令可能并不起作用。CentOS7默认的防火墙不是iptables,而是firewalle

Centos 7 防火墙命令:

启动: systemctl start firewalld

关闭: systemctl stop firewalld

查看状态: systemctl status firewalld

开机禁用 : systemctl disable firewalld

开机启用 : systemctl enable firewalld

查看版本: firewall-cmd --version

查看帮助: firewall-cmd --help

显示状态: firewall-cmd --state

查看所有打开的端口: firewall-cmd --zone=public --list-ports

更新防火墙规则: firewall-cmd --reload

查看区域信息: firewall-cmd --get-active-zones

查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0

拒绝所有包:firewall-cmd --panic-on

取消拒绝状态: firewall-cmd --panic-off

查看是否拒绝: firewall-cmd --query-panic

3设置SELinux模式

1)检查SELinux状态

Getenforce

2)如果输出为Permissive 或Disabled可以不用设置SELinux,如果是enforcing接着完成下面的步骤。

3)打开/etc/selinux/config(有些系统是/etc/sysconfig/selinux)

4)将SELINUX=enforcing 改为SELINUX=permissive。保存。

5)执行命令:setenforce 0

4开启NTP服务

为集群中的每台机器都安装和开启NTP服务。

1)检查集群中的每台机器是否安装了NTP服务:

rpm -q ntp(安装命令:yum install ntp)

2)为集群中的每台机器设置时区

timedatectl set-timezone Asia/Shanghai

3)选择一台机器,作为Server,设置Server节点

依次完成以下操作:

A.开启NTP服务

systemctl start ntpd

systemctl enable ntpd

B.设置准确的时间

设置系统年月日,例,timedatectl set-time 2018-09-12

设置系统十分秒,例,timedatectl set-time 13:25:17

C.设置Server的ntp服务器为其自身

更改/etc/ntp.conf文件,设置:

restrict 192.168.107.0 mask 255.255.255.0 nomodify notrap

restrict 192.168.107.0 mask 255.255.255.0 nomodify notrap

(可不配)fudge 127.127.1.0 stratum 10

server 127.0.0.1

D.重启NTP服务

sudo systemctl restart ntpd

E.设置开机启动服务

sudo systemctl enable ntpd

F.查看ntp服务状态

sudo systemctl status ntpd

4)Client节点设置

设置NTP服务器

server 192.168.107.84

同步服务器时间

ntpdate -u 192.168.107.84

5)防止不同步问题

hwclock --systohc

6)检测

使用命令ntpstat

或ntpdc -np

可以看出bg85(192.168.107.85)的NTP服务器是192.168.107.84

其他常用命令

查看系统时间:date

查看硬件时间:hwclock --show

设置系统年月日:timedatectl set-time 2018-11-12

设置系统十分秒:timedatectl set-time 17:25:17

更新时区(亚洲-中国-上海):timedatectl set-timezone Asia/Shanghai

将硬件时钟调整为与系统时钟一致:timedatectl set-local-rtc 1

或:hwclock --systohc --localtime

将日期写入CMOS:clock –w

修改Local time与实际时间差八小时的问题:

查看:timedatectl

查看系统时区:ls /usr/share/zoneinfo/

删除当前系统时区:sudo rm /etc/localtime

创建软连接以替换当前的时区信息:

sudo ln -s /usr/share/zoneinfo/Universal /etc/localtime

注意使用ntpd无法同步的问题

开启ntp时无法修改时间,使用下面命令:

停止ntp自动同步:timedatectl set-ntp no

开启ntp自动同步:timedatectl set-ntp yes

使用chronyc作为NTP服务(而不使用ntpd)

Centos 7下发现CDH集群无法同步时间,查看日志发现这么一条错误信息:

chronyc: chronyc sources: not synchronized to any server

所以推断CDH集群是使用chronyc来同步时间的(不知道是不是和所用的操作系统Centos 7有关,因为Cloudera官网文档给的例子是ntpd而不是chronyc)

下面给出使用chronyc的步骤

1)查看是否安装:systemctl status chronyd.service

状态是inactive,所以激活它。

2)NTP服务端配置/etc/chrony.conf

添加配置:server 127.0.0.1(自身同步自身)

3)启动NTP服务:systemctl start chronyd.service

4)客户端配置/etc/chrony.conf

server 192.168.107.84 iburst

5)检测是否同步

chronyc sources -v

前面的?代表没有同步到NTP服务器,这里将bg84.cnki.com作为NTP服务器。

执行:chronyc tracking

执行:chronyc sources

执行:timedatectl

注意 ?、Leap status :Not synchronised、NTP synchronised:no都代表了没有正常同步。

实践经验

实践发现,本机同步本机就会出现这样的情况,那么采取的办法是,集群中选出一台机器A作为集群的时间同步服务器,然后在集群之外选一台机器B作为机器A的时间同步服务器。当然也可以直接将机器B作为集群的时间同步服务器。

例如,有机器192.168.107.[83-90]

集群7台:192.168.107.[84-90],用84作为集群的NTP服务器。用83做84的NTP服务器。

同时最好配置NTP层级:

local stratum <数字>

其中,数字小的作为服务端,大的作为客户端。

正常的情形是下面这样:

如果还是不行,那么就重启Cloudera Manager Agents

Cloudera Manager Agents操作命令

重启:sudo service cloudera-scm-agent restart

开启:sudo service cloudera-scm-agent start

关闭:sudo service cloudera-scm-agent stop

更多命令见官网:

https://www.cloudera.com/documentation/enterprise/6/latest/topics/cm_ag_agents.html#cmug_topic_14_4

再次提示,必须将防火墙关掉。

5官网推荐的集群主机和角色分布

集群主机包括:

Master hosts:运行Hadoop master进程,如HDFS NameNode 和YARN Resource Manager。

Utility hosts:运行集群其他的进程,例如Cloudera Manager 和the Hive Metastore。

Gateway hosts:客户端通过Gateway hosts来发起任务。gateway hosts的数量依赖于工作负载的类型和规模。

Worker hosts:主要运行DataNodes和其他的处理过程(例如Impalad)

构建3 - 20 高可用Worker Hosts的集群

Master Hosts,一个

NameNode

JournalNode

FailoverController

YARN ResourceManager

ZooKeeper

JobHistory Server

Spark History Server

Kudu master

Master Host 2:

NameNode

JournalNode

FailoverController

YARN ResourceManager

ZooKeeper

Kudu master

Master Host 3:

Kudu master (Kudu requires an odd number of masters for HA.)

Utility Host ,一个:

Cloudera Manager

Cloudera Manager Management Service

Hive Metastore

Impala Catalog Server

Impala StateStore

Oozie

ZooKeeper (requires dedicated disk)

JournalNode (requires dedicated disk)

Gateway Hosts,一个或多个:

Hue

HiveServer2

Flume

Gateway configuration

Worker Hosts,3-20个:

DataNode

NodeManager

Impalad

Kudu tablet server

部署规划示例例:

七台机器搭建集群,一台机器安装其他服务。

Master Hosts:3个

IP为:192.168.107.85,192.168.107.86 192.168.107.87

Utility Hosts和Gateway Hosts共用一个服务器

IP为:192.168.107.84

Worker Hosts:7个

剩余一台:192.168.107.83:

安装Mongodb服务器和其他服务。

举报
评论 0