数据湖概念中的分布式数据仓库:从哪里开始

在企业界,人们对过去10到15年间已实施的前端系统,数据总线和其他经典系统感到不满。 但是有一个细分市场,直到最近才处于“每个人都想要,但没人知道它是什么”的状态。 这就是大数据。 听起来很美,受到西方顶尖公司的推崇-如何不成为花絮?



但是,尽管大多数公司只是在观察和询问,但一些公司已经开始在其IT环境中积极实施基于此技术堆栈的解决方案。 商业Apache Hadoop发行版的出现在其中发挥了重要作用,其开发人员为客户提供技术支持。 意识到需要这种解决方案的需求,我们的一位客户决定在基于Apache Hadoop的Data Lake概念中组织分布式数据仓库。

项目目标


一是优化风险管理部门工作。 在开始工作之前,整个部门都参与了信用风险因子(FCR)的计算,并且所有计算都是手动进行的。 每次重新计算大约需要一个月,并且重新计算所基于的数据有时间变得过时。 因此,该解决方案的任务包括每天将数据增量加载到存储库中,重新计算FCD并在BI工具中构建数据集市(SpagoBI功能足以完成此任务)以可视化它们。


其次,为参与数据科学的银行员工提供高性能的数据挖掘工具。 这些工具(例如Jupyter和Apache Zeppelin)可以在本地安装,也可以用于探索数据和构建模型。 但是,它们与Cloudera群集的集成允许使用生产力最高的系统节点的硬件资源进行计算,从而将数据分析任务的速度提高了数十倍甚至数百倍。


选择Oracle大数据机机架作为目标硬件解决方案,因此以Apache Hadoop的Clachede分发为基础。 机架运行了相当长的一段时间,为了加快处理速度,将客户私有云中的服务器分配给该项目。 解决方案是合理的,但是存在许多问题,我将在下面讨论。


在该项目中计划了以下任务:

  1. 部署Cloudera的CDH(Cloudera的发行版,包括Apache Hadoop)和工作所需的其他服务。
  2. 配置已安装的软件。
  3. 设置持续集成以加快开发过程(将在另一篇文章中介绍)。
  4. 安装用于构建报告的BI工具和用于确保数据中心工作的数据发现工具(将在单独的文章中介绍)。
  5. 开发用于从终端系统下载必要数据以及对其进行定期更新的应用程序。
  6. 开发报告表格以在BI工具中可视化数据。

Neoflex并不是第一年就开发和实现基于Apache Hadoop的系统,甚至还没有为ETL流程的可视化开发自己的产品-Neoflex Datagram。 很长一段时间以来,我都想参加该班的一个项目,并且很高兴能够管理这个系统。 事实证明,这种体验非常宝贵,并能激发人们进一步研究该主题的机会,因此,我希望尽快与您分享。 希望它会很有趣。


资源资源


开始安装之前,建议您准备所需的一切。
铁的数量和功率直接取决于需要部署多少种介质。 出于开发目的,您可以将所有组件安装在至少一个脆弱的虚拟机上,但是不欢迎这种方法。


在项目的试点阶段和积极开发中,当系统的用户数量最少时,只有一个主要环境就足够了-这可以通过减少从最终系统加载数据的时间(开发数据仓库的最频繁,最长的过程)来加速。 既然系统已经稳定下来,我们就可以在三个环境中进行配置了:test,preprod和prod(主)。


在私有云中,服务器被分配用于组织2个环境-主环境和测试环境。 介质规格如下表所示:

预约时间数量虚拟CPUvRAM,千兆位磁盘,Gb
主要环境,服务Cloudera38642,200
主环境,HDFS3222885000
核心环境,数据发现工具1个161282200
测试环境,Cloudera服务1个8642200
测试环境,HDFS2222564000
核心环境,数据发现工具1个161282200
CI26481000

后来,主要环境迁移到Oracle BDA,并且服务器用于组织预生产环境。


关于迁移的决定是合理的-客观上缺乏为HDFS服务器分配的资源。 瓶颈是微小的磁盘(大数据是5 Tb?)和功能不足的处理器,它们在正常的数据加载任务中稳定地以95%的速度加载。 与其他服务器相反,情况恰恰相反-几乎在所有时间它们都处于空闲状态,并且它们的资源可以在其他项目上得到很大利用。


使用软件,事情并不容易-由于开发是在不访问Internet的私有云中进行的,因此所有文件都必须通过安全服务并仅通过协议进行传输。 在这方面,我必须预先加载所有必需的发行版,程序包和依赖项。


