我正在尝试从源代码编译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版
任何人都有类似的经历吗?
答案 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
。现在,您可以下载一个简单的编辑器(例如nano
或vi
到apt-get
),并编辑$PATH
中的默认visudo
。
然后容器内的命令sudo mvn package -Pdist...
不会陷入我上面描述的问题