Apache Bigtop和当今Hadoop发行版的选择



去年对于Apache Hadoop来说是巨大变化的一年,这可能不是什么秘密。去年,Cloudera和Hortonworks合并(基本上是对第二家公司的收购),由于严重的财务问题,Mapr被卖给了惠普。如果是几年前,就本地安装而言,通常必须在Cloudera和Hortonworks之间进行选择,可惜今天,我们没有这个选择。另一个令人惊讶的事实是,自今年2月以来,Cloudera宣布终止将二进制程序集分发到公共存储库的发行,现在只能通过付费订阅才能使用它们。当然,仍然可以下载2019年底之前发布的最新版本的CDH和HDP的功能,并且预计将对其支持一到两年。但是下一步该怎么办?对于那些,以前为订阅付费的人,没有任何变化。对于那些不想切换到发行版的付费版本,但又希望能够获得最新版本的群集组件以及补丁和其他更新的用户,我们准备了本文。在其中,我们将考虑解决这种情况的可能方法。

. , . ? Arenadata Hadoop, , . Vanilla Hadoop, , “” Apache Bigtop. ? .

Arenadata Hadoop




这是迄今为止国内发展的一个全新的,鲜为人知的分布。不幸的是,目前关于哈布雷的只有这篇文章

可以在项目的官方网站上找到更多信息。最新发行版基于Hadoop 3.1.2版本3和2.8.5版本2。

关于路线图的信息可以在这里找到


Arenadata Cluster Manager界面Arenadata的

主要产品是Arenadata Cluster Manager(ADCM),用于安装,配置和监视公司的各种软件解决方案。 ADCM是免费的,并且通过向其添加捆绑软件来扩展其功能,捆绑软件是一组ansible-playbook。捆绑包分为两种:企业和社区。后者可以从Arenadata免费下载。也可以开发自己的捆绑软件并将其连接到ADCM。

对于Hadoop 3的部署和管理,提供了捆绑版本和ADCM的社区版本,而对于hadoop 2,仅Apache Ambari作为备选。至于带有软件包的存储库,它们是开放供公众访问的,可以按常规方式为所有集群组件下载和安装它们。通常,该分布看起来非常有趣。我敢肯定,有些人已经习惯了Cloudera Manager和Ambari之类的解决方案,并且会喜欢ADCM本身。对于某些人而言,将分发工具包包含在进口替代软件注册表中的事实将是一个巨大的优势

如果我们谈论缺点,那么它们将与所有其他Hadoop发行版相同。即:

  • 所谓的“供应商锁定”。通过使用Cloudera和Hortonworks的示例,我们已经意识到,始终存在更改公司政策的风险。
  • 在上游落后于Apache。

香草哈杜普




如您所知,Hadoop并非单片产品,实际上是围绕其分布式HDFS文件系统的整个服务体系。很少有人需要一个文件集群。一个需要Hive,另一个需要Presto,还有HBase和Phoenix,Spark被越来越多地使用。有时会发现Oozie,Sqoop和Flume可以编排和下载数据。并且,如果出现安全问题,将立即记住Kerberos和Ranger的结合。

Hadoop组件的二进制版本以压缩文件的形式在每个生态系统项目的网站上提供。可以下载它们并开始安装,但有一个条件:除了您最有可能希望运行的“原始”二进制文件中的程序包的自组装以外,您对组件的下载版本之间的兼容性也没有任何信心。首选选项是使用Apache Bigtop构建。Bigtop允许您从Apache的Maven存储库进行构建,运行测试和构建软件包。但是,对我们而言,这很重要,Bigtop将收集彼此兼容的那些组件版本。我们将在下面更详细地讨论它。

Apache Bigtop




Apache Bigtop是用于构建,打包和测试许多
开源项目(例如Hadoop和Greenplum)的工具。 Bigtop有许多
版本。在撰写本文时,最新的稳定版本是1.4版,
而master 版本是1.5版。不同版本的发行版使用不同版本的
组件。例如,对于1.4,Hadoop核心组件的版本为2.8.5,主版本为
2.10.0。支持的组件的组成也在改变。一些过时且
不可更新的叶子,取而代之的是一些新的,需求量更大的东西,而
不一定来自Apache家族本身。

Bigtop也有很多叉子

