CDH离线搭建
其实3年前就对CDH神交已久,当时也打算用CDH来作为公司的大数据平台,不过当时也是自己不够给力,导致后面换成了Ambari。
最近CDH把HDP收购了,HDP也是我一直在用的一个大数据全家桶。这次想换个口味,感受一下CDH。
这里只有两台测试机器,分别为es01,es02。是之前用来做elastic的集群。
安装前
必须考虑Cloudera Manager和CDH的版本兼容关系。
3-10个机器,CDH建议的规划如下。
两台的话,就先只安装zookeeper,和cm来感受下就好了。
硬件要求
CDH把每个角色(包括agent,DataNode,HBase等等)需要的内存,cpu都给出了建议值,非常细心。HDP不知是否我太大意,没有找到这些选项。CDH真是太友好了。
这里先不关注这些。毕竟只是个测试环境。
软件要求
依赖jar包
- python: Cloudera Enterprise 6,除Hue外,默认情况下包含在操作系统中的Python版本以及更高版本,但与Python 3.0或更高版本不兼容。例如,Cloudera Enterprise 6在兼容RHEL 6的操作系统上需要Python 2.6或更高版本,但在兼容RHEL 7的操作系统上需要Python 2.7或更高版本。CDH 6中的Hue在所有操作系统上都需要Python 2.7或更高版本。对于运行Hue的RHEL 6兼容操作系统,您必须手动安装Python 2.7。Spark 2需要Python 2.7或更高版本。如果默认情况下没有选择正确级别的Python,请在运行pyspark命令之前将PYSPARK_PYTHON和PYSPARK_DRIVER_PYTHON环境变量设置为指向正确的Python可执行文件。不支持Python 3。
- Perl - Cloudera Manager需要perl
- Cloudera Manager 6依赖于python-psycopg2包。CDH 6中的Hue需要比Cloudera Manager依赖项所需的更高版本的psycopg2。有关更多信息,请参阅安装psycopg2 Python包。
- iproute包 - Cloudera Enterprise 6依赖于iproute包。运行Cloudera Manager Agent的任何主机都需要该程序包。所需版本因操作系统而异。本次我们使用的Centos7.6,对应版本是iproute-3.10
操作系统要求
文件类型要求
Hadoop分布式文件系统(HDFS)旨在运行在操作系统中的底层文件系统之上。Cloudera建议您在支持的操作系统上使用以下任一文件系统
- ext3:这是HDFS经过最多测试的底层文件系统。
- ext4:在最近的Linux版本中支持ext3的这种可扩展扩展。
Cloudera不支持从ext3到ext4的就地升级。Cloudera建议您在将磁盘用作数据目录之前将其格式化为ext4。 - XFS:这是RHEL 7中的默认文件系统。
- S3:亚马逊简单存储服务
CDH里面还有一个叫Kudu自研发的数据库,它要求的文件系统是ext4和xfs。
另外,CDH建议调优下你的文件系统
文件访问时间
Linux文件系统保留记录访问每个文件的元数据。这意味着即使读取也会导致写入磁盘。为了加快文件读取速度,Cloudera建议您使用/etc/fstab中的noatime挂载选项禁用此选项,称为atime。
/dev/sdb1 /data1 ext4 defaults,noatime 0
让它生效mount -o remount /data1
文件系统挂载选项
文件系统挂载选项具有允许您同步写入的同步选项。使用sync filesystem mount选项会降低将数据写入磁盘的服务的性能,例如HDFS,YARN,Kafka和Kudu。在CDH中,大多数写入已经被复制。因此,对磁盘的同步写入是不必要的,昂贵的,并且不能可测量地提高稳定性。即使使用分层存储功能,也不支持将NFS和NAS选项用作DataNode数据目录安装。
nproc配置
Cloudera Manager会自动在/etc/security/limits.conf中设置nproc配置,但是/etc/security/limits.d/中的单个文件可以覆盖此配置。这可能会导致Apache Impala和其他组件出现问题。确保将nproc限制设置得足够高,例如65536或262144。
数据库要求
在这里我倾向用Mysql,需要查看其他的请参阅这里
java版本要求
配置网络名称
sudo hostnamectl set-hostname es01.example.com
[root@es01 ~]# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost.localdomain localhost
172.17.0.11 es01.ljktest.com es01
172.16.0.11 es02.ljktest.com es02
仅使用此主机的FQDN编辑/etc/sysconfig/network
[root@es01 ~]# cat /etc/sysconfig/network
# Created by cloud-init on instance boot automatically, do not edit.
#
NETWORKING=yes
HOSTNAME=es01.ljktest.com
禁用防火墙
sudo systemctl disable firewalld
sudo systemctl stop firewalld
设置SELinux模式
- 检查SELinux状态
getenforce
,如果输出为Permissive或Disabled,则可以跳过此任务。如果输出正在执行,请继续执行下一步。 - 打开/etc/selinux/config文件(在某些系统中,/etc/sysconfig/selinux文件)。将SELINUX=enforcing 更改为SELINUX = permissive
- 重新启动系统或运行以下命令立即禁用SELinux
setenforce 0
启用NTP服务
这里就假设可以连接外网了。如果是内网的话,你需要一台自己内部的NTP服务器。可以参照我另外一篇使用chrony同步时间来做,不过这种做法虽然很保证集群内部时间一样,但是时间跟真正的NTP服务器会有偏差。
- 安装ntp包
yum install ntp
-
编辑/etc/ntp.conf文件以添加NTP服务器,如以下示例所示。
server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org
- 启动ntpd服务
systemctl start ntpd
- 配置ntpd服务开机启动
systemctl enable ntpd
- 将系统时钟同步到NTP服务器
ntpdate -u
- 将硬件时钟与系统时钟同步
hwclock --systohc
开发
配置本地程序包存储库
安装httpd
sudo yum install httpd
修改配置信息 AddType application/x-gzip .gz .tgz .parcel
sudo systemctl start httpd
下载CM和CDH包
官方给出的是在安装httpd这台服务器上执行以下命令
- CM
sudo mkdir -p /var/www/html/cloudera-repos
sudo wget --recursive --no-parent --no-host-directories https://archive.cloudera.com/cm6/6.3.0/redhat7/ -P /var/www/html/cloudera-repos
sudo wget https://archive.cloudera.com/cm6/6.3.0/allkeys.asc -P /var/www/html/cloudera-repos/cm6/6.3.0/
sudo chmod -R ugo+rX /var/www/html/cloudera-repos/cm6
- CDH
sudo mkdir -p /var/www/html/cloudera-repos
sudo wget --recursive --no-parent --no-host-directories https://archive.cloudera.com/cdh6/6.3.0/redhat7/ -P /var/www/html/cloudera-repos
sudo wget --recursive --no-parent --no-host-directories https://archive.cloudera.com/gplextras6/6.3.0/redhat7/ -P /var/www/html/cloudera-repos
sudo chmod -R ugo+rX /var/www/html/cloudera-repos/cdh6
sudo chmod -R ugo+rX /var/www/html/cloudera-repos/gplextras6
我这边是直接用下载工具将一些包下载下来,下载的是打包好的包(因为执行命令安装实在太慢了,当然如果网速可以,还是推荐使用官网的方法,主要是这样不容易出错)。
手动下载你可以得到下面东东
cm6.3.0-redhat7.tar.gz
allkeys.asc
CDH-6.3.0-1.cdh6.3.0.p0.1279813-el7.parcel
CDH-6.3.0-1.cdh6.3.0.p0.1279813-el7.parcel.sha1
manifest.json
GPLEXTRAS-6.3.0-1.gplextras6.3.0.p0.1279813-el7.parcel
GPLEXTRAS-6.3.0-1.gplextras6.3.0.p0.1279813-el7.parcel.sha1
manifest.json
这里要注意allkeys.asc
这个文件不能缺少,否则安装agent会报错。
配置内部存储库
touch /etc/yum.repos.d/cloudera-repo.repo
写入
[cloudera-cm6.3.0]
name=cloudera-cm6.3.0
baseurl=http://49.234.43.99/cloudera-repos/cm6.3.0
enabled=1
gpgcheck=0
安装JDK1.8
之前安装的oracle JDK,在安装cloudera-manager-agent cloudera-manager-server的时候,提示JDK的版本不符合。
只好使用它自带的openjdk了。
yum install java-1.8.0-openjdk-devel
安装Cloudera Manager Packages
sudo yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
安装mysql
本来本地有mysql包,CDH的文档太良心了,连安装mysql都有。按照它文档走一遍吧
-
安装
wget http://repo.mysql.com/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
- 将旧的InnoDB日志文件/ var / lib / mysql / ib_logfile0和/ var / lib / mysql / ib_logfile1从/ var / lib / mysql /移到备份位置。
mv ib_logfile0 ib_logfile1 ~/mysql_backup/
-
修改mysql配置文件my.conf
- 要防止死锁,请将隔离级别设置为READ-COMMITTED。
- 配置InnoDB引擎。如果Cloudera Manager的表配置了MyISAM引擎,它将无法启动。(通常,如果InnoDB引擎配置错误,表将恢复为MyISAM。)要检查表所使用的引擎,请从MySQL shell运行以下命令
- 大多数发行版中MySQL安装的默认设置使用保守的缓冲区大小和内存使用情况。Cloudera Management Service角色需要高写入吞吐量,因为它们可能会在数据库中插入许多记录。Cloudera建议您将innodb_flush_method属性设置为O_DIRECT。
- 根据集群的大小设置max_connections属性
少于50台主机 - 您可以在同一主机上存储多个数据库(例如,活动监视器和服务监视器)。如果你这样做,你应该:
将每个数据库放在自己的存储卷上。
为每个数据库允许100个最大连接,然后添加50个额外连接。例如,对于两个数据库,将最大连接数设置为250.如果在一个主机(Cloudera Manager Server,活动监视器,报告管理器,Cloudera Navigator和Hive Metastore的数据库)上存储五个数据库,请将最大连接数设置为550。
最后CDH给出了一份建议的配置清单,真的是太友好了。
```
[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 start mysqld
-
设置mysql密码
sudo /usr/bin/mysql_secure_installation
CDH真的太贴心了,以下是你会遇到的选择。
[...] 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!
-
安装MySQL JDBC驱动程序
在Cloudera Manager Server主机上以及运行需要数据库访问的服务的任何其他主机上安装JDBC驱动程序。有关使用数据库的Cloudera软件的更多信息,请参阅所需数据库。
Cloudera建议仅使用JDBC驱动程序的5.1版。wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
tar zxvf mysql-connector-java-5.1.46.tar.gz
将重命名的JDBC驱动程序复制到/ 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
为Cloudera软件创建数据库
理论上你需要为你的CHD建立以下表格中所有的database,目前我们简单点就建立Cloudera Manager Server的就好了。
- 进入mysql
mysql -u root -p
-
创建database
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';
-
确认上述命令是否成功执行
SHOW DATABASES;
SHOW GRANTS FOR 'scm'@'%';
设置Cloudera Manager数据库
Cloudera Manager Server包含一个可以为自己创建和配置数据库的脚本。该脚本可以:
- 创建Cloudera Manager Server数据库配置文件。
- (MariaDB,MySQL和PostgreSQL)为Cloudera Manager Server创建和配置数据库以供使用。
- (MariaDB,MySQL和PostgreSQL)为Cloudera Manager Server创建和配置用户帐户。
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
安装CDH和其他软件
- 启动cloudera-scm-server
sudo systemctl start cloudera-scm-server
- 等待几分钟,以启动Cloudera Manager Server。要观察启动过程,请在Cloudera Manager Server主机上运行以下命令
sudo tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
当您看到此日志条目时,Cloudera Manager管理控制台已准备就绪
INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.
- 在Web浏览器中,转至http://<server_host>:7180,其中
是运行Cloudera Manager Server的主机的FQDN或IP地址。
分配CHD和GPL的包。
至此,CDH离线安装成功。
界面安装中一些警告
一般你会遇到两个警告信息
- Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 30。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。您可以继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响
echo 'vm.swappiness=10'>> /etc/sysctl.conf
sysctl -p
- 已启用透明大页面压缩,可能会导致重大性能问题。请运行“echo never > /sys/kernel/mm/transparent_hugepage/defrag”和“echo never > /sys/kernel/mm/transparent_hugepage/enabled”以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始化脚本中,以便在系统重启时予以设置。以下主机将受到影响
总结
与Ambari对比,个人感觉文档质量,CDH更加友好一些。
内部的一些机制虽然还没有具体涉及,但能看出CDH更扣细节,步骤上有更多的展示。
当然CDH没有开源,但是貌似也可以使用自定义服务~这个以后会试试。