Haddop 3.1 build在`protoc --version`失败了

时间:2018-05-15 13:14:35

标签: java maven hadoop protoc

我正在尝试从源代码编译Hadoop 3.1。 一旦进入docker容器,我正在使用maven构建它,并在Hadoop的源代码文件中包含BUILDING.txt中的说明。 在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

虽然当我尝试在bash中运行protoc --version时,结果会转回来。 vilak@bc21b16a4162:~/hadoop$ protoc Missing input file. vilak@bc21b16a4162:~/hadoop$ protoc --version libprotoc 2.5.0 vilak@bc21b16a4162:~/hadoop$

同样的事情发生在protoc 3.0版

任何人都有类似的经历吗?

1 个答案:

答案 0 :(得分:0)

在找不到确切的解决方案之后,这是一种解决方法。

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

容器中存在所有必需的库,但仅包含在用户的$PATH中,而不包含在根$PATH中。这是一个问题,因为它使用sudo来构建软件包很方便,这就是protoc --version无法返回某些内容的原因。

现在./start-build-env.sh推出的每个容器都是临时的,您无法通过$PATH修改根~/.bashrc。解决方法是通过./start-build-env.sh启动容器,然后从另一个终端窗口使用以下命令登录容器:sudo docker exec -it <container> bash。现在,您可以下载一个简单的编辑器(例如nanoviapt-get),并编辑$PATH中的默认visudo

然后容器内的命令sudo mvn package -Pdist...不会陷入我上面描述的问题