当我们开始熟悉Bigtop时,与其他Apache项目,盛行和成名以及一个很小的社区相比,它的谦逊首先让我们感到惊讶。由此可见,产品信息最少,对于通过论坛和新闻通讯出现的问题的解决方案的搜索可能根本不会产生任何效果。首先,由于工具本身的功能,对我们来说完成分发工具包的组装是一项艰巨的任务,但是稍后我们将对此进行讨论。

作为预告,对于那些曾经访问过诸如Gentoo和LFS之类的Linux宇宙项目的人来说,使用此东西并回想起我们自己搜索(甚至编写)ebuild的那些“过去的”时代似乎怀旧起来很愉快。并定期使用新补丁mozilla进行重建。

Bigtop的一大优点可以认为是其基础工具的开放性和多功能性。它的基础是Gradle和Apache Maven。Gradle是Google为其收集Android的工具而闻名。它很灵活,而且正如他们所说的那样,“经过了考验”。Maven是用于在Apache本身中构建项目的全职工具,并且由于其大多数产品都是通过Maven发布的,所以没有它就无法做到。值得关注的是POM(项目对象模型)-一个“基本的” xml文件,其中描述了Maven处理项目所必需的一切,所有工作都围绕该文件进行构建。
Maven部分中,遇到一些障碍,这些障碍通常在占据Bigtop时首次遇到。

实践


那么从哪里开始呢?我们转到下载页面,并下载最新的稳定版本作为存档。Bigtop收集的二进制工件也可以在此处找到。顺便说一下,在常见的程序包管理器中,YUM和APT受支持。

另外,您可以直接从
github 下载最新的稳定版本

$ git clone --branch branch-1.4 https://github.com/apache/bigtop.git

在“ bigtop”中克隆...

remote: Enumerating objects: 46, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 40217 (delta 14), reused 10 (delta 1), pack-reused 40171
 : 100% (40217/40217), 43.54 MiB | 1.05 MiB/s, .
 : 100% (20503/20503), .
Updating files: 100% (1998/1998), .

生成的./bigtop目录如下所示:

./bigtop-bigpetstore-演示应用程序,合成示例
./bigtop-ci-CI工具,詹金斯
./bigtop-data-generators-数据生成,合成,冒烟测试等。
./bigtop-deploy-部署工具
./bigtop-packages-配置,脚本,组装补丁,工具的主要部分
./bigtop-test-framework-测试框架
./bigtop-tests-测试自身,压力和冒烟
./bigtop_toolchain-组装环境,工具可以使用的环境的准备
./build-组装的工作目录
./dl-下载源的目录
./docker-docker 中的组装- 映像,测试
./gradle-gradle config-
./output 程序集工件进入的目录
./provisioner-设置

在此阶段,对我们而言最有趣的是主配置./bigtop/bigtop.bom,其中我们可以看到所有受支持的组件及其版本。在这里我们可以指定产品的其他版本(如果突然想尝试构建它)或程序集的版本(例如,如果我们添加了重要的补丁程序)。

子目录也引起了极大的兴趣,该子目录./bigtop/bigtop-packages与组件和组件的组装过程直接相关。

因此,我们下载了档案文件,将其解压缩或使用github克隆,可以启动程序集吗?

不,首先要准备环境。

环境准备


这里需要一点题外话。要构建几乎或多或少复杂的产品,您需要一个特定的环境-在我们的例子中,它是JDK,相同的共享库,头文件等工具,例如ant,ivy2等。获得Bigtop所需环境的一种选择是在组装主机上安装必要的组件。我可能在编年史上弄错了,但是从1.0版开始,似乎在预配置且可访问的Docker映像中还有一个构建选项,您可以在这里找到它们。

至于环境的准备,还有一个助手-木偶。

您可以使用以下命令,启动是从
工具的根目录完成的./bigtop:

./gradlew toolchain
./gradlew toolchain-devtools
./gradlew toolchain-puppetmodules

或直接通过木偶:

puppet apply --modulepath=<path_to_bigtop> -e "include bigtop_toolchain::installer"
puppet apply --modulepath=<path_to_bigtop> -e "include bigtop_toolchain::deployment-tools"
puppet apply --modulepath=<path_to_bigtop> -e "include bigtop_toolchain::development-tools"

