CDH离线搭建

CDH离线搭建

其实3年前就对CDH神交已久,当时也打算用CDH来作为公司的大数据平台,不过当时也是自己不够给力,导致后面换成了Ambari。

最近CDH把HDP收购了,HDP也是我一直在用的一个大数据全家桶。这次想换个口味,感受一下CDH。

这里只有两台测试机器,分别为es01,es02。是之前用来做elastic的集群。

安装前

必须考虑Cloudera Manager和CDH的版本兼容关系。

3-10个机器,CDH建议的规划如下。
两台的话,就先只安装zookeeper,和cm来感受下就好了。

clipboard.png

硬件要求

CM需要的硬盘资源

CDH把每个角色(包括agent,DataNode,HBase等等)需要的内存,cpu都给出了建议值,非常细心。HDP不知是否我太大意,没有找到这些选项。CDH真是太友好了。

这里先不关注这些。毕竟只是个测试环境。

clipboard.png

clipboard.png

软件要求

依赖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
操作系统要求

clipboard.png

文件类型要求

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,需要查看其他的请参阅这里

clipboard.png

java版本要求

clipboard.png

配置网络名称

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模式

  1. 检查SELinux状态 getenforce,如果输出为Permissive或Disabled,则可以跳过此任务。如果输出正在执行,请继续执行下一步。
  2. 打开/etc/selinux/config文件(在某些系统中,/etc/sysconfig/selinux文件)。将SELINUX=enforcing 更改为SELINUX = permissive
  3. 重新启动系统或运行以下命令立即禁用SELinux

    setenforce 0

启用NTP服务

这里就假设可以连接外网了。如果是内网的话,你需要一台自己内部的NTP服务器。可以参照我另外一篇使用chrony同步时间来做,不过这种做法虽然很保证集群内部时间一样,但是时间跟真正的NTP服务器会有偏差。

  1. 安装ntp包

    yum install ntp

  2. 编辑/etc/ntp.conf文件以添加NTP服务器,如以下示例所示。

    server 0.pool.ntp.org
    server 1.pool.ntp.org
    server 2.pool.ntp.org
  3. 启动ntpd服务

    systemctl start ntpd

  4. 配置ntpd服务开机启动

    systemctl enable ntpd

  5. 将系统时钟同步到NTP服务器

    ntpdate -u <ntp_server>

  6. 将硬件时钟与系统时钟同步

    hwclock --systohc

开发

使用CDH 6 Maven存储库

配置本地程序包存储库

安装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

我这边是直接用下载工具将一些包下载下来,下载的是打包好的包(因为执行命令安装实在太慢了,当然如果网速可以,还是推荐使用官网的方法,主要是这样不容易出错)。

CM包
CDH包
GPL包

手动下载你可以得到下面东东

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都有。按照它文档走一遍吧

  1. 安装

    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
  2. 将旧的InnoDB日志文件/ var / lib / mysql / ib_logfile0和/ var / lib / mysql / ib_logfile1从/ var / lib / mysql /移到备份位置。

    mv ib_logfile0 ib_logfile1 ~/mysql_backup/

  3. 修改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
```
  1. 启动mysql

    systemctl start mysqld

  2. 设置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!
  3. 安装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的就好了。

clipboard.png

  1. 进入mysql

    mysql -u root -p

  2. 创建database

    CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

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

  3. 确认上述命令是否成功执行

    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和其他软件

  1. 启动cloudera-scm-server

    sudo systemctl start cloudera-scm-server

  2. 等待几分钟,以启动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.

  3. 在Web浏览器中,转至http://&lt;server_host>:7180,其中<server_host>是运行Cloudera Manager Server的主机的FQDN或IP地址。

分配CHD和GPL的包。

clipboard.png

clipboard.png

至此,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没有开源,但是貌似也可以使用自定义服务~这个以后会试试。

附录

阅读 10.6k

推荐阅读
大数据学习笔记
用户专栏

记录自己对大数据学习的点滴

7 人关注
39 篇文章
专栏主页