使用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服务器和其他服务。
请先 后发表评论~