不幸的是,现阶段可能已经出现困难。这里的一般建议是在构建主机上使用最新的受支持的发行版,或者尝试使用docker的路径。

部件


我们可以尝试收集什么?这个问题的答案将给出命令的输出

./gradlew tasks

打包任务部分包含许多产品,这些产品是Bigtop的最终产品。
它们可以通过后缀-rpm或-pkg-ind进行标识(如果在docker中进行组装
)。在我们的案例中,最有趣的是Hadoop。

让我们尝试在构建服务器的环境中进行构建:

./gradlew hadoop-rpm

Bigtop本身将下载特定组件所需的必要资源并开始构建。因此,该工具与Maven存储库和其他来源相关联,也就是说,它需要Internet访问。

在此过程中,将形成标准输出。有时您可以从中了解错误信息,并从错误消息中了解问题所在。有时您需要更多信息。在这种情况下,值得添加参数--info --debug,并且也可能有用–stacktrace。有一种方便的方法可以生成一个数据集,以供以后参考邮件列表,即key --scan

有了它,bigtop将收集所有信息并将其放在gradle中,然后将提供一个链接,
然后有能力的人将能够知道装配失败的原因。
您需要记住,此选项可能会使您不希望公开的信息,例如用户名,节点,环境变量等,因此请当心。

错误通常是由于无法获得组装所需的任何组件而导致的。通常,可以通过创建修补程序来修复源中的某些内容(例如,源根目录中pom.xml中的地址)来解决问题。这是通过将其创建并放置在适当的 ./bigtop/bigtop-packages/src/common/oozie/补丁程序目录中(例如,patch2-fix.diff的形式)来完成的。

--- a/pom.xml
+++ b/pom.xml
@@ -136,7 +136,7 @@
<repositories>
<repository>
<id>central</id>
- <url>http://repo1.maven.org/maven2</url>
+ <url>https://repo1.maven.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>

在阅读本文时,最有可能您不必自己进行上述更正。

将任何补丁和编辑内容引入组装机制时,您可能需要通过cleanup命令“重置”组装:

./gradlew hadoop-clean
> Task :hadoop_vardefines
> Task :hadoop-clean
BUILD SUCCESSFUL in 5s
2 actionable tasks: 2 executed

此操作将回滚此组件的装配中的所有更改,然后将再次执行装配。这次,我们将尝试在Docker映像中构建项目:

./gradlew -POS=centos-7 -Pprefix=1.2.1 hadoop-pkg-ind
> Task :hadoop-pkg-ind
Building 1.2.1 hadoop-pkg on centos-7 in Docker...
+++ dirname ./bigtop-ci/build.sh
++ cd ./bigtop-ci/..
++ pwd
+ BIGTOP_HOME=/tmp/bigtop
+ '[' 6 -eq 0 ']'
+ [[ 6 -gt 0 ]]
+ key=--prefix
+ case $key in
+ PREFIX=1.2.1
+ shift
+ shift
+ [[ 4 -gt 0 ]]
+ key=--os
+ case $key in
+ OS=centos-7
+ shift
+ shift
+ [[ 2 -gt 0 ]]
+ key=--target
+ case $key in
+ TARGET=hadoop-pkg
+ shift
+ shift
+ [[ 0 -gt 0 ]]
+ '[' -z x ']'
+ '[' -z x ']'
+ '[' '' == true ']'
+ IMAGE_NAME=bigtop/slaves:1.2.1-centos-7
++ uname -m
+ ARCH=x86_64
+ '[' x86_64 '!=' x86_64 ']'
++ docker run -d bigtop/slaves:1.2.1-centos-7 /sbin/init
+
CONTAINER_ID=0ce5ac5ca955b822a3e6c5eb3f477f0a152cd27d5487680f77e33fbe66b5bed8
+ trap 'docker rm -f
0ce5ac5ca955b822a3e6c5eb3f477f0a152cd27d5487680f77e33fbe66b5bed8' EXIT
....
 
