cdh 安装_使用Cloudera的CDH部署Hadoop:第三步,安装管理平台和数据库

导读

这篇文章是关于使用CDH搭建Hadoop集群的第三步:安装Cloudera Manager Server和数据库的。

这篇文章有点长,涉及的知识点较多,略显零碎。虽然笔者可以将一些内容剔除,但笔者没有这么做,是因为想尽可能的把笔者的实践过程完整的记录下来,让后面的同学切实感受到安装的过程并可以避开笔者踩过的坑。

本文主要参考Cloudera官方文档。

在进行这一步之前,应该进行充分的前期准备。关于前期准备工作的相关内容请参考文章:

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

2)使用Cloudera的CDH部署Hadoop:第一步,配置package仓库

3)使用Cloudera的CDH部署Hadoop:第二步,安装JDK

1安装Cloudera Manager Server

安装Cloudera Manager Server packages的主机不必是集群的一个主机,这个主机要能访问本地或远程的数据库。

如果你配置了局域网yum源那么命令:

yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server

如果没有,那么命令:

sudo yum --nogpgcheck localinstall cloudera-manager-daemons-*.rpm

sudo yum --nogpgcheck localinstall cloudera-manager-server-*.rpm

注意:先不装cloudera-manager-agent,因为后面使用管理系统自动安装。

2安装数据库

Cloudera Manager使用数据库来存储Cloudera Manager configuration,系统健康状况,任务执行进度等信息。

建议Cloudera Manager Server和数据库分开部署,这样可以隔离错误。

2.1需要数据库的组件

Cloudera Manager Server, Oozie Server, Sqoop Server, Activity Monitor, Reports Manager, Hive Metastore Server, Hue Server, Sentry Server, Cloudera Navigator Audit Server, Cloudera Navigator Metadata Server。

2.2安装与配置数据库(MySql)

访问https://www.cloudera.com/documentation/enterprise/release-notes/topics/rn_consolidated_pcm.html#cdh_cm_supported_db查看支持的数据库版本。

注意:

1)如果安装5.6或 5.7,必须安装MySQL-shared-compat或MySQL-shared package

2)注释:虽然CDH官网这么说,但是mysql官网的5.7安装包中已经没有MySQL-shared-compat或MySQL-shared package,不过5.6的有。

3)datadir目录默认是/var/lib/mysql划分了足够的空间

使用命令:du -hs /var/lib/mysql

4)Mysql的GTID复制机制开启了,Cloudera Manager安装会失败。

下载MySql然后手动安装。

下面这些命令在联网情况下可以,若不连接外网则没法使用这个命令来装。

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

例:

wget http://192.168.107.83/mysql/mysql-community-release-el7-5.noarch.rpm

sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

sudo yum update

sudo yum install mysql-server

sudo systemctl start mysqld

将MySQL加入局域网yum源

还是使用事先构建好的局域网的yum源。

去网站:https://dev.mysql.com/downloads/mysql/5.7.html#downloads将mysql下载下来。然后放到yum服务器上。

注意要自己生成repodata目录文件,使用createrepo命令。

例如,将rpm包放置于/var/www/html/mysql/5.7.23下,那么执行命令:

createrepo /var/www/html/mysql/5.7.23

命令执行成功:

f92d08d556b76f1c348a5993036671b3.png

在/var/www/html/mysql/5.7.23下生成一个repodata文件夹

16a732f741bd0fe2c3f307d91db08575.png

打开这个repodata,看到文件:

5deac763b456d4e5c42dbcedef955abb.png

配置客户端,使用此yum源

打开/etc/yum.repos.d/,创建一个repo文件

[mysql]

name=mysql

baseurl=http://192.168.107.83/mysql/5.6.5.6.41-1.el7.x86_64/enabled=1

gpgcheck=0

priority=1

将baseurl设置为http://192.168.107.83/mysql,那么repodata文件夹就要在mysql目录下,所以将上述生成的repodata移动到mysql下。

准备工作都已完成,开始安装mysql。

初次在Centos上安装mysql报错:

f62bf2c560b50767e5b9b2d2ef6a8c14.png

这是软件包依赖 mariadb组件的缘故,卸载这个。

yum -y remove mariadb-libs

然后安装mysql:

yum install mysql-community-server (安装5.6的命令式yum install mysql-server)

db09b16ed5290d8818bb9ed9444f662a.png

选y,继续。

但是有如下报错:

5367a7885e7e8561295facb983379d20.png

看来是找不到文件,因为机器自动找的是http://192.168.107.83/mysql/mysql-community-common-5.7.23-1.el7.x86_64.rpm

这个文件当然不存在,因为其在:/var/www/html/mysql/5.7.23,这个路径下。

于是将baseurl改为:

http://192.168.107.83/mysql/5.7.23

这样就完全没有问题了。

acf37de50062bb43a53e698ca18f68d3.png

查看安装了哪些服务:

rpm -qa | grep mysql*

8a88fad3f7c326ef865c8a784a12e3be.png

启动MySql

systemctl start mysqld.service

可能要等几毫秒的时间。

看mysql是否正常运行

ps -ef | grep mysqld

e2a1e378988c334551f5d263a23c9a59.png

附:卸载mariadb

systemctl stop mariadb

rpm -qa | grep mariadb

rpm -e --nodeps mariadb-5.5.52-1.el7.x86_64

rpm -e --nodeps mariadb-server-5.5.52-1.el7.x86_64

rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64

另外,安装完5.6以后,没找到/etc/my.cnf,原因是:

第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动,

第二种说法,MySQL在启动时自动使用/usr/share/mysql(或/usr/)目录下的my-medium.cnf文件,这种说法仅限于rpm包安装的MySQL,

解决方法:

只需要复制一个/usr/share/mysql目录下的.cnf文件到/etc目录,并改名为my.cnf即可。

3配置和启动MySql服务

1)如果Mysql启动,那么停止他:sudo systemctl stop mysqld

2)把/var/lib/mysql/ib_logfile0 和/var/lib/mysql/ib_logfile1移到备份位置。使用命令(mv /var/lib/mysql/ib_logfile0 /root/)

3)确定my.cnf的位置,默认的为/etc/my.cnf

4)更新my.cnf

· 为了避免死锁,隔离级别设置为READ-COMMITTED

· 配置为使用InnoDB。配置MyISAM,那么Cloudera Manager启不来。

· 使用命令mysql> show table status;检查使用的是哪种引擎。

· 设置innodb_flush_method property为O_DIRECT,因为系统需要高的写吞吐量。

· 根据集群规模设置max_connections

配置示例:

[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

5)如果AppArmor和Mysql跑在同台机器上,要配置AppArmor许可Mysql写二进制文件

6)允许开机启动MySql:sudo systemctl enable mysqld

7)启动Mysql:sudo systemctl start mysqld

Centos 7 装5.6上述命令无法使用,要用:systemctl start mysql

8)设置密码

这一步似乎不行,下面见下面9)给出正确做法

运行sudo /usr/bin/mysql_secure_installation设置MySQL root password,新安装的MySql服务,root password是空的。

sudo /usr/bin/mysql_secure_installation

过程类似:

[...]

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!

9)设置密码

grep "password" /var/log/mysqld.log

002617a75c26fffae9a1e3e200e09585.png

随机密码是:lVBIfgklx1>&

b4d6071787290a9f2b199be297b12867.png

使用上面生成的随机密码登录系统:

mysql -u root -p

lVBIfgklx1>&

更改密码:

SET PASSWORD = PASSWORD('cnki2018');

ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

flush privileges;

执行这个语句会报错:

9a5b22818f78442637e88b2895a236d2.png

这是因为:

为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log。

如果只是修改为一个简单的密码,会报错误。

这与validate_password_policy的值有关:

validate_password_policy取值:

91d1aeb97e1a462851492f820bf35877.png

默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

为了能设置一个简单的密码,可将validate_password_policy设置为0:

4c65b41b78f8c9af29ae7a4cdc8ce78a.png

set global validate_password_policy=0;

设置完后,要重新设置密码

但是设置密码为cnki太短,先设置密码为cnki2018!,然后看下密码长度要求:

select @@validate_password_length;

972e4993fc5e44d30f8da87e0c82fe96.png

所以设置为将密码设置为cnki2018。

392eb4c12f61d9e992cd82130faf51d7.png

可以设置密码长度:set global validate_password_length=1;

但是注意,密码长度有最小限制:

validate_password_number_count+ validate_password_special_char_count+ (2 * validate_password_mixed_case_count)

其中,validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。

这些值默认都是1,所以密码最小值为4。

设置用户 root 可以在任意 IP 下被访问:

grant all privileges on *.* to root@"%" identified by "new password";

刷新权限使之生效:

flush privileges;

在选错MySQL版本或者无法安装需要重装的情况下,要卸载Mysql

卸载MySql:

rpm -qa |grep -i mysql

yum remove

注意先查出来然后再卸载

杀死MySQL进程,强制登录

a83eddf2e36d03a5a2974f8d7a8ac126.png

执行grep "password" /var/log/mysqld.log无法获得临时密码

采用强制登录:

1、systemctl stop mysqld

2、systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

3、systemctl start mysqld

4、mysql -u root

5、UPDATE mysql.user SET authentication_string = PASSWORD('cnki2018') WHERE User = 'root' AND Host = 'localhost';

6、FLUSH PRIVILEGES;

7、quit;

执行完上述步骤在执行其他语句可能出错

0e96c109d698a69fc468ea2b3068da93.png

所以在执行下面语句:

SET PASSWORD = PASSWORD('cnki2018');

ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

flush privileges;

4安装MySql JDBC驱动

在Cloudera Manager Server主机上及其他需要的主机上安装MySql JDBC。

注意MySQL 5.6需要5.1.26及以上版本的JDBC驱动。

Cloudera建议使用5.1版本的JDBC驱动。

注意不要使用yum install来安装MySQL驱动包,因为他会安装OpenJDK(如果将openJDK卸载了,那么就没问题)。

下载MySQL JDBC driver(.tar.gz格式文件):http://www.mysql.com/downloads/connector/j/5.1.html

解压:tar zxvf mysql-connector-java-5.1.46.tar.gz

拷贝刚解压的文件到:/usr/share/java/,如果没有就先创建这个目录。

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

5创建数据库

一定要配置为支持utf8编码。

一定要记录下所创建的数据库名称,用户名,密码。Cloudera Manager安装向导会用到这些信息。

1)以root账号登陆:mysql -u root -p

2)创建数据库:

CREATE DATABASE DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

例:CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

GRANT ALL ON .* TO ''@'%' IDENTIFIED BY '';

例:GRANT ALL ON scm.* TO scm@'%' IDENTIFIED BY 'cnki2018';

GRANT ALL ON amon.* TO amon@'%' IDENTIFIED BY 'cnki2018';

GRANT ALL ON rman.* TO scm@'%' IDENTIFIED BY 'cnki2018';

注:

删除数据库命令:drop database ;

例:drop database scm;

Cloudera Manager configuration settings提供了一些默认值,但不必一定使用这些。

023c42dbbb45dc87f236344a718f8852.png

3)确认:

SHOW DATABASES;

SHOW GRANTS FOR ''@'%';

例:SHOW GRANTS FOR scm@'%';

注:一些mysql相关命令

使用数据库:use ;

列出所有表:show tables;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值