在/etc/yum.conf文件中设置keepcache = 1(使用RHEL 7.3作为操作系统)在此困难的任务中起到了很大的作用-在具有网络访问权限的计算机上安装必要的软件比从存储库中手动下载依赖关系及其依赖性要容易得多;)

您需要部署什么:

  1. Oracle JDK(任何地方都没有Java)。
  2. 用于存储CDH服务创建和使用的信息的数据库(例如,Hive Metastore)。 在我们的案例中,安装了PostgreSQL 9.2.18版,但是可以使用任何受支持的Cloudera服务(对于不同版本的发行版,列表是不同的,请参阅官方网站的“需求和受支持的版本”部分)。 需要注意的是,数据库的选择并非完全成功-Oracle BDA随MySQL数据库一起提供(MySQL的产品之一,随Sun的购买而提供给他们),在其他环境中使用类似的数据库更为合乎逻辑,这将简化迁移过程。 建议根据目标硬件解决方案选择发行版。
  3. 用于在服务器上进行时间同步的Chrony守护程序。
  4. Cloudera Manager服务器。
  5. 恶魔Cloudera Manager。

准备安装


在开始安装CDH之前,应做一些准备工作。 一部分在安装过程中很有用,另一部分将简化操作。


操作系统安装和设置


首先,值得准备用于托管系统的虚拟(和真实)计算机:在每台计算机上安装受支持的版本(此列表针对不同的发行版而有所不同,请参见官方网站的“要求和受支持的版本”部分),分配主机名是可以理解的名称(例如,<system_name> master1,2,3 ...,<system_name> slave1,2,3 ...),以及标记磁盘以用于文件存储和在系统操作期间创建的临时文件。


标记建议如下:

  • 在具有HDFS的服务器上,为YARN在任务过程中创建的文件创建至少500 Gb的卷,并将其放置在/ yarn目录中(安装CDH后必须在该卷上安装该卷)。 应该为操作系统,Cloudera服务,日志和其他功能分配少量(大约100 Gb)。 这些操作之后将保留的所有可用空间应合并为一个大卷,并在将数据加载到存储之前安装到/ dfs目录。 HDFS以较小的块形式存储数据,最好不要再次进行它们的传输。 另外,为方便以后添加光盘,建议使用LVM-扩展存储空间会更容易(尤其是当它变大时)。
  • 在具有Cloudera服务的服务器上,您可以在根目录中装载所有可用空间-大量文件应该没有问题,尤其是如果您定期清理日志时。 唯一的例外是具有Cloudera服务用于其需求的数据库的服务器-在此服务器上,有必要在存储该数据库文件的目录下标记一个单独的卷(这取决于所选的分发)。 服务写入适中,而500 Gb应该绰绰有余。 为了安全起见,您也可以使用LVM。

设置http服务器以及yum和CDH软件包的脱机安装


由于安装该软件时无法访问Internet,因此为了简化软件包的安装,建议提升HTTP服务器并使用它来创建可通过网络访问的本地存储库。 您可以使用rpm等在本地安装所有软件,但由于服务器数量众多且外观多种环境,使用单个存储库很方便,您可以从中安装软件包,而不必手动在计算机之间传输软件包。


安装是在Red Hat 7.3 OS上执行的,因此,本文将包含特定于该命令和其他基于CentOS的操作系统的命令。 当安装在其他操作系统上时,顺序将是相似的,只有程序包管理器会有所不同。
为了不在各处写sudo,我们假定安装是从根开始的。


这是您需要做的:
1.选择将要放置HTTP服务器和分发服务器计算机。
2.在具有类似操作系统但连接到Internet的计算机上,在/etc/yum.conf文件中设置keepcache = 1标志,并安装具有所有依赖项的httpd:

yum install httpd 

如果此命令不起作用,则需要将包含以下软件包的存储库添加到yum存储库列表中,例如,该存储库为centos.excellmedia.net/7/os/x86_64

 echo -e "\n[centos.excellmedia.net]\nname=excellmedia\nbaseurl=http://centos.excellmedia.net/7/os/x86_64/\nenabled=1\ngpgcheck=0" > /etc/yum.repos.d/excell.repo 

之后, 使用yum repolist命令, 我们验证存储库是否已加强-添加的存储库应出现在存储库列表中(存储库ID-centos.excellmedia.net;存储库名称-excellmedia)。
现在检查yum是否看到了我们需要的软件包:

 yum list | grep httpd 

如果输出包含必要的软件包,则可以使用上述命令安装它们。

3.要创建yum存储库,我们需要createrepo软件包。 它也在上述存储库中,并且设置类似:

 yum install createrepo 

