1. 背景#
社区提供的 Hadoop 安装包中并不包含 native 库,比如常用的压缩算法 zstd、snappy 等。
最近在本地调试数据入湖程序,想使用压缩和解压效率更高的 zstd 或者 snappy 替换默认的 gzip 压缩,所以这里想尝试在 macOS 平台重新编译 Hadoop 2.9.2 。
2. 查看本地类库#
因原生 Hadoop 类库支持系统有限,所以执行该命令以后会有本地类库无法加载的告警,具体信息如下
3. 编译#
3.1. 准备编译环境#
- Java 环境(已安装,不做赘述,没安装的可以通过 HomeBrew 安装)
- Maven(已安装,不做赘述,我这里的版本是 3.6.0)
安装完成后需要配置上述软件的环境变量信息
3.2. 安装依赖库#
1
| brew install gcc cmake autoconf automake libtool
|
- 安装 gzip、zlib、gzip2 、zstd 等压缩库
1
2
| brew install gzip bzip2 zlib
brew install zstd
|
不安装的话会编译失败,报错找不到 protoc
1
2
3
4
5
6
7
8
9
10
11
|
## 版本必须和Hadoop源码中版本保持一致
grep 'protobuf.version' */pom.xml
sudo wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
sudo chown beibei:admin protobuf-2.5.0.tar.gz
sudo tar -zxvf protobuf-2.5.0.tar.gz
sudo chown -R beibei:admin protobuf-2.5.0/
cd protobuf-2.5.0/
./configure
make && make install
protoc --version #libprotoc 2.5.0
|
平台的问题,安装过程中可能会报错,例如
这里可以参考:https://github.com/protocolbuffers/protobuf/issues/8836 解决,亲测有效
platform_macros.h
1
2
3
| #elif defined(__arm64__)
#define GOOGLE_PROTOBUF_ARCH_ARM 1
#define GOOGLE_PROTOBUF_ARCH_64_BIT 1
|
可以执行以下命令即代表安装成功
3.3. 编译 Hadoop 源码#
在 Hadoop 源码根目录执行
1
| mvn package -DskipTests -Pdist,native -Dtar
|
期望的结果是经过漫长编译后,全部 BUILD SUCCESS,然后将编译出的 native library 库(路径hadoop-2.9.2-src/hadoop-dist/target/hadoop-2.9.2/lib/native)替换到之前安装的 Hadoop 的库目录中(路径hadoop-2.9.2/lib/native)。
而实际经历了几个小时,在 Mac 编译总会卡死在 cmake 无法成功,debug 也没找到明确的报错提示,尝试了几种从网上找的解决办法,都无济于事。这里先贴一下报错记录一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.684 s
[INFO] Finished at: 2024-01-10T13:51:21+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:2.9.2:cmake-compile (cmake-compile) on project hadoop-common: CMake failed with error code 1 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :hadoop-common
|
呃,太坑了,编译之路太坎坷了,等我继续探索探索 😭😭😭
4. 参考资料#
https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/NativeLibraries.html
https://github.com/protocolbuffers/protobuf/issues/8836