CDH6.3.1在谷歌云的搭建

这两个礼拜,我分别试出了CDH在谷歌云和本地的搭建方法,堪称血泪史啊,话不多说,直接整活。

1.为什么要用CDH

官方回答:

利用业界领先的现代数据管理平台CDH,可以最大程度地利用数据。CDH完全基于开放标准构建,具有一套创新的开源技术,可以以PB级经济高效地存储,处理,发现,建模,服务,保护和管理所有类型的数据。

1.版本划分清晰

2.版本更新速度快

3.支持Kerberos安全认证

4.文档清晰

5.支持多种安装方式(Cloudera Manager方式)

个人理由:

炫酷,炫酷,还是炫酷。。。。。

2.CDH搭建(这里本地和云就一起说了,不一样的地方我会指出来)

2.1服务器资源申请

云服务器(怎么薅谷歌羊毛见我上一篇文章):

谷歌云服务器对CPU有限制,最多32个核,且Cloudera对3-10台服务器的角色划分建议是:one host for utility and gateway roles,因此划分如下:

cluster-master  16vcpu  64G内存  1500G硬盘存储

worker1  8vcpu  48G内存  1000G硬盘存储

worker2 8vcpu  48G内存  1000G硬盘存储

2.2 集群基础环境配置

每个机器全都先把root密码改了:

sudo -i

passwd

2.2.1 Host配置

将集群的Host的ip和域名配置到每台机器的/etc/hosts。

注意 hostname必须是一个FQDN(全限定域名),例如cluster-manager.cdh.com,否则后面转到页面时在启动Agent时有个验证会无法通过。

# master

sudo hostnamectl set-hostname cluster-manager.cdh.com

# worker1

sudo hostnamectl set-hostname worker1.cdh.com

# worker2

sudo hostnamectl set-hostname worker2.cdh.com

#配置 /etc/hosts (注意,此处经过我的测试,要配置内网IP)

ip1 cluster-manager.cdh.com(这几个ip的名字一定要写在最前面!否则后面会报错)

ip2 worker1.cdh.com

ip3 worker2.cdh.com

# 配置 /etc/sysconfig/network

# master

HOSTNAME=cluster-manager.cdh.com

# worker1

HOSTNAME=worker1.cdh.com

# worker2

HOSTNAME=worker2.cdh.com

注意,CDH是不用配置免密登陆的,但是要配置允许root和密码访问,否则后面会报错

vi /etc/ssh/sshd_config

修改:

PermitRootLogin yes

PasswordAuthentication yes

保存后退出并重启

reboot

2.2.2 关闭防火墙(全部节点)

https://www.cloudera.com/documentation/enterprise/6/6.3/topics/install_cdh_disable_iptables.html

systemctl disable firewalld

systemctl stop firewalld

2.2.3关闭 SELinux(全部节点)

https://www.cloudera.com/documentation/enterprise/6/6.3/topics/install_cdh_disable_selinux.html

vim /etc/selinux/config

SELINUX=disabled

# sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config && setenforce0

2.2.3 NTP

注意,谷歌云不用配置NTP!!!!

谷歌云不用配置NTP!!!!

谷歌云不用配置NTP!!!!

Google 无法预测外部 NTP 服务(如 pool.ntp.org)如何处理闰秒。如果可能的话,建议您不要在 Compute Engine 虚拟机上使用外部 NTP 源。更糟糕的是,同时使用 Google NTP 服务和外部服务可能会导致系统时间发生不可预知的变化。仅使用一个外部 NTP 源比使用混合源要好,但外部 NTP 服务(如 pool.ntp.org)可能会使用步进来处理闰秒。因此,您的虚拟机可能会看到重复的时间戳。

最安全的方法是将 Compute Engine 虚拟机配置为使用单个 NTP 服务器(由 Google 提供的内部 NTP 服务器)。请勿混用外部 NTP 服务器和 Google NTP 服务器,因为这可能会导致意想不到的行为。-----谷歌云官方

2.2.4 MySQL(哪个节点都行,推荐主节点,因为我别的没试过。。。)

一、安装YUM Repo

1、由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。

下载命令:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

2、然后进行repo的安装:

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo

二、使用yum命令即可完成安装

注意:必须进入到 /etc/yum.repos.d/目录后再执行以下脚本

1、安装命令:

yum install mysql-server

2、启动msyql:

systemctl start mysqld #启动MySQL

3、获取安装时的临时密码(在第一次登录时就是用这个密码):

grep 'temporary password' /var/log/mysqld.log

4、倘若没有获取临时密码,则

4.1、删除原来安装过的mysql残留的数据

rm -rf /var/lib/mysql

4.2.再启动mysql

systemctl start mysqld #启动MySQL

三、登录:

mysql -u root -p

然后输入密码(刚刚获取的临时密码)

四、登录成功后修改密码

1.首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,

输入设值语句 “ set global validate_password_policy=LOW; ” 

2.当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,

输入设值语句 “ set global validate_password_length=6; ” 

3、现在可以为 mysql 设置简单密码了,只要满足六位的长度即可,

输入修改语句 “ ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; ” 可以看到修改成功,表示密码策略修改成功了!!

