CentOS7.6搭建CDH6.2.0以及部分数据迁移的方式
一、基础准备(CentOS7基础服务搭建)
1、网络配置
2、映射
vi /etc/hosts
3、免密登录
ssh-keygen -t rsa一路回车,生成无密码的密钥对。
将公钥添加到认证文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,并设置authorized_keys的访问权限:chmod 600 ~/.ssh/authorized_keys。
ssh-copy-id dsj02发送到其他机器
4、安装jdk
1.在/usr目录下建立目录/java,
cd /usr
mkdir java
2.把JDK安装包上传到/usr/java目录,解压JDK安装包,
tar -zxvf ./jdk-8u152-linux-x64.tar.gz
3.配置环境变量
vim /etc/profile
/etc/profile中添加下面配置项
JAVA_HOME=/usr/java/jdk1.8.0_161
PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:PATH
CLASSPATH=.:
J
A
V
A
H
O
M
E
/
l
i
b
/
d
t
.
j
a
r
:
JAVA_HOME/lib/dt.jar:
JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
5、安装配置MySql
此处需要注意的是centos 7 默认安装的是mariadb,如果不卸载直接安装的话会报错,报错信息mariadb-libs is obsoleted by mysql-community-libs-5.7.20-1.el7.x86_64
rpm -qa | grep mariadb #查看安装信息
rpm -e mariadb-libs* --nodeps #根据查找到的软件包信息卸载
一、安装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
三、登录:
1、方式一(已验证):
mysql -u root -p
然后输入密码(刚刚获取的临时密码)
2、方式二(未验证):
进入mysql数据库
root@test:/home# mysql -uroot -proot <uroot是用户名,proot是密码>
如:
root@test:/home# mysql -root -XXXX
3、若登录不了,则进行以下配置,跳过登录验证
3.1、重置密码的第一步就是跳过MySQL的密码认证过程,方法如下:
3.2、vim /etc/my.cnf(注:windows下修改的是my.ini)
在文档内搜索mysqld定位到[mysqld]文本段:
/mysqld(在vim编辑状态下直接输入该命令可搜索文本内容)
在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程,如下图所示:
3.3、保存文档并退出:
#:wq
3.4、接下来我们需要重启MySQL:
四、登录成功后修改密码
1、注意:这里会进行密码强度校验(密码设置时必须包含大小写字母、特殊符号、数字,并且长度大于8位)
2、如不满足以上条件则会报错,如下图:
密码策略问题异常信息:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
3、解决办法:
3.1、查看 mysql 初始的密码策略,
输入语句 “ SHOW VARIABLES LIKE ‘validate_password%’; ” 进行查看,
如下图:
3.2、首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,
输入设值语句 “ set global validate_password_policy=LOW; ” 进行设值,
3.3、当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,
输入设值语句 “ set global validate_password_length=6; ” 进行设值,
3.4、现在可以为 mysql 设置简单密码了,只要满足六位的长度即可,
输入修改语句 “ ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’; ” 可以看到修改成功,表示密码策略修改成功了!!!
3.5、注:在默认密码的长度最小值为 4 ,由 大/小写字母各一个 + 阿拉伯数字一个 + 特殊字符一个,
只要设置密码的长度小于 3 ,都将自动设值为 4 ,
3.6、关于 mysql 密码策略相关参数;
1)、validate_password_length 固定密码的总长度;
2)、validate_password_dictionary_file 指定密码验证的文件路径;
3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;
五、修改密码
1、方式一(已验证):
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘@abcd123456’;
2、方式二(未验证)
set password=password(“yourpassword”);
六、开启远程控制
MySQL默认是没有开启远程控制的,必须添加远程访问的用户,即默认是只能自己访问,别的机器是访问不了的。
1、方式一(已验证):
1.1、连接服务器: mysql -u root -p
1.2、看当前所有数据库:show databases;
1.3、进入mysql数据库:use mysql;
1.4、查看mysql数据库中所有的表:show tables;
1.5、查看user表中的数据:select Host, User,Password from user;
1.6、修改user表中的Host: update user set Host=’%’ where User=‘root’;
说明: % 代表任意的客户端,可替换成具体IP地址。
1.7、最后刷新一下:flush privileges;
1.8、注意:一定要记得在写sql的时候要在语句完成后加上" ; "
2、方式二(未验证):
1、使用 grant 命令
grant all privileges on 数据库名.表名 to 创建的用户名(root)@"%" identified by “密码”;
2、格式说明:
数据库名.表名 如果写成*.*代表授权所有的数据库 flush privileges; #刷新刚才的内容
如:
grant all privileges on . to root@“113.123.123.1” identified by “123456789”;
@ 后面是访问mysql的客户端IP地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为本地访问(那此用户就不能远程访问该mysql数据库了)
七、其他配置
1、设置安全选项:
mysql_secure_installation
2、关闭MySQL
systemctl stop mysqld
3、重启MySQL
systemctl restart mysqld
4、查看MySQL运行状态
systemctl status mysqld
5、设置开机启动
systemctl enable mysqld
6、关闭开机启动
systemctl disable mysqld
7、配置默认编码为utf8:
vi /etc/my.cnf #添加 [mysqld] character_set_server=utf8 init_connect=‘SET NAMES utf8’
其他默认配置文件路径:
配置文件:/etc/my.cnf 日志文件:/var/log//var/log/mysqld.log 服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid
8、查看版本
select version();
创建数据库(如果需要安装下边的几个组件的话,需要先把数据库创建好)
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
(Activity Monitor需要):
create database am DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
6、关闭防火墙和SELinux(所有节点)
注意: 需要在所有的节点上执行,因为涉及到的端口太多了,临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。
关闭防火墙:
service iptables stop (临时关闭)
chkconfig iptables off (重启后生效)
centos 7 默认使用的是firewall,不是iptables
systemctl stop firewalld.service
systemctl mask firewalld.service
关闭SELINUX:
setenforce 0 (临时生效)
vi /etc/selinux/config 下的 SELINUX=disabled (重启后永久生效)
7、配置ntp服务
#安装
yum install ntp
#设置开机启动
chkconfig ntpd on
#服务启动
systemctl start ntpd
#手动同步时钟的方法
ntpdate -u 0.cn.pool.ntp.org
8.安装mysql驱动
cp mysql-connector-java-5.1.45.jar /usr/share/java/mysql-connector-java.jar
一定要这个名字(mysql-connector-java.jar),否则会报错Unable to find JDBC driver for database type: MySQL
9.内网穿透,远程连接//可略
curl -s https://install.zerotier.com | sudo bash
zerotier-cli info 然后运行这个命令 得到返回值
二、CentOS7安装CDH6.2.0
1.硬件准备
建议最少4台物理机或者虚拟机(一个master,3个node),4核16G
如果用来学习,建议可以4核8G
如果是生产部署,推荐8核32G以上
2.基础配置
配置hosts、ssh免登录、安装jdk8、安装mysql,上文基础准备中已配置好。
3.下载cloudera 6.2.0 rpm
https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPMS/x86_64/
下载以下文件:
cloudera-manager-agent-6.2.0-968826.el7.x86_64.rpm
cloudera-manager-daemons-6.2.0-968826.el7.x86_64.rpm
cloudera-manager-server-6.2.0-968826.el7.x86_64.rpm
4.下载cloudera 6.2.0 parcels
https://archive.cloudera.com/cdh6/6.2.0/parcels/
下载以下文件:
CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel
CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha1
manifest.json
5.安装cloudera-manager-server(master节点)
rpm安装(需在存放下载的rpm文件的目录下执行命令,安装agent也一样)
yum install cloudera-manager-server-6.2.0-968826.el7.x86_64.rpm cloudera-manager-daemons-6.2.0-968826.el7.x86_64.rpm
parcel初始化
新建parcel目录
mkdir -p /opt/cloudera/parcel-repo
将CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel、CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha1、manifest.json复制到该目录
重命名CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha1为CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha
数据库配置
编辑/etc/cloudera-scm-server/db.properties,配置数据库,示例如下:
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=localhost
com.cloudera.cmf.db.name=cmf
com.cloudera.cmf.db.user=root
com.cloudera.cmf.db.password=666666
com.cloudera.cmf.db.setupType=EXTERNAL
注意:请保证mysql中有一个名为cmf的空数据库
启动server
systemctl start cloudera-scm-server
6.安装cloudera-manager-agent(所有node节点)
rpm安装
yum install cloudera-manager-agent-6.2.0-968826.el7.x86_64.rpm cloudera-manager-daemons-6.2.0-968826.el7.x86_64.rpm
config配置
编辑/etc/cloudera-scm-agent/config.ini文件,将host_server修改为master
启动angent:
systemctl start cloudera-scm-agent
7.安装cloudera parcels
打开浏览器,访问master:7180(启动比较慢,需要1-2分钟)
默认用户名/密码: admin/admin
按照步骤安装即可(建议选择免费版安装)
!!!!!!!!!!: 配置过程中一定不要刷新网页,自定义选择安装组件时,一定要等他检测并初始化完成!
三.安装CDH中遇到的问题:
1.Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10
Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 30。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。您可以继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。
临时生效:
sysctl vm.swappiness=10 && cat /proc/sys/vm/swappiness
永久生效:
echo ‘vm.swappiness=10’>> /etc/sysctl.conf
2.已启用透明大页面压缩,可能会导致重大性能问题。
已启用透明大页面压缩,可能会导致重大性能问题。请运行“echo never > /sys/kernel/mm/transparent_hugepage/defrag”和“echo never > /sys/kernel/mm/transparent_hugepage/enabled”以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。
临时生效:
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
3.存在隐患 : 9 DataNodes are required for the erasure coding policies: RS-6-3-1024k.
存在隐患 : 9 DataNodes are required for the erasure coding policies: RS-6-3-1024k. The number of DataNodes is only 3.
解决方案
使用RS-6-3-1024k编码纠删码策略至少需要9个DataNodes,当前只安装了3个,所以再增加6个DataNodes节点即可解决该问题。
修改编码纠删码策略同样也可以解决,不过会比较麻烦
4.Hue超级用户hdfs忘记密码:/opt/cloudera/parcels/CDH/lib/hue/build/env/bin/hue changepassword hdfs --cm-managed
5.Yarn跑程序失败,container被yarn杀掉报错
在hadoop2及以上版本中,task 是运行在container中的。
Yarn配置文件中会限制Container的最小内存(yarn.scheduler.minimum-allocation-mb)、最大内存(yarn.scheduler.maximum-allocation-mb)。
如果container的内存超限,会被yarn杀死
在cdh里将yarn中的配置修改一下,上述最大内存加大,足够大即可
6.Kafka-manager 启动时报错:
Offset Commit Topic Replication Factor
offsets.topic.replication.factor
在cdh的kafka配置中里设置该参数、
7.Hue集成hbase打不开
通过CM查看HBase Thrift服务framed配置为如下
进入HBase的配置页面将Thrift服务的如下两个配置禁用
总结
1.在CDH6中HBase Thrift Server服务默认启用了hbase.regionserver.thrift.compact和hbase.regionserver.thrift.framed参数,这样HBase会使用framed的方式进行传输。
2.在CDH6中Hue恰恰将默认的传输模式修改为了buffered模式,从而导致Hue无法正常访问HBase Thrift。
https://cloud.tencent.com/developer/article/1442402
8.java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
往计算节点的spark的安装目录下发一份mysql-connector-java.jar即可
9.启动 cloudera-scm-server服务 出现:Error creating bean with name ‘entityManagerFactoryBean’:
1.这个错误是启动 cloudera-scm-server服务出现的
2. 先看一下报错的内容
2017-04-29 18:45:25,476 INFO main:org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider: HHH010002: C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://null/null?useUnicode=true&characterEncoding=UTF-8
2017-04-29 18:45:25,477 INFO main:org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider: HHH000046: Connection properties: {user=, password=****, autocommit=true, release_mode=auto}
2017-04-29 18:45:25,477 INFO main:org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider: HHH000006: Autocommit mode: true
2017-04-29 18:45:25,478 INFO main:org.springframework.beans.factory.support.DefaultListableBeanFactory: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@46cf209b: defining beans [commandLineConfigurationBean,entityManagerFactoryBean,com.cloudera.server.cmf.TrialState,com.cloudera.server.cmf.TrialManager,com.cloudera.cmf.crypto.LicenseLoader]; root of factory hierarchy
2017-04-29 18:45:25,479 ERROR main:com.cloudera.server.cmf.Main: Server failed.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘com.cloudera.server.cmf.TrialState’: Cannot resolve reference to bean ‘entityManagerFactoryBean’ while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘entityManagerFactoryBean’: FactoryBean threw exception on object creation; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: cmf.server] Unable to build EntityManagerFactory
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:616)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResol
分析从日志中我们可以看到应该是数据库的问题,因为很明显有一行日志用户名和密码都是空。于是去官网看了下。好像是启动要用到另外的数据库,有三种,我选择了mysql,如果不会在linux下安装mysql请参考http://blog.csdn.net/qq_22222499/article/details/70992925。官网参考地址http://www.cloudera.com/documentation/manager/5-1-x/Cloudera-Manager-Installation-Guide/cm5ig_installing_configuring_dbs.html#cmig_topic_5_2_unique_1。
3.安装好后,执行下列命令./opt/cm-5.13.1/share/cmf/schema/scm_prepare_database.sh database-type [options] database-name username password 看了官网应该知道这个在个文件在哪里。我们在数据库中应该建立一个数据库供cloudera使用。
4.可能还会出现情况,就是JDBC driver cannot be found,这时下载mysql-connector-java-8.0.19-1.el7.noarch解压后把mysql-connector-java.jar包复制到 /opt/cm-5.13.1/share/cmf/lib 下就行了。
5.重启cloudera-scm-server服务。
6.等待1分钟,访问7180端口,应该就不会出问题了
四、集群间hive数据表的迁移
dsj01为原集群,mcdsj01为目标集群,以下相同
方式一:(此方法需要建库建表)
1.在原集群hive上查看迁移表的建表语句及所在库,然后在新集群hive上建库建表;
show create table tb_name;
create database db_name;
create table tb_name …
2.原集群下载文件系统文件到本地;
hadoop fs -get /user/hive/warehouse/dc_ods.db/tb_name /home/zhang.xl/tb_name;
如果文件过大则压缩,再发送到新集群(若两集群网络互通则使用scp拷贝过去,不互通下载到本地再上传到新集群);
tar -czvf tb_name.tar.gz tb_name
scp -p端口 tb_name.tar.gz 用户@ip:目标目录
新集群解压文件,数据导入到新集群文件系统中;
tar -xf tb_name.tar.gz
hadoop fs -put /home/zhang.xl/tb_name/* /user/hive/warehouse/dc_ods.db/tb_name ;
2也可以运行集群间hadoop distcp传输命令,传输各表数据文件:
sudo -u hdfs /opt/cloudera/parcels/CDH/bin/hadoop distcp hdfs://dsj01/user/hive/warehouse/mc_photo.db/mbl_pay/* hdfs://mcdsj01/user/hive/warehouse/mc_photo.db/mbl_pay/
3.新集群使用beeline进入hive,修复分区表,执行后自动退出hive客户端;
beeline -u " jdbc:hive2://10.9.xx.xx:10000 name pwd" -e “msck repair table tb_name;”
其实运行完这一步你就会发现已经可以查询到表数据了,但是有些表通过这个方式会乱码就只能通过export->distcp->import方式迁移表了,也就是下面第二种方式
Note:若要使用impala查询该表需要刷新元数据
刷新impala元数据,执行后自动退出impala客户端;
impala-shell -i 10.9.xx.xx:21001 -q ‘INVALIDATE METADATA tb_name’;
检查是否迁移成功;
impala-shell -i 10.9.xx.xx:21001 -q ‘select count(*) from tb_name’;
方式二:(此方法需要建库,不需要建表)
1.原集群将hive表导入到临时hdfs临时目录下,多条语句用逗号分隔并换行;
#export_hive.sql
export table dc_ods.tb_name1 to ‘/zxl/tb_name1’;
export table dc_ods. tb_name2 to ‘/zxl/tb_name2’;
#执行命令
beeline -u " jdbc:hive2://10.9.xxx.xxx:10000 name pwd" -f export_hive.sql;
2.用hadoop distcp传输数据到新集群hdfs目录里
3…将文件导入新集群hive里
#importal_hive.sql
import table dc_ods.tb_name1 from ‘/zxl2/tb_name1’;
import table dc_ods. tb_name2 from ‘/zxl2/tb_name2’;
4.检查hive是否迁移成功;
beeline -u " jdbc:hive2://10.9.xx.xx:10000 name pwd" -e “select count(*) from dc_ods.tb_name1;”
Note:若要使用impala查询该表需要刷新元数据
sudo -u hue impala-shell -i 10.9.xx.xx:21001 -q ‘INVALIDATE METADATA dc_ods. tb_name1’;
sudo -u hue impala-shell -i 10.9.xx.xx:21001 -q 'select count(*) from dc_ods. t
五、集群间hbase数据表的迁移
方式一:
create ‘table_test’,{NAME=>“i”} #目的集群上先创建一个与原表结构相同的表
hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zk-addr1,zk-addr2,zk-addr3:2181:/hbase table_test
/opt/cloudera/parcels/CDH/bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=mcdsj01:2181:/hbase p_user_pay_off
方式二:
1.export:
sudo -u hdfs /opt/cloudera/parcels/CDH/bin/hbase org.apache.hadoop.hbase.mapreduce.Export p_user_register_off hdfs://mcdsj01/tmp/p_user_register_off
2.先建表(可用cdh web界面创建)
3.import:
sudo -u hdfs /opt/cloudera/parcels/CDH/bin/hbase org.apache.hadoop.hbase.mapreduce.Import p_user_register_off hdfs://mcdsj01/tmp/p_user_register_off
Last:参考网站
mysql5.7安装:
https://blog.csdn.net/wohiusdashi/article/details/89358071
Cdh6报错汇总:
https://blog.csdn.net/qq_39680564/article/details/100013275
集群迁移:
https://max.book118.com/html/2018/0220/154043618.shtm
Hive数据迁移:
https://www.jianshu.com/p/c642fc4dc25b
Hbase迁移:
https://blog.csdn.net/b6ecl1k7bs8o/article/details/94918595
Cdh新增节点:
https://www.cnblogs.com/chevin/p/10117806.html
https://blog.csdn.net/xiaolong_4_2/article/details/83113185
https://blog.csdn.net/lvtula/article/details/89404808
https://www.jianshu.com/p/09893421baaa