首页 > 解决方案 > Hadoop 3.1 构建在“protoc --version”失败

问题描述

我正在尝试从其源代码编译 Hadoop 3.1。一旦进入 docker 容器,我将按照BUILDING.txtHadoop 源代码文件中包含的说明使用 maven 构建它。在Apache Hadoop Common ............................... FAILURE [ 0.458 s]尝试构建时,我收到以下错误,关于protoc --version

[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:3.1.0:protoc (compile-protoc) on project hadoop-common:org.apache.maven.plugin.MojoExecutionException: 'protoc --version' did not return a version -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:3.1.0:protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin.MojoExecutionException: 'protoc --version' did not return a version

但是,该protoc命令正在我的安装中运行:

$ protoc
Missing input file.
$ protoc --version
libprotoc 2.5.0

protoc3.0 版也发生了同样的事情。

有人经历过类似的事情吗?

标签: javamavenhadoopprotoc

解决方案


在没有找到确切的解决方案之后,这里有一个解决方法。

Hadoop 的源代码,附带./start-build-env.sh. 运行脚本后,它Docker container会启动 a ,其中 Hadoop 可以使用Maven.

所有必要的库都存在于容器中,但仅包含在 user 的$PATH中,而不是 root 的$PATH。这是一个问题,因为它可以方便sudo地用于构建包,这就是protoc --version无法返回某些东西的原因。

现在启动的每个容器./start-build-env.sh似乎都是临时的,您无法编辑根的$PATHvia ~/.bashrc。一种解决方法是通过./start-build-env.sh和从另一个终端窗口启动容器,使用命令登录到容器:sudo docker exec -it <container> bash. 现在您可以下载一个简单的编辑器(如nanovi通过apt-get),并$PATHvisudo.

然后sudo mvn package -Pdist...容器内的命令,不会卡在我上面描述的问题中


推荐阅读