文章目录
- 前言
- 节点网络配置
- ssh配置
- cloudera以及JDK以及Mysql版本选择【必读】
- 其他注意事项
- JDK安装
- mysql5.7安装
- 防火墙
- 正题
- CDH集群安装
- 其他
- 虚拟机扩容
- TODO
- 参考
前言
全文共1.4w字(仅安装整个大数据平台,关于cdh manager管理,会单独记录)。相比有的地方几十页的文档已经少了不少,但是还真的比较多。强烈建议多看官方文档,写得特别详细,是的,确实有些多。一定要耐心,一定要仔细仔细再仔细。相信我,至少,这比你手动搭建一个完整的大数据集群平台要来得快(前提是你要静下心看大量的官网文档)。
安装吧,是的,鬼知道我经历了些什么。鬼知道你会经历什么。。。有什么问题欢迎留言交流。
物理机的搭建,没有重新记录搭建过程,在搭建物理机环境时,有更新此文。
所以,物理机上搭建环境的朋友,也可以当作个参考。
- 第一次搭建完全分布式大数据组件是初学大数据时,手动搭建各个生态组件的,破机器上3虚拟机折腾了一周。
- 之后用了半年的HDP,ambari搭建的大数据平台,现在有个项目,需要在十台真实机器上搭建平台。考虑之后,决定使用CDH,cloudera manager搭建。
- 因为这两天会在10台左右的真实机器上搭建大数据平台,为了在那时做出更少的错误决策,决定先用6台虚拟机模拟一下。(最后成功时只有三台虚拟机了。6次的填坑失败,后来4次填坑也失败。建议先用3台练手,熟悉了,没问题了,再用更多的虚拟机)
- 建议每台虚拟机给30G,我的6台虚拟机版本就是只给了8G,后悔死了。扩容也失败,删除又搭了一次4虚拟机版本(虽然最后也挂了)。
##操作步骤
注:以下内容已经第二次安装实践修改(第一次的因为种种问题,删除了)
###VirtualBox5.2.8
安装,略
###CentOS6.9
建议不用中文
Desktop:基本的桌面系统,包括常用的桌面软件,如文档查看工具
Minimal Desktop:基本的桌面系统,包含的软件更少
Minimal:基本的系统,不包含任何可选的软件包
Basic Server:安装的基本系统的平台支持,不包含桌面
Database Server:基本系统平台,加上MySQL和PostgreSQL数据库的客户端,无桌面
Web Server:基本系统平台,加上PHP,Web server,还有MySQL和PostgreSQL数据库的客户端,无桌面
Virtual Host:基本系统加虚拟化平台
Software Development Workstation:包含的软泥吉安包较多,基本系统,虚拟化平台桌面环境,开发工具
【可参考:http://www.runoob.com/linux/linux-install.html】 建议为每台虚拟机复制一个镜像。
简述:
5台CentOS6.9,~除namenode2.5G内存,其他每台1.5G;~
2018/4/8建议
除namenode4.5G内存,其他每台2.5G
硬盘VDI,每台20G【我就是只给了8G,后悔死了】,固定,自定义路径。
网卡全为桥接。
选择下载的minimal镜像考虑到后来下载依赖包时的网络问题,用DVD镜像把;Install or upgrade an existing system 安装或升级现有的系统;Skip
语言选英文;us键盘;basic;忽略所有数据;然后进行网络设置(很重要)。
选择时区(之后要保证每台机器时间相同);
修改分区(添加home);格式化;修改写入磁盘;host5为Minimal Desktop(其他三台Basic Server),重启
节点网络配置
强烈安利一款炸裂的工具软件:MobaXterm。我用过SecureCRT、XShell,这两款工具相比MobaXterm,真的差距太大。不多说,不知道的朋友去感受下。
注意,对所有机器都执行以下步骤
- vi /etc/sysconfig/network 修改hostname(如果创建每一个虚拟机时都指定了名称,可略过);添加与宿主机同样的网关GATEWAY
- 配置ip地址:
vi /etc/sysconfig/network-scripts/ifcfg-eth0【修1加3】BOOTPROTO=static #static,静态ip,而不是dhcp,自动获取ip地址。 IPADDR=********** #设置我想用的静态ip地址,要和物理主机在同一网段,但又不能相同。 NETMASK=********** #子网掩码,和物理主机一样就可以了。 GETWAY=********** #和本机一样
- 配置DNS
vi /etc/resolv.confnameserver=******** nameserver=********
- 修改hosts文件
- service network restart
ssh配置
A若想无密码访问B,就需要把公钥发送给B(需要输入B的密码),B把A发来的公钥添加到自己的授权文件里。
在Hadoop启动以后,namenode是通过SSH(Secure Shell)来启动和停止各个节点上的各种守护进程的,这就需要在节点之间执行指令的时候是不需要输入密码的方式,故我们需要配置SSH使用无密码公钥认证的方式。
如果cloudera server与namenode不是同一台机器,其也需要对所有客户端免密登录
- vi /etc/ssh/sshd_config
找到以下内容,并去掉注释符”#“
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径 - service sshd restart
- ssh-keygen -t rsa (生成其无密码密钥对)
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys (把id_rsa.pub追加到授权的key里面去)
- chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys(修改文件"authorized_keys"权限,这步骤很重要,很多莫名其妙的错误有可能就是权限的问题)
我感觉1、2步骤是非必须的。
下面是把公钥复制到所有的slave节点上去
最简单的方法:
ssh-copy-id -i ~/.ssh/id_rsa.pub 你准备免密登录的机器的IP
子节点创建.ssh文件夹
vi /etc/ssh/sshd_config(修改ssh配置文件,和上面master节点配置方式一样)
scp ~/.ssh/id_rsa.pub root@host1:/tmp/
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys【注意是发送maser的公钥给子节点,如果没有.ssh文件则手动创建】
chmod 600 /.ssh/authorized_keys~
cloudera以及JDK以及Mysql版本选择【必读】
- 必须考虑不同版本的Cloudera Manager和CDH之间的兼容性,特别是在执行安装/升级过程时。
- 集群中的所有节点都必须运行相同的主JDK版本。Cloudera仅支持Oracle提供的JDK 。
- Cloudera Manager次要版本必须始终等于或大于CDH次要版本。较早版本的Cloudera Manager可能不支持较新版本的CDH中的功能。
- RHEL / CentOS / OL 6.9在5.8和更高版本中受支持
- 运行Cloudera Manager代理的SLES主机必须使用SLES S一DK 11 SP1。
- 5.10.X之前不支持MySQL5.7
- 任何Cloudera Manager或CDH版本均不支持Oracle JDK 9。
- Cloudera Manager 5和CDH 5均支持 Oracle JDK 7. Oracle JDK 8
- 包含在CDH 5.13中的Kafka 3.0需要JDK 8. Kafka 3.0和更高版本不支持JDK 7。
- Cloudera Manager仓包含Oracle JDK 1.7.0_67,并且可以在全新安装或升级期间自动安装。【不知道离线安装会不会也安装1.7.0_67,但是我认为这不会影响本地的JDK1.8】
- 支持的JDK8的版本(高于JDK-8u144的暂时不支持)
- 点击了解更多的关于各个版本区别的信息 最新的是5.14,我选择了5.13;JDK选择的JDK-8u131
其他注意事项
- 用于访问Cloudera manager的7180端口必须打开
- cloudera manager 的数据库要定期备份(You must schedule and maintain regular backups of the Cloudera Manager database to recover the cluster in the event of the loss of this database.)
JDK安装
卸载自带的JDK,安装下载的JDK-8u131
【可用工具的多终端共用命令的功能】
- rpm -qa|grep jdk(由于虚拟机minimal安装,无自带jdk)【有则卸载:使用rpm -e --nodeps 包名卸载之。】
- rpm -ivh 包名及版本安装
- vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
4.source /etc/profile
mysql5.7安装
建议命令手敲,复制下来的空格或者- -会有问题
先得查看是否有旧的mysql或者mariadb
rpm -qa | grep -i mysql
yum -y remove mysql-libs-5.1.73-1.el6.x86_64
这里提示下:
EL6软件包用于在RedHat6.x,CentOS6.x
EL7软件包用于在RedHat7.x,CentOS7.x
注:rpm-bundle.tar包安装过程中需要安装依赖,yum install 依赖一直报错,但是我是能ping同外网的,最后去下载的少是glibc.tar版本的
tar 解压(tar -xvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz)
mv mysql-5.7.17-linux-glibc2.5-x86_64 /usr/local/mysql
groupadd mysql
useradd -r -g mysql mysql
mv /etc/my.cnf /etc/my.cnf.bak
cp ./mysql/support-files/my-default.cnf /etc/my.cnf
以下是我的配置:【注意生产环境的机器更好,可以酌情加大一些buffer的值】
[mysqld]
character_set_server=utf8
transaction-isolation = READ-COMMITTED
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
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
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
#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=/usr/local/mysql/data/mysql_binary_log
# These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 1
# socket = .....
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
join_buffer_size = 8M
read_buffer_size = 2M
sort_buffer_size = 16M
read_rnd_buffer_size = 16M
# 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=/usr/local/mysql/data/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid
sql_mode=STRICT_ALL_TABLES
- 赋权限:
chown -R mysql:mysql mysql/
- 安装mysql,命令如下:(记录随机密码)
./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
- 开启mysql服务,命令如下:
./support-files/mysql.server start
- 将mysql进程放入系统进程中,命令如下:
cp support-files/mysql.server /etc/init.d/mysqld
- 重新启动mysql服务,命令如下:
service mysqld restart
- 创建软连接
ln -s /usr/local/mysql/bin/mysql /usr/bin
- 使用随机密码登录mysql数据库,命令如下:
mysql -u root -p
- 进入mysql操作行,为root用户设置新密码:
alter user ‘root’@‘localhost’ identified by ‘********’;
- 刷新权限,命令如下:
- flush privileges;
chkconfig mysqld on
验证chkconfig --list mysqld
- 其他
mkdir -p /usr/share/java/
cp mysql-connector-java-5.1.45-bin.jar /usr/share/java/mysql-connector-java.jar
2018/4/8增
千万每个节点都要执行上一步操作,不要namenode
【第二次安装,搭建了本地yum源】
【
全部关机,虚拟机设置中挂载镜像
umount /dev/sr1 先卸载
midkr /mnt/cdrom //创建cdrom挂载点
mount /dev/sr1 /mnt/cdrom 将光盘挂载到刚才创建的cdrom
df-h 查看当前挂载
重命名Base.repo(mv CentOS-Base.repo CentOS-Base.repo.bak)
添加自己的repo文件并设置(vi /etc/yum.repos.d/CentOS-Local.repo)
(可以不用设置开机自动挂载了)
yum clean all,yum makecache
yum -y install安装所有依赖(-y参数不进行询问)
】
防火墙
临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。
- 每台机器的防火墙都临时关闭service iptables stop
- ntp配置机器时间同步
参考[4/5]
- 官网说No blocking is done by SELinux(所以我先不关闭SELinux了)
正题
https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_install_path_c.html
- 所有机器安装依赖包(网不好的使用本地yum源,参考https://jingyan.baidu.com/article/f3e34a12a4abd6f5eb65353a.html)【全部关机,虚拟机设置中挂载镜像,重命名/etc/yum.repos.d/下的base.repo【mv CentOS-Base.repo CentOS-Base.repo.bak】,
添加自己的repo文件并设置,vi /etc/yum.repos.d/CentOS-Local.repo
[base]
name=Lacal Yum
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=file:///mnt/cdrom
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
gpgcheck=1
enable=1
vi /etc/fstab , 在最下面来加上这样一句:
/dev/sr1 /mnt/cdrom iso9660 default 0 2【开机自动挂载】
umount /dev/sr1 先卸载
mkdir /mnt/cdrom //创建cdrom挂载点
mount /dev/sr1 /mnt/cdrom 将光盘挂载到刚才创建的cdrom
df-h 查看当前挂载
yum clean all,yum makecache,yum -y install安装所有依赖(-y参数不进行询问)】、
依赖列表:
yum -y install bind-utils chkconfig cyrus-sasl-gssapi cyrus-sasl-plain fuse fuse-libs gcc httpd init-functions libxslt mod_ssl MySQL-python openssl openssl-devel openssl-devel perl portmap postgresql-server psmisc python python-devel python-psycopg2 python-setuptools sed service sqlite swig useradd zlib
- 下载Cloudera Manager的安装包【trusty、Xenial是Ubuntu的;Jessie是Debian的】
这里我下载的是cloudera-manager-el6-cm5.13.2_x86_64.tar.gz 拷贝到所有机器的/usr目录下 - 执行以下代命令:
mkdir /opt/cloudera-manager
tar -xvf /usr/cloudera-manager-el6-cm5.13.2_x86_64.tar.gz -C /opt/cloudera-manager - To create user cloudera-scm, use a command such as the following:
useradd --system --home=/opt/cloudera-manager/cm-5.13.2/run/cloudera-scm-server --no-create-home --shell=/bin/false --comment “Cloudera SCM User” cloudera-scm
注:注意home后的版本,如果添加错误:cat /etc/group查看,userdel删除 - 所有节点(官网并没有说是哪些节点)
2018/4/8新增
mkdir /var/log/cloudera-scm-headlamp
mkdir /var/log/cloudera-scm-firehose
mkdir /var/log/cloudera-scm-alertpublisher
mkdir /var/log/cloudera-scm-eventserver
mkdir /var/lib/cloudera-scm-headlamp
mkdir /var/lib/cloudera-scm-firehose
mkdir /var/lib/cloudera-scm-alertpublisher
mkdir /var/lib/cloudera-scm-eventserver
mkdir /var/lib/cloudera-scm-server - 修改刚才创建的目录的权限
chown -R cloudera-scm:cloudera-scm /var/lib/cloudera-scm-server
chown -R cloudera-scm:cloudera-scm /var/log/cloudera-scm-headlamp
执行其他目录的权限更改 - 所有的agents的cloudera-scm-agent/config.ini文件中(
server不做客户端就不用填注意,不要把namenode和DataNode的概念用在这,不做客户端就真的什么都不安装):
server_host和server_port(默认7182)
pwd:/opt/cloudera-manager/cm-5.13.2/etc/cloudera-scm-agent
2018/3/31补充
装mysql的机器一定要设为agent 准备mysql connector,放到/usr/shara/java目录下(先查看目录是存在,不存在先创建目录);或者放到目录/opt/cm-5.13.1/share/cmf/lib/下。- 数据库建立:https://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_mysql.html#cmig_topic_5_5_2
在mysql上新建数据库:Activity Monitor, Reports Manager, Hive Metastore Server, Hue Server, Sentry Server, Cloudera Navigator Audit Server, and Cloudera Navigator Metadata Server:
create database
amonDEFAULT CHARACTER SET utf8;
create database
rmanDEFAULT CHARACTER SET utf8;
create database
metastoreDEFAULT CHARACTER SET utf8;
create database
sentryDEFAULT CHARACTER SET utf8;
create database
navDEFAULT CHARACTER SET utf8;
create database
navmsDEFAULT CHARACTER SET utf8;
然后,为上面每个数据库配置类似的:
grant all on amon.* TO ‘amon’@’%’ IDENTIFIED BY ‘amon’;
grant all on rman.* TO ‘rman’@’%’ IDENTIFIED BY ‘rman’;
grant all on metastore.* TO ‘hive’@’%’ IDENTIFIED BY ‘hive’;
grant all on sentry.* TO ‘sentry’@’%’ IDENTIFIED BY ‘sentry’;
grant all on nav.* TO ‘nav’@’%’ IDENTIFIED BY ‘nav’;
grant all on navms.* TO ‘navms’@’%’ IDENTIFIED BY ‘navms’;
设置cmf连接信息:
【请注意看下方:2018/4/8更】
cd /opt/cloudera-manager/cm-5.13.2/share/cmf/schema/
./scm_prepare_database.sh 数据库类型数据库名 用户 密码
验证**/opt/cloudera-manager/cm-5.13.2/etc/cloudera-scm-server/**下面的db.properties文件看是否写入成功
# Auto-generated by scm_prepare_database.sh on Sun Apr 8 14:44:19 CST 2018
#
# For information describing how to configure the Cloudera Manager Server
# to connect to databases, see the “Cloudera Manager Installation Guide.”
#
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=host0
com.cloudera.cmf.db.name=cmf
com.cloudera.cmf.db.user=cmf
com.cloudera.cmf.db.setupType=EXTERNAL
com.cloudera.cmf.db.password=cmf
2018/4/8更
scm_prepare_database.sh的使用要注意,我估计下方多次安装不成功是这里出的问题(之前我创建的数据库不是cmf)
示例:
grant all privileges on . TO ‘temp’@’%’ IDENTIFIED BY ‘temp’ with grant option;
flush privileges;
./scm_prepare_database.sh mysql --host host0 -utemp -ptemp --scm-host host0 cmf cmf cmf
drop user ‘temp’@’%’;
虽然成功,但是我这有log4j的报错:log4j:ERROR Could not find value for key log4j.appender.A
9.server上Create Parcel Directories:
mkdir -p /opt/cloudera/parcel-repo【离线本地yum源】
chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
10.所有节点:
mkdir -p /opt/cloudera/parcels【分发软件用】
chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcels
11.下载图示三个文件,并拷贝到上面新建的/opt/cloudera/parcel-repo文件夹中:http://archive.cloudera.com/cdh5/parcels/
注意:有网友说将sha1后缀改为sha【cdh对应版本的hash值】,我照做了,没报错
12.Start the Cloudera Manager Server
13.root用户:/opt/cloudera-manager/cm-5.13.2/etc/init.d/cloudera-scm-server start
14.开机自启——如果是centos:cp /opt/cloudera-manager/cm-5.13.2/etc/init.d/cloudera-scm-server /etc/init.d/cloudera-scm-server
chkconfig cloudera-scm-server on
15.修改一行
On the Cloudera Manager Server host, open the /etc/init.d/cloudera-scm-server file and change the value of CMF_DEFAULTS from ${CMF_DEFAULTS:-/etc/default} to $CMF_DEFAULTS/etc/default.
去掉图中的“:-{}”,注意是4个符号,图上没圈完整
2018/5/10改
应该这样改:
CMF_DEFAULTS=/opt/cloudera-manager/cm-5.13.2/etc/default
16.启动客户端
在每个客户端执行:(启动后就会与server产生联系)
/opt/cloudera-manager/cm-5.13.2/etc/init.d/cloudera-scm-agent start
cp /opt/cloudera-manager/cm-5.13.2/etc/init.d/cloudera-scm-agent /etc/init.d/cloudera-scm-agent
chkconfig cloudera-scm-agent on
On each Agent, open the $CMF_DEFAULTS/etc/init.d/cloudera-scm-agent file and change the value of CMF_DEFAULTS from ${CMF_DEFAULTS:-/etc/default} to $CMF_DEFAULTS/etc/default.
vi /opt/cloudera-manager/cm-5.13.2/etc/init.d/cloudera-scm-agent
CMF_DEFAULTS=/opt/cloudera-manager/cm-5.13.2/etc/default
18.访问7180端口:【长舒一口气。。。】
注意:初始账户以及密码都为admin,账户名不允许修改,密码可以改。
虚拟机保存快照,必须的
CDH集群安装
- 自动显示之前设置的agent(我这里server没有设为agent,不知道会不会不让在server上安装节点?是的,不会。后来我关闭安装,回去加上了agent)
是的,刚备份完,作用就凸显了,哈哈。
尴尬,server机器加了agent,还是三台。。。暂时就这样吧,再折腾就没意思了
不行,后面要使用数据库,数据库再server上,发觉我没启动server上的客户端。启动后就ok了。
- 之后我可能会尝试扩展节点
- 总的步骤
- 全部勾选后继续,点击红框确定查找Parcel路径是否符合你的路径
- 可以看到已经在安装软件包了,server会分发软件安装到/opt/cloudera.parcel-repo目录下
- 2个警告:
- 解决办法,针对所有机器执行:
echo 10 > /proc/sys/vm/swappiness
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled - 默认spark版本为1.6【改天记录下升级2.1】
- 我这里的分配是:
zookeeper全装;
namenode在server也就是host5上,不装datanode,host5性能最优;cloudera manager相关的服务全放server上;
HBASE相关的也没有放在namenode上,都放在了host6;
Activity Monitor要选择装数据库的机器,我这里是host5;
spark相关放在host7
yarn相关放在host8 - 之前说的数据库测试
- namenode格式化失败
可是我机器明明都是重装的啊
~~试了4次,都是这样。。。有人说内存不足,好吧,第五次我就只装hdfs和spark
还是这样。
就这样暂时结束吧。。。
终于在2018/4/8安装完成(心痛自己一分钟-**-)
(虚拟机是重搭的,之前的5/6/7/8没用了)总结一下以前的问题:
全是数据库的问题:
- cmf创建问题
- mysql-connector问题
其他
又重启虚拟机:VBOX_E_FILE_ERROR (0x80BB0004
原来备份是要存储的,我以为只是记录一些关键信息。。。
手动修改时间:
date -s ‘2018-03-31 16:45:34’
虚拟机扩容
virtualBox
【提示:最终未成功】
- 查看需要扩容的UUID:
VBoxManage list hdds - 创建一个空的vdi虚拟机介质:
VBoxManage.exe createhd -filename “C:\Users\Administrator\VirtualBox VMs\host0\host0_1” -size 11920 -format VDI -variant Standard - 合并(克隆命令):
VBoxManage.exe clonehd be0b6dd7-c118-4715-be45-23e7ece0b946 7cf52f66-ea8d-4741-941f-876360fcfdab --existing - 查看:
- 添加硬盘硬盘(点击红框,选择弹出的“选择一个虚拟硬盘”)
- 没成功。。。