4.正如我之前所说,CDH服务需要一个数据库才能工作。 为此目的安装PostgreSQL:

 yum install postgresql-server 

5. CDH正确操作的先决条件之一是群集中所有服务器上的时间同步。 为此,使用chronyd软件包(在必须部署CDH的那些操作系统上,默认情况下已安装该软件包)。 检查其可用性:

 chronyd -v 

如果尚未安装,请安装:

 yum install chrony 

如果已安装,则只需下载:

 yumdownloader --destdir=/var/cache/yum/x86_64/7Server/<repo id>/packages chrony 

6.同时,立即下载安装CDH所需的软件包。 它们可在archive.cloudera.com-archive.cloudera.com/cm <CDH的主要版本> / <操作系统名称> / <操作系统的版本> / x86_64 / cm / <CDH的完整版本> / RPMS / x86_64 /中获得。 您可以手动下载软件包(cloudera-manager-server和cloudera-manager-daemons),或通过类比添加存储库并安装它们:

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

7.安装后,程序包及其依赖项将缓存在文件夹/ var / cache / yum / x86_64 / 7Server / \ <repo id \> /程序包中。 我们将它们转移到为HTTP服务器和发行版选择的计算机上,然后安装:

 rpm -ivh < > 

8.运行httpd,使其在集群中的其他主机上可见,并将其添加到加载后自动启动的服务列表中:

 systemctl start httpd systemctl enable httpd systemctl stop firewalld #       systemctl disable firewalld #       setenforce 0 

9.现在我们有了一个正常工作的HTTP服务器。 它的工作目录是/ var / www / html 。 在其中创建2个文件夹-一个用于yum存储库,另一个用于Cloudera解析器(稍后再介绍):

 cd /var/www/html mkdir yum_repo parcels 

10.对于Cloudera的服务,我们需要Java 。 所有机器都需要安装相同版本的JDK; Cloudera建议使用Oracle的Hot Spot。 从官方网站(http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)下载分发程序包,然后将其传输到yum_repo文件夹。

11.使用createrepo实用程序在yum_repo文件夹中创建yum存储库,以便可以从群集计算机上安装JDK软件包:

 createrepo -v /var/www/html/yum_repo/ 

12.在每个主机上创建我们的本地存储库后,您需要添加其描述,类似于第2段:

 echo -e "\n[yum.local.repo]\nname=yum_repo\nbaseurl=http://<   httpd>/yum_repo/\nenabled=1\ngpgcheck=0" > /etc/yum.repos.d/yum_repo.repo 

您也可以进行类似于第2段的检查。

13. JDK可用,安装:

 yum install jdk1.8.0_161.x86_64 

要使用Java,您需要设置JAVA_HOME变量。 我建议您在安装后立即将其导出,并将其写入/ etc /环境/ etc / default / bigtop-utils文件中,以便在重新启动服务器后自动将其导出,并将其位置提供给CDH服务:

 export JAVA_HOME=/usr/java/jdk1.8.0_161 echo "JAVA_HOME=/usr/java/jdk1.8.0_161" >> /etc/environment export JAVA_HOME=/usr/java/jdk1.8.0_144 >> /etc/default/bigtop-utils 

14.以相同的方式,在群集中的所有计算机上安装chronyd(当然,除非不存在):

 yum install chrony 

15.选择将在其中运行PostgreSQL的主机,然后安装它:

 yum install postgresql-server 

16.同样,选择将在其上运行Cloudera Manager的主机并安装它:

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

17.软件包已安装,可以在安装之前开始配置软件。

加法:


在系统的开发和运行过程中,您将需要将软件包添加到yum存储库以将其安装在群集主机上(例如,Anaconda发行版)。 为此,除了将文件传输到yum_repo文件夹外,您还需要执行以下操作:

  • 在具有httpd的计算机上,运行yum repository update命令:

     createrepo -v --update /var/www/html/yum_repo/ 
  • 在要安装软件包的所有计算机上,执行yum缓存刷新:
  •  yum clean all 
  •  rm -rf /var/cache/yum 

配置辅助软件


现在是时候配置PostgreSQL并为我们的未来服务创建数据库了。 这些设置与CDH 5.12.1版相关,在安装发行版的其他版本时,建议您阅读官方网站上的“ Cloudera Manager和托管服务数据存储”部分。


首先,让我们初始化数据库:


 postgresql-setup initdb 