五.设置远程登陆

MySQL默认是没有开启远程控制的,必须添加远程访问的用户,即默认是只能自己访问,别的机器是访问不了的。

    1. 连接服务器: mysql -u root -p

  2. 进入mysql数据库:use mysql;

  3. 修改user表中的Host:   update user set Host='%' where User='root';  

                说明: % 代表任意的客户端,可替换成具体IP地址。

  4.  最后刷新一下:flush privileges;

六. 修改配置文件

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

重启MySQL

systemctl restart mysqld 

设置开机启动

systemctl enable mysqld

再次登陆mysql  mysql -u root -p

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;

CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

最后安装 MySQL 驱动

# 下载

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz

# 解压

tar -zxf mysql-connector-java-5.1.46.tar.gz

# 放到指定目录

mkdir -p /usr/share/java/

cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar

2.3 安装 Cloudera Manager 和 CDH

(因为谷歌云嘛,大家都懂得,所以我们使用在线安装)

1.安装 CDH 的 yum 源(全部节点)

https://www.cloudera.com/documentation/enterprise/6/6.3/topics/configure_cm_repo.html

curl -o /etc/yum.repos.d/cloudera-manager.repo https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/cloudera-manager.repo

rpm --import https://archive.cloudera.com/cm6/6.3.0/redhat7/yum/RPM-GPG-KEY-cloudera

2.安装 JDK(全部节点)

https://www.cloudera.com/documentation/enterprise/6/6.3/topics/cdh_ig_jdk_installation.html

必须安装在 /usr/java/ 目录中,这里使用 CDH 源中带的 JDK

yum install oracle-j2sdk1.8

3.安装 Cloudera Manager Server(全部节点)

https://www.cloudera.com/documentation/enterprise/6/6.3/topics/install_cm_server.html

主节点(注意,如果是单节点的话,这里需要把agent也安装上)

yum install cloudera-manager-daemons cloudera-manager-server -y

从节点

yum install cloudera-manager-daemons cloudera-manager-agent -y

4.设置 Cloudera Manager 数据库(主节点)

官方文档推荐的是每个库都有独立的用户,这里为了方便统一用 root 用户。

当 MySQL 或 MariaDB 与 Cloudera Manager Server 位于同一节点时:/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm root

当 MySQL 或 MariaDB 在其它节点上时:/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h db01.example.com --scm-host cm01.example.com scm root

5. 安装 CDH 和其他软件(主节点)

https://www.cloudera.com/documentation/enterprise/6/6.3/topics/install_software_cm_wizard.html

systemctl start cloudera-scm-server

tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log

# 看到如下日志就可以访问 WEB 端了:http://:7180,用户名和密码默认都是 admin

INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.

子节点启动

vi /etc/cloudera-scm-agent/config.ini,修改server_host=cluster-manager.cdh.com

systemctl start cloudera-scm-agent

查看cloudera-scm-agent状态:systemctl status cloudera-scm-agent

查看cloudera-scm-agent日志:tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log

3. 集群搭建

炫酷的CDH终于看到页面啦!!!!

地址:http://master外部IP:7180

用户名密码均是admin

由于我已经配置完了,所以是这个样子

因为我们用的是谷歌云,所以不用担心下载之类的问题,就下一步下一步下一步

4.其他问题:

4.1 hdfs用户登录不上

当HDFS开启了权限认证,有时操作HDFS需要切换到hdfs用户对数据进行操作,但可能会提示如下问题:

[root@cdh1 ~]# su hdfs

This account is currently not available.

此时查看系统的用户信息,将hdfs 的/sbin/nologin改为/bin/bash,然后保存,再次登录hdfs即可。

[root@cdh1 ~]# cat /etc/passwd | grep hdfs

hdfs:x:954:961:Hadoop HDFS:/var/lib/hadoop-hdfs:/sbin/nologin

#将上面的信息改为如下

hdfs:x:954:961:Hadoop HDFS:/var/lib/hadoop-hdfs:/bin/bash

4.2 root用户对HDFS文件系统操作权限不够问题

# 1 在Linux执行如下命令增加 supergroup

groupadd supergroup

# 2 如将用户root增加到 supergroup 中

usermod -a -G supergroup root

# 3 同步系统的权限信息到HDFS文件系统

sudo -u hdfs hdfs dfsadmin -refreshUserToGroupsMappings

# 4 查看属于 supergroup 用户组的用户

grep 'supergroup:' /etc/group


最后


4.3 HDFS文件系统副本不足的块问题(此时我用的单机版,Datanode为1)



原因

原因是设置的副本备份数与DataNode的个数不匹配。

dfs. replication属性默认是3,也就是说副本数---块的备份数默认为3份

注意,hdfs的复制因为要和datanode保持一致

cm这里的配置要改一下

dfs.replication这个参数其实只在文件被写入dfs时起作用,虽然更改了配置文件,但是不会改变之前写入的文件的备份数。

所以我们还需要步骤2

在cm0中通过命令更改备份数:

su hdfs

hadoop fs -setrep -R 1 /

这里的-R 1的数字1就对应我们的DataNode个数。

你可能感兴趣的:(CDH6.3.1在谷歌云的搭建)