java - Hadoop 3.1 构建在“protoc --version”失败
问题描述
我正在尝试从其源代码编译 Hadoop 3.1。一旦进入 docker 容器,我将按照BUILDING.txt
Hadoop 源代码文件中包含的说明使用 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
protoc
3.0 版也发生了同样的事情。
有人经历过类似的事情吗?
解决方案
在没有找到确切的解决方案之后,这里有一个解决方法。
Hadoop 的源代码,附带./start-build-env.sh
. 运行脚本后,它Docker container
会启动 a ,其中 Hadoop 可以使用Maven
.
所有必要的库都存在于容器中,但仅包含在 user 的$PATH
中,而不是 root 的$PATH
。这是一个问题,因为它可以方便sudo
地用于构建包,这就是protoc --version
无法返回某些东西的原因。
现在启动的每个容器./start-build-env.sh
似乎都是临时的,您无法编辑根的$PATH
via ~/.bashrc
。一种解决方法是通过./start-build-env.sh
和从另一个终端窗口启动容器,使用命令登录到容器:sudo docker exec -it <container> bash
. 现在您可以下载一个简单的编辑器(如nano
或vi
通过apt-get
),并$PATH
在visudo
.
然后sudo mvn package -Pdist...
容器内的命令,不会卡在我上面描述的问题中
推荐阅读
- edi - EDI 832 输入表
- java - 在春季通过响应返回组的最佳方式
- uwp - BufferingStarted 和 PlaybackSession.BufferingStarted 有什么区别
- android - view.post() 和 GlobalScope.launch(Dispatchers.Main) 有什么区别?
- python - 从文本文件中提取数据以在 matplotlib 中绘制图形时突出显示一点
- python - 图片 - CNN 澄清
- google-apps-script - 如何将来自 2 个不同列的数据同步到另一个电子表格?
- javascript - 按名称/数量组织对象数组
- html - 嵌入的推文无法在 vue 中正确显示
- php - Ajax 成功:返回的数组始终为 false