....
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-mapreduce-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-namenode-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-secondarynamenode-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-zkfc-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-journalnode-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-datanode-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-httpfs-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-resourcemanager-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-nodemanager-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-proxyserver-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-yarn-timelineserver-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-mapreduce-historyserver-2.8.5-
1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-client-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-conf-pseudo-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-doc-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-libhdfs-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-libhdfs-devel-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-hdfs-fuse-2.8.5-1.el7.x86_64.rpm
Wrote: /bigtop/build/hadoop/rpm/RPMS/x86_64/hadoop-debuginfo-2.8.5-1.el7.x86_64.rpm
+ umask 022
+ cd /bigtop/build/hadoop/rpm//BUILD
+ cd hadoop-2.8.5-src
+ /usr/bin/rm -rf /bigtop/build/hadoop/rpm/BUILDROOT/hadoop-2.8.5-1.el7.x86_64
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.uQ2FCn
+ exit 0
+ umask 022
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.CwDb22
+ cd /bigtop/build/hadoop/rpm//BUILD
+ rm -rf hadoop-2.8.5-src
+ exit 0
[ant:touch] Creating /bigtop/build/hadoop/.rpm
:hadoop-rpm (Thread[Task worker for ':',5,main]) completed. Took 38 mins 1.151 secs.
:hadoop-pkg (Thread[Task worker for ':',5,main]) started.
> Task :hadoop-pkg
Task ':hadoop-pkg' is not up-to-date because:
Task has not declared any outputs despite executing actions.
:hadoop-pkg (Thread[Task worker for ':',5,main]) completed. Took 0.0 secs.
BUILD SUCCESSFUL in 40m 37s
6 actionable tasks: 6 executed
+ RESULT=0
+ mkdir -p output
+ docker cp
ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb:/bigtop/build .
+ docker cp
ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb:/bigtop/output .
+ docker rm -f ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb
ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb
+ '[' 0 -ne 0 ']'
+ docker rm -f ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb
Error: No such container:
ac46014fd9501bdc86b6c67d08789fbdc6ee46a2645550ff6b6712f7d02ffebb
BUILD SUCCESSFUL in 41m 24s
1 actionable task: 1 executed

构建是在CentOS下完成的,但您也可以在Ubuntu下进行:

./gradlew -POS=ubuntu-16.04 -Pprefix=1.2.1 hadoop-pkg-ind

除了为各种Linux发行版组装软件包之外,该工具还可以使用组装的软件包创建存储库,例如:

./gradlew yum

您可能还记得在docker中进行烟雾测试和部署。

创建一个由三个节点组成的集群:

./gradlew -Pnum_instances=3 docker-provisioner

在三个节点的集群中运行冒烟测试:

./gradlew -Pnum_instances=3 -Prun_smoke_tests docker-provisioner

删除集群:

./gradlew docker-provisioner-destroy

获取用于在Docker容器内部进行连接的命令:

./gradlew docker-provisioner-ssh

显示状态:

./gradlew docker-provisioner-status

您可以在文档中阅读有关部署任务的更多信息。

如果我们谈论测试,那么有很多测试,主要是烟雾测试和集成测试。他们的分析超出了本文的范围。我只能说,构建分发工具包并不像乍看起来那样困难。我们设法在测试中收集并通过了我们在产品中使用的所有组件,并且在测试环境中它们的部署和基本操作也没有问题。

除了Bigtop中的现有组件之外,还可以添加其他内容,甚至可以自己开发软件。所有这些都是完全自动化的,并且适合CI / CD的概念。

结论


显然,以这种方式构建的发行版不应立即发送到生产环境。您需要了解,如果确实需要建立和维护您的发行版,那么您需要在财务和时间上进行投资。

但是,结合正确的方法和专业的团队,很可能无需商业解决方案。

重要的是要注意,Bigtop项目本身需要开发,并且似乎今天没有积极的开发。此外,Hadoop的3在它的外观上的前景并不明确。顺便说一句,如果你有建立的Hadoop 3的实际需要,你可以看一下从Arenadata,其中,除了标准的
成分,还有一些附加组件(游侠,诺克斯,NiFi)的。

至于Rostelecom,对我们而言,Bigtop是当今考虑的选项之一。无论我们是否停止,时间都会证明一切。

附录


要在部件中包括新组件,您需要在bigtop.bom和./bigtop-packages中添加其描述。您可以尝试通过与现有组件类似的方式来执行此操作。尝试弄清楚。它并不像乍看起来那样困难。

你怎么看?我们很高兴在评论中看到您的意见,并感谢您的关注!

本文由Rostelecom数据管理团队编写

All Articles