说明
有时候想在本地跑一下 Hadoop 全家桶,但无赖搭建和配置 Hadoop 全家桶非常繁琐,有痛点就有解决用户痛点的公司, cloudera 公司就提供了 CDH 的解决方案
CDH 官方简介
CDH是Cloudera的100%开源平台发行版,包括Apache Hadoop,是专门为满足企业需求而构建的。CDH可立即提供企业使用所需的一切。通过将Hadoop与其他十几个关键的开源项目集成在一起,Cloudera创建了功能先进的系统,可帮助您执行端到端的大数据工作流程。
简而言之就是能够快速部署、管理任意规模的 Hadoop 全家桶!
场景说明
由于本机搭建的 CDH 只是用于本地开发和测试,因此本次选择安装CDH 概念验证集群, CDH 概念验证集群主要用于开发和测试阶段, 安装概念验证群集会比安装生产环境集群,少一些系统环境配置,安装起来也方便些
另外,本次演示只会用到 Hadoop 全家桶中的三个组件 Hadoop、 hbase 、hive ,想要安装其他的组件也可以自己规划
硬性要求
想在本地跑 CDH 对于硬件还是有一些要求的,具体如下
- cpu : 核心数越多越好,至少 4 核,(双核4线程的cpu会非常吃紧)
- 内存 : 越大越好,至少 32G (16G不是说不能玩,但是会相当局促,体验非常不好,我就是16G实在玩不下去了,加到32了)
- 硬盘 :越大越好,至少100G
- 操作系统: 不限,因为我们是用虚拟机来安装
服务划分
在部署 CDH 集群之前,一定要规划好,要部署那些组件、用几台机器、哪些服务部署到那些机器上,如下是我的规划
bigdata.wqlm.com 是主机名*, Cloudera Manager Server 是管理端,用于给集群中的机器安装 Cloudera Manager Agent 和 CDH,Cloudera Manager Management Service 是管理端提供的各种服务,比如资源监控,服务告警等
bigdata1.wqlm.com | bigdata2.wqlm.com | bigdata3.wqlm.com | |
---|---|---|---|
Cloudera Manager | Cloudera Manager Server Cloudera Manager Agent | Cloudera Manager Agent | Cloudera Manager Agent |
HBase | RegionServer | RegionServer | Master RegionServer |
HDFS | DataNode | NameNode Balancer DataNode | Secondary NameNode DataNode |
YARN | NodeManager | ResourceManager JobHistory Server NodeManager | NodeManager |
Hive | Gateway | Gateway | Hive Metastore Server HiveServer2 Gateway |
ZooKeeper | ZooKeeper | ZooKeeper | ZooKeeper |
Cloudera Manager Management Service | Host Monitor Service Monitor Event Server Alert Publishe |
资源划分
服务划分好之后,就可以规划每台主机的资源
bigdata.wqlm.com 是主机名*
bigdata1.wqlm.com | bigdata2.wqlm.com | bigdata3.wqlm.com | |
---|---|---|---|
cpu | 2核或以上 | 2核或以上 | 2核或以上 |
内存 | 10G(后期可根据情况调整) | 8G(后期可根据情况调整) | 6G(后期可根据情况调整) |
硬盘 | 64G(不会立即占用64G空间,而是用多少占多少) | 64G(不会立即占用64G空间,而是用多少占多少) | 64G(不会立即占用64G空间,而是用多少占多少) |
操作系统 | contos 7 x64 (其他 linux 系统也行,只是教程中的命令会不一样) | contos 7 x64 (其他 linux 系统也行,只是教程中的命令会不一样) | contos 7 x64 (其他 linux 系统也行,只是教程中的命令会不一样) |
网络 | 能访问外网 | 能访问外网 | 能访问外网 |
系统准备
安装虚拟机软件
我用的是 Oracle VM VirtualBox 原因很简单,开源免费, 官方下载地址
用你熟悉的产品就行,虚拟机软件都差不多
下载 OS 文件
我用的是 ContOS 7 x64 Minimal 版 , 官方下载页面
安装 ContOS 7 x64 Minimal 版
linux 环境设置
安装常用软件
由于我的是 ContOS 7 x64 Minimal 版,很多常用软件都没装,比如 ifconfig、wget等
yum update -y
yum install net-tools -y
yum install wget -y
yum install tree -y
配置网卡开机自启动
有时候安装完系统会遇到无法访问网络,则有可能是网卡没启动,需要手动修改配置
例如我 NAT 网络的 enp0s3
网卡启动了,因此可以通过 访问外网,但是 Host-Only 网络的 enp0s8
网卡没启动,导致物理机无法访问虚拟机
解决办法也很简单
vi /etc/sysconfig/network-scripts/ifcfg-网卡名
然后将 ONBOOT 改成 yes
关机后重启
永久关闭防火墙(由于我们不用于生产环境,推荐永久关闭)
查看防火墙开启状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld
取消开机启动
systemctl disable firewalld
永久关闭 selinux
vi /etc/selinux/config
然后修改 SELINUX
为 disabled ,然后重启。
注意,是上面的 SELINUX
,而不是最下面的 SELINUXTYPE
,别改错了,不然重启后,机器起不起来
提前进行环境设置检查
在安装 Cloudera Manager 时,其中一步是对集群中的机器做环境检查,如下
我们可以先预估有哪些问题,可以提前把它解决了,然后利用虚拟机软件提供的复制虚拟机功能,复制出来的 linux 问题也解决了,这样安装Cloudera Manager 的时候,就不需要一台一台机器的改了
可以预见的问题有图上面的两个,解决办法如下
vm.swappiness 的值过大
首先设置当前运行时环境的
cat /proc/sys/vm/swappiness
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness
然后永久修改,防止重启后又变回去
cat /etc/sysctl.conf
echo 'vm.swappiness=10'>> /etc/sysctl.conf
cat /etc/sysctl.conf
关闭透明大页面压缩
首先设置当前运行时环境的
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
然后永久修改,防止重启后又变回去
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
cat /etc/rc.local
安装 JDBC 驱动
安装 CDH 集群时, 有些主机需要通过 JDBC 连接到数据库,建议提前在一台机器上安装好后,然后拷贝
不同的 linux 系统发行版,安装方法不一样,以 ContOS 7 为例
下载
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
解压
tar zxvf mysql-connector-java-5.1.46.tar.gz
安装
sudo mkdir -p /usr/share/java/
cd mysql-connector-java-5.1.46
sudo cp mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar
配置其他linux环境
当我们配置好一台linux环境后,利用虚拟机软件提供的复制功能,快速创建出多个 linux,由于复制出来的linux内容与原来的一模一样,建议将一些共性操作在第一台机器上设置好后在复制
具体操作参考 VirtualBox 通过复杂现有虚拟机快速创建新虚拟机
配置主机名
配置主机的 FQDN(全限定域名)
所谓的FQDN(Fully Qualified Domain Name)全限定域名,指的是同时带有主机名和域名的名称。
例如:主机名是 bigbata1,域名是 wqlm.com,那么 FQDN 就是 bigbata1.wqlm.com
全限定域名可以从逻辑上准确地表示出主机在什么地方,也可以说全限定域名可是主机名的一种完全表示形式
hostnamectl set-hostname 全限定域名
例如 hostnamectl set-hostname bigdata1.wqlm.com
此外还要在 network 文件中的添加 HOSTNAME
vi /etc/sysconfig/network
添加如下内容
HOSTNAME=全限定域名
配置 hosts 文件
vi /etc/hosts
添加所有虚拟机的ip 与 FQDN 的映射
虚拟机ip地址 完全限定的域名 主机名
...
例如 192.168.56.111 bigbata1.wqlm.com bigdata1
最终配置结果如下
bigdata1.wqlm.com | bigdata2.wqlm.com | bigdata3.wqlm.com | |
---|---|---|---|
ip | 192.168.56.111 | 192.168.56.112 | 192.168.56.1112 |
hosts | 192.168.56.111 bigdata1.wqlm.com bigdata1 192.168.56.112 bigdata2.wqlm.com bigdata2 192.168.56.113 bigdata3.wqlm.com bigdata3 | 192.168.56.111 bigdata1.wqlm.com bigdata1 192.168.56.112 bigdata2.wqlm.com bigdata2 192.168.56.113 bigdata3.wqlm.com bigdata3 | 192.168.56.111 bigdata1.wqlm.com bigdata1 192.168.56.112 bigdata2.wqlm.com bigdata2 192.168.56.113 bigdata3.wqlm.com bigdata3 |
给虚拟机添加快照
好不容易才把环境给搭建好,为了防止以后把环境弄乱了,建议为每台虚拟机保存快照,具体如下
先关闭虚拟机(建议),然后创建快照
其他几台机器同理
创建数据库
搭建 CDH 集群时,需要将一些数据存储在数据库中,需要选择一台主机安装数据库,我这里选择的是 bigdata3.wqlm.com 安装 mysql 数据库
安装mysql
下载 mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
安装 mysql
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
更新 yum
sudo yum update -y
安装 mysql-server
sudo yum install mysql-server -y
启动 mysql
sudo systemctl start mysqld
配置mysql
首先停止 mysql
sudo systemctl stop mysqld
移动旧的InnoDB日志文件到备份位置
sudo mv /var/lib/mysql/ib_logfile* ~
配置 /etc/my.cnf ,建议备份原有的文件
mv /etc/my.cnf /etc/my.cnf.back
vi /etc/my.cnf
添加如下内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
symbolic-links = 0
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1
max_connections = 550
#expire_logs_days = 10
#max_binlog_size = 100M
#log_bin should be on a disk with enough free space.
#Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your
#system and chown the specified folder to the mysql user.
log_bin=/var/lib/mysql/mysql_binary_log
#In later versions of MySQL, if you enable the binary log and do not set
#a server_id, MySQL will not start. The server_id must be unique within
#the replicating group.
server_id=1
binlog_format = mixed
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_ALL_TABLES
配置开机自启动
sudo systemctl enable mysqld
初始化 mysql
启动 mysql
sudo systemctl start mysqld
初始化
sudo /usr/bin/mysql_secure_installation
依次输入 回车 》 root密码 》 root密码 》 y 》 n > y >y
[...]
Enter current password for root (enter for none):
OK, successfully used password, moving on...
[...]
Set root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
[...]
Disallow root login remotely? [Y/n] N
[...]
Remove test database and access to it [Y/n] Y
[...]
Reload privilege tables now? [Y/n] Y
All done!
创建用户和数据库
CDH 中,有些服务需要用到数据库,需要提前为他们创建数据库和对应的用户,具体服务用到的数据库名称和对应用户名称如下
Service | Database | User |
---|---|---|
Cloudera Manager Server | scm | scm |
Activity Monitor | amon | amon |
Reports Manager | rman | rman |
Hue | hue | hue |
Hive Metastore Server | hive | hive |
Sentry Server | sentry | sentry |
Cloudera Navigator Audit Server | nav | nav |
Cloudera Navigator Metadata Server | navms | navms |
Oozie | oozie | oozie |
登陆 mysql
mysql -u root -p
反之只是创建数据库,不会占用太多资源,我是所有都创建了,并且设置默认密码与用户名相同
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'amon';
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'rman';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue';
CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'sentry';
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'nav';
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'navms';
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie';
为虚拟机创建 mysql 的快照
强烈建议在 mysql 配置完成之后,为虚拟机创建快照(创建快照之前先关机可以有效缩小快照体积哦,还可以调整虚拟机硬件)
下载、安装 Cloudera Manager Server
Cloudera Manager 是用来统一管理集群中的其他主机,为他们配置环境、安装 CDH 、监控集群状态等,由于 Cloudera Manager 要个管理并监控所有主机,所以对内存的要求比较高,建议装在一台大内存的机器中,这里我选择装在 bigdata1.wqlm.com
下载 Cloudera Manager Server
下载最新的 Cloudera Manager,目前最新的版本是 6.3.1
官方下载界面 填写好表单后,官方会给出下载地址和安装步骤
这里 下载地址和安装步骤 我已经帮你弄好了,如下。前提条件: 已联网,具有SSH访问权限,并且/var和/opt中有大量可用空间
wget https://archive.cloudera.com/cm6/6.3.1/cloudera-manager-installer.bin
设置权限
chmod u+x cloudera-manager-installer.bin
执行
sudo ./cloudera-manager-installer.bin
安装 Cloudera Manager Server
一路选择 yes 等待安装完成,安装过程可能有些长,应该要去外网下载1G多的安装包,如果网络不好的话,会卡在这一步很久,我就等了2个小时
如果提示安装失败,请检查上述环境是否都已配置正确,不出意外,将显示如下页面
安装完成后,也有可能不显示上面页面的,在浏览器中输入安装了 Cloudera Manager Server 的主机名或ip:7180
验证是否安装完成吧
安装 Cloudera Manager Agent
Cloudera Manager Server 是管理端,而 Cloudera Manager Agent 是客户端,我们需要给机器中的机器安装 Cloudera Manager Agent 之后,Cloudera Manager Server 才能管控这些机器
Cloudera Manager 安装向导
启动所有机器后,在浏览器中输入安装了 Cloudera Manager Server 的主机名或ip:7180
,然后登陆 Cloudera Manager ,默认用户名和密码都是 admin
第一次登陆会运行 Cloudera Manager 安装向导,用于安装、配置 Cloudera Manager Agent,以下只列出关键的步骤
60天够用了,就是到期了,也只是少了一些功能
使用公共资源库表示,Cloudera Manager 以及 CDH 所需的文件都从 Cloudera 的公共资源库中下载,选择本地仓库则需要搭建本地资源库。他们两者类似于 maven 中央仓库和 maven 私服。
注意,这里 CDH 的版本选择 6.3.2 ,6.3.2的 CDH 各组件版本如下 官方兼容性页面
组件 | 组件版本 |
---|---|
Apache Avro | 1.8.2 |
Apache Flume | 1.9.0 |
Apache Hadoop | 3.0.0 |
Apache HBase | 2.1.4 |
HBase Indexer | 1.5 |
Apache Hive | 2.1.1 |
Hue | 4.3.0 |
Apache Impala | 3.2.0 |
Apache Kafka | 2.2.1 |
Kite SDK | 1.0.0 |
Apache Kudu | 1.10.0 |
Apache Solr | 7.4.0 |
Apache Oozie | 5.1.0 |
Apache Parquet | 1.9.0 |
Parquet-format | 2.4.0 |
Apache Pig | 0.17.0 |
Apache Sentry | 2.1.0 |
Apache Spark | 2.4.0 |
Apache Sqoop | 1.4.7 |
Apache ZooKeeper | 3.4.5 |
以上这些组件都是通过 Cloudera 充分测试的,都是能够相互兼容的
等待安装 Cloudera Manager Agent,需要一些时间
下载CDH包并分发给所有 Cloudera Manager Agent 并解压,为之后 CDH 的安装做准备,CDH包含整个 hadoop 全家桶,会有些大,下载、分发、解压都需要一些时间
环境设置检查
在开始安装 CDH 前,对集群中的机器做环境检查
如果检查出了问题,需要去每台机器上解决,解决完问题后再次运行检查任务,直到没有问题为止,常见的问题如下
如果你是严格按照我的教程来设置系统环境,那么这两个问题应该在 linux 环境设置 > 提前进行环境设置检查 这一节已经修改好了,如果没有,参考下面的步骤进行设置
vm.swappiness 的值过大
首先设置当前运行时环境的
cat /proc/sys/vm/swappiness
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness
然后永久修改,防止重启后又变回去
cat /etc/sysctl.conf
echo 'vm.swappiness=10'>> /etc/sysctl.conf
cat /etc/sysctl.conf
关闭透明大页面压缩
首先设置当前运行时环境的
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
然后永久修改,防止重启后又变回去
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
cat /etc/rc.local
创建虚拟机快照
在进行 CDH 正式安装之前,强烈建议为每台虚拟机创建快照,防止 CDH 安装失败后,把系统环境搞坏了。(创建快照之前先关机可以有效缩小快照体积哦,还可以调整虚拟机硬件)
安装 CDH 群集
Cloudera Manager Service 安装好了, Cloudera Manager Agent 也安装好了,并且 Cloudera Manager Agent 下载并解压好了 CDH 软件包,现在 Cloudera Manager Service 就可以为 Cloudera Manager Agent 安装 CDH 了
选择要安装的服务
要安装什么服务应该在集群搭建前想好
Cloudera Manager 提供了服务组合、也提供了自定义选项,注意千万不要贪心,想全都装上,内存和cpu会带不动的
按照之前的规划,我需要安装 hadoop 、 hbase 、 hive 可能还需要 zookeeper
角色分配
最重要的一步来了,刚刚选的那些服务部署到哪些机器上,服务怎么编排,这一步一定要提前规划好
根据我之前的规划(参考 说明 > 服务划分这一节内容),角色分配分配如下
数据库设置
如果你选择的服务中有需要使用到数据库的,需要进行数据库连接设置,由于我们在环境搭建时,就已经配置好了mysql并创建好了数据库及对应的角色,这一步就很简单
审核更改
这一步主要是审核服务的各项配置,现在还不是很情况每个配置的作用的话,建议先不要改
正式安装、配置 CDH
这个过程会有些长,另外内存或cpu不足很容易在这一步出错,如果死活安装不成功,可以利用之前备份的快照回档到 安装 CDH 群集 之前的时候,重新进行安装,如果经常一直安装出错或者好不容易安装好后,集群特别卡, Cloudera Manager 管理界面报了一堆警告,说明你的 内存或硬盘或cpu 资源不够,建议升级一下硬件
安装我要求的硬件配置,应该是不会有太大问题的
创建虚拟机快照
历经千辛万苦,终于安装好了,强烈建议为每台虚拟机创建快照,创建快照之前,先停止集群,然后关机,这样既可以保护集群环境又可以有效缩小快照体积
磁盘、内存占用情况
安装好 CDH 集群之后,先不要解决 Cloudera Manager 管理界面中的告警,先来看一下我的这个3台虚拟机并且只安装了 hadoop 、 hbase 、 hive 和 zookeeper 的 CDH 概念验证集群占用的 cpu、内存、硬盘占用情况,也给你们一个参考
我的 cpu 是 4核4线程的 i5-6300HQ ,目前看起来完全够用,但是32G的内存已经用了27.5G,内存依然是主要瓶颈
再看三台虚拟机刚刚装好 CDH 集群的硬盘占用情况
Hadoop 全家桶端口
Hadoop 全家桶页面
hbase 管理页面
Master服务所在主机的ip:16010