先来认识几个组件
cloudera-manager-server只运行在主节点上,会启动一个站点,用户可以通过浏览器访问该站点来做很多事,比如:向集群中添加机器,下载大数据服务的parcels,向集群中的机器部署大数据服务,监听集群中每个主机的运行状态等。
cloudera-manager-agent运行在每一台主机上(包括主节点),主要用来完成cloudera-manager-server分配的各种任务,并随时向cloudera-manager-server汇报自己的状态。
cloudera-manager-daemons是一个linux包,可以理解为一个类库,cloudera-manager-server和cloudera-manager-agent的运行都依赖cloudera-manager-daemons,所以cloudera-manager-daemons也要安装在每一台主机上
可以看得出来,最关键的服务就是cloudera-manager-server了。但cloudera-manager-server对于初学者来讲并不是那么容易搞定,并且它的运行还需要使用数据库(数据库中需要建好几个库哦)。为了让cloudera-manager-server尽快运行起来,cdh提供了cloudera-manager-installer,用来快速的安装cloudera-manager-server,并让它使用一个嵌入式地数据库,省去了配置数据库的时间。官方文档中的Path A,就是使用cloudera-manager-installer来安装的cloudera-manager-server,官方也明确表示这种方式并不适合生产环境使用。
除此之外,cloudera-manager-server和cloudera-manager-agent的运行需要jdk,所以每台主机上都需要安装一个oracle-j2sdk1.7包。
安装的顺序是:
http://master-node:7180/cmf/hardware/hosts
页面上会显示出你安装成功的主机列表。如果你的主机比较少,又想快一些搞定的话,可以使用linux命令号的方式(deb包还可以复用,省去了下载的过程,后面会提到),但如果你要安装一个很庞大的集群的话,最好是把安装工作交给cloudera-manager-serve来做。下面来详细说明一下每一个过程
在安装cdh集群之前,需要先准备几台可用的linux服务器,理论上讲是四五台起,但如果你就想装着玩,只有一台也不是不行。我本次是在三台linux server 16.4上搭建一个测试环境。需要在每一台主机上做以下几个准备工作
ubuntu系统默认是不创建root账号的,那么使用下面的命令手动创建。
$ sudo passwd root
需要先输入sudo的密码,再输入两次root用户的密码。如果输出passwd: password updated successfully
,则表示root用户创建成功了。
ubuntu系统默认情况下是不允许使用root账号进行远程ssh登录的,需要开启这个权限。编辑/etc/ssh/sshd_config
文件,将PermitRootLogin prohibit-password
这一行修改为PermitRootLogin yes
,并使用下面的命令来重启一下ssh服务
$ service ssh restart
如果不重启ssh服务的话,修改的配置无法立刻生效。
将host文件中不必要的东西删除,并将几台主机的机器名都列出来。下面贴出来一个hosts文件示例。
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# hostname loopback address
10.39.43.59 cdhtest-0
10.39.43.61 cdhtest-1
10.39.43.62 cdhtest-2
注意,/etc/hostname
中的主机名和主机的ip要能对上。
cloudera-manager-server是我们要安装的最重要的组件,它的运行需要数据库的支持。在安装cloudera-manager-server之前,先搞定mysql数据库。
这一部分可以参考 https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_mysql.html#cmig_topic_5_5_2
在ubuntu下使用下面的命令来安装mysql server
$ sudo apt-get install mysql-server
安装成功以后,先停止mysql server。
$ sudo service mysql stop
修改my.cnf
$ sudo vi /etc/mysql/my.cnf
加入以下内容
[mysqld]
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
server_id=23233
bind-address=0.0.0.0
# For MySQL version 5.1.8 or later. For older versions, reference MySQL documentation for configuration help.
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
使用下面的命令启动mysql server
$ sudo service mysql start
使用下面的命令安装mysql 的驱动
$ sudo apt-get install libmysql-java
cdh中的很多大数据服务的运行都需要专门的数据库来存放数据,接下来要创建几个数据库并授权给特定的用户。
使用下面的命令进入mysql cli
$ mysql -u root -p
Enter password:
然后在mysql cli中依次执行以下脚本
create database amon DEFAULT CHARACTER SET utf8;
grant all on amon.* TO 'amon'@'%' IDENTIFIED BY 'amon_password';
create database rman DEFAULT CHARACTER SET utf8;
grant all on rman.* TO 'rman'@'%' IDENTIFIED BY 'rman_password';
create database metastore DEFAULT CHARACTER SET utf8;
grant all on metastore.* TO 'hive'@'%' IDENTIFIED BY 'hive_password';
create database sentry DEFAULT CHARACTER SET utf8;
grant all on sentry.* TO 'sentry'@'%' IDENTIFIED BY 'sentry_password';
create database nav DEFAULT CHARACTER SET utf8;
grant all on nav.* TO 'nav'@'%' IDENTIFIED BY 'nav_password';
create database navms DEFAULT CHARACTER SET utf8;
grant all on navms.* TO 'navms'@'%' IDENTIFIED BY 'navms_password';
create database oozie default character set utf8;
grant all privileges on oozie.* to 'oozie'@'localhost' identified by 'oozie';
grant all privileges on oozie.* to 'oozie'@'%' identified by 'oozie';
如果你想进一步了解关于mysql的grant语句,可以访问 mysql用户与权限
mysql server的安装和设置都已经搞定了,但还没有与cloudera-manager-server做关联。这一步等cloudera-manager-server安装完成以后再做。
接下来在主节点安装cloudera-manager-server。
配置cloudera数据源并更新数据源
在终端中依次执行以下命令
$ cd /etc/apt/sources.list.d/
$ wget https://archive.cloudera.com/cm5/ubuntu/xenial/amd64/cm/cloudera.list
$ curl -s https://archive.cloudera.com/cm5/ubuntu/trusty/amd64/cm/archive.key| sudo apt-key add -
$ apt-get update
安装jdk
$ sudo apt-get install oracle-j2sdk1.7
安装cloudera-manager-daemons,cloudera-manager-server,cloudera-manager-agent
$ sudo apt-get install cloudera-manager-daemons cloudera-manager-server cloudera-manager-agent
之所以连cloudera-manager-agent也一起安装了,是因为cloudera-manager-agent组件需要安装在每一台主机上,那就一起装上吧。
cloudera-manager-server安装成功以后,/usr/share/cmf/schema/scm_prepare_database.sh
脚本是用来与数据库做关联的,除此之外,该脚本还会创建一个供cloudera-manager-server使用的数据库。
scm_prepare_database.sh
脚本的运行需要一个权限比较高的mysql用户,先进入mysql cli来创建一个权限比较大的用户
mysql> grant all on *.* to 'temp'@'%' identified by 'temp' with grant option;
然后,运行下面的脚本(可以退出mysql cli,也可以再打开一个terminal)
$ sudo /usr/share/cmf/schema/scm_prepare_database.sh mysql -utemp -ptemp scm scm scm
然后,再删除刚才创建的mysql用户(可能需要再次进入mysql cli)
mysql> drop user 'temp'@'%';
$ sudo service cloudera-scm-server start
执行完该命令后,需要稍等片刻,然后打开浏览器访问主节点的7180端口。如果看到了cloudera manager的登录页,那就说明cloudera-manager-server安装成功了。这时候先不用着急登录进去。
接下来在除主节点以外的每一台主机上安装cloudera-manager-agent。
在终端中依次执行以下命令
$ cd /etc/apt/sources.list.d/
$ wget https://archive.cloudera.com/cm5/ubuntu/xenial/amd64/cm/cloudera.list
$ curl -s https://archive.cloudera.com/cm5/ubuntu/trusty/amd64/cm/archive.key| sudo apt-key add -
$ apt-get update
安装jdk
$ sudo apt-get install oracle-j2sdk1.7
安装cloudera-manager-daemons,cloudera-manager-agent
$ sudo apt-get install cloudera-manager-daemons cloudera-manager-agent
由于在主节点已经安装过了几个包了,所以他们的deb文件可以在/var/cache/apt/archives
目录下找到,你用scp将其拷贝到其余每一台主机上,直接使用dpkg
来安装deb文件就行了,省去了下载的时间。需要依次执行以下几个命令:
无需配置cloudera的源,直接更新就行
$ sudo apt-get update
安装deb文件
$ sudo dpkg -i ./oracle-j2sdk1.7_1.7.0+update67-1_amd64.deb
$ sudo dpkg -i ./cloudera-manager-daemons_5.13.1-1.cm5131.p0.2~xenial-cm5_all.deb
$ sudo dpkg -i ./cloudera-manager-agent_5.13.1-1.cm5131.p0.2~xenial-cm5_amd64.deb
安装他们的依赖
$ sudo apt-get install -f
安装完cloudera-manager-agent,就可以启动了。无论你用的是方法一还是方法二,启动之前都需要修改一下/etc/cloudera-scm-agent/config.ini
文件,将其中的server_host
的修改为主节点的ip或hostname。然后使用下面的命令重新启动(或启动)
$ sudo service cloudera-scm-agent restart
如果顺利的话,其余的主机已经和主节点建立了联系。
下面打开浏览器访问到clodera manager server的站点,登录进去,默认的用户名和密码都是admin。同意协议并点下一步,如果让选择cdh的lisence版本,就选免费版的(最左边)。然后你将会看到下面这个图片
上面的图是一个向导,它会引导你创建一个集群。上面的图有两个选项卡,分别是new hosts和currently managed hosts。选择new hosts选项卡的话,将会引导你在新的主机上安装cloudera-manager-agent,由于我们之前已经安装过cloudera-manager-agent了,所以我们其余的主机已经是managed-hosts了,所以选中currently managed hosts选项卡下的所有主机,并点击下一步,然后你会看见这个界面
选择more options,在Remote Parcel Repository URLs中,将{latest_supported}
修改为你安装cloudera-manager-server的版本(如5.13.1)。其余的保持默认就行,一定要用parcels的方式,也是cdh推荐的方式。然后继续。就会开始下载并部署parcels。
如果慢的话,下载需要两天,有的网络可能会快一些。等cloudera manager server将parcels下载完毕并部署到所有的cdh集群后,就可以选择你需要安装的大数据服务了(hadoop,spark,kafka,hbase等),然后分配每台主机的角色。
如果你已经到了这一步,那么你离成功就很近了,下面的事情点点鼠标就能搞定了。
如有问题,请参考官方文档:
https://www.cloudera.com/documentation/enterprise/latest/topics/installation_installation.html