现在,我们与数据库建立网络交互。 在“ IPv4本地连接”部分的/var/lib/pgsql/data/pg_hba.conf文件中,将地址127.0.0.1/32的方法更改为md5方法,添加信任方法,并使用该信任方法添加群集子网:

 vi /var/lib/pgsql/data/pg_hba.conf pg_hba.conf: ----------------------------------------------------------------------- # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 127.0.0.1/32 trust host all all <cluster_subnet> trust ----------------------------------------------------------------------- 

然后,我们将对/var/lib/pgsql/data/postgres.conf文件进行一些调整(我仅列出需要更改或检查是否符合要求的行:

 vi /var/lib/pgsql/data/postgres.conf postgres.conf: ----------------------------------------------------------------------- listen_addresses = '*' max_connections = 100 shared_buffers = 256MB checkpoint_segments = 16 checkpoint_completion_target = 0.9 logging_collector = on log_filename = 'postgresql-%a.log' log_truncate_on_rotation = on log_rotation_age = 1d log_rotation_size = 0 log_timezone = 'W-SU' datestyle = 'iso, mdy' timezone = 'W-SU' lc_messages = 'en_US.UTF-8' lc_monetary = 'en_US.UTF-8' lc_numeric = 'en_US.UTF-8' lc_time = 'en_US.UTF-8' default_text_search_config = 'pg_catalog.english' ----------------------------------------------------------------------- 

配置完成后,您需要为将要安装的服务创建数据库(对于那些更接近Oracle术语的数据库-模式)。 在我们的案例中,安装了以下服务:Cloudera管理服务,HDFS,Hive,Hue,Impala,Oozie,Yarn和ZooKeeper。 其中,Hive,Hue和Oozie需要数据库,并且需要2个基础来满足Cloudera服务的需求-一个用于Cloudera Manager服务器,另一个用于报表管理器,它是Cloudera Management Service的一部分。 启动PostgreSQL并将其添加到自动加载中:

 systemctl start postgresql systemctl enable postgresql 

现在,我们可以连接并创建必要的数据库:

 sudo -u postgres psql > CREATE ROLE scm LOGIN PASSWORD '<password>'; > CREATE DATABASE scm OWNER scm ENCODING 'UTF8'; #    Cloudera Manager > CREATE ROLE rman LOGIN PASSWORD '<password>'; > CREATE DATABASE rman OWNER rman ENCODING 'UTF8'; #      > CREATE ROLE hive LOGIN PASSWORD '<password>'; > CREATE DATABASE metastore OWNER hive ENCODING 'UTF8'; #    Hive Metastore > ALTER DATABASE metastore SET standard_conforming_strings = off; #   PostgreSQL   8.2.23 > CREATE ROLE hue_u LOGIN PASSWORD '<password>'; > CREATE DATABASE hue_d OWNER hue_u ENCODING 'UTF8'; #    Hue > CREATE ROLE oozie LOGIN ENCRYPTED PASSWORD '<password>' NOSUPERUSER INHERIT CREATEDB NOCREATEROLE; > CREATE DATABASE "oozie" WITH OWNER = oozie ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1; #    Oozie    : > \q 

对于其他服务,以相同的方式创建数据库。


不要忘记运行脚本来准备Cloudera Manager服务器数据库,并向其传递输入数据以连接到为其创建的数据库:

 . /usr/share/cmf/schema/scm_prepare_database.sh postgresql scm scm <password> 

用CDH文件创建存储库


Cloudera提供了两种安装CDH的方法-使用软件包和包裹。 第一个选项涉及下载一组具有所需版本服务的软件包以及它们的后续安装。 此方法在群集配置中提供了极大的灵活性,但是Cloudera不保证其兼容性。 因此,使用parsels进行安装的第二个版本更为流行-兼容版本的预成形软件包集。 可通过以下链接获得最新版本: archive.cloudera.com/cdh5/parcels/latest 。 可以发现更高的级别。 除了CDH的解析器外,您还需要从同一存储库目录下载manifest.json。


要使用开发的功能,我们还需要Spark 2.2,它不包含在CDH包中(此服务的第一个版本在此处)。 要安装它,您需要下载一个单独的包裹以及该服务和相应的manifest.json,也可以在Cloudera档案中找到


加载parsels和manifest.json之后,您需要将它们转移到我们存储库中的相应文件夹中。 为CDH和Spark文件创建单独的文件夹:

 cd /var/www/html/parcels mkdir cdh spark 

将parsels和manifest.json文件传输到创建的文件夹中。 为了使它们可用于通过网络安装,我们向相应的访问权限文件夹添加了parsels:

 chmod -R ugo+rX /var/www/html/parcels 

您可以开始安装CDH,我将在下一篇文章中讨论。

Source: https://habr.com/ru/post/zh-CN413149/


All Articles