Ambari 源码编译指南-懒人篇推荐
# 一、Ambari源码编译
Ambari 是一个开源项目,主要用于 Apache Hadoop 生态系统的集群管理。为了能够从源码编译和安装 Ambari,必须先准备好开发和构建环境。本文将详细介绍如何基于ambari-env
配置这些环境以及如何进行 Ambari 源码的编译。
# 1、常规编译
在开始编译之前,我们需要确保系统满足一定的条件,并且安装所需的依赖项。接下来我们逐步介绍各个必要的步骤。
# 1.1 前提条件
在开始编译之前,请确保您的系统满足以下条件。根据不同的操作系统,您可能需要额外的工具和配置:
- xCode (仅限于 macOS - 可以从苹果商店免费下载)
- JDK 8 (Ambari 2.6 及以下版本可使用 JDK 7 编译,从 Ambari 2.7 开始,需要至少使用 JDK 8)
- Apache Maven 3.3.9 或更高版本
- Python 2.6 (Ambari 2.7 或更高版本要求 Python 2.7 或更高版本)
- rpmbuild (rpm-build 软件包)
- g++ (gcc-c++ 软件包)
- Python setuptools:
对于 Python 2.6: 下载 setuptools 并运行:
text sh setuptools-0.6c11-py2.6.egg
1
2对于 Python 2.7: 下载 setuptools 并运行:
text sh setuptools-0.6c11-py2.7.egg
1
2
提示
确保系统满足所有前提条件后,您就可以继续进行 Ambari 的编译工作。如果遇到缺失依赖的情况,及时安装缺失的组件。
# 1.1.1 JDK1.8安装
为了正确编译 Ambari,您需要安装 JDK 8。如果您的系统没有 JDK 8,可以使用以下脚本进行下载和安装:
#!/bin/bash
set +ex
###########JDK_INIT start
echo "############## SETUP JDK_INIT start #############"
# JDK path and URL
JDK_FILE_PATH="/opt/modules/jdk-8u202-linux-x64.tar.gz"
JDK_FILE_HOME_PATH="/opt/modules/jdk1.8.0_202"
JDK_DOWNLOAD_URL="https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz"
# 解压缩函数
extract_tar_gz() {
local file_path=$1
local dest_dir=$2
echo "Extracting file $file_path to directory $dest_dir..."
tar -zxvf "$file_path" -C "$dest_dir"
if [ $? -eq 0 ]; then
echo "File extracted successfully: $dest_dir"
else
echo "File extraction failed"
exit 1
fi
}
# 配置 JAVA_HOME 函数
configure_java_home() {
# 使用 sed 命令更新或添加 JAVA_HOME 变量
if grep -q "^export JAVA_HOME=" /etc/profile; then
sudo sed -i "s#^export JAVA_HOME=.*#export JAVA_HOME=${JDK_FILE_HOME_PATH}#" /etc/profile
else
echo "export JAVA_HOME=${JDK_FILE_HOME_PATH}" | sudo tee -a /etc/profile
fi
# 更新 PATH 变量以包含 JAVA_HOME/bin
if ! grep -q "^export PATH=.*\$JAVA_HOME/bin" /etc/profile; then
echo "export PATH=\$PATH:\$JAVA_HOME/bin" | sudo tee -a /etc/profile
fi
# 重新加载 /etc/profile 文件以应用更改
source /etc/profile
# 验证 JAVA_HOME 设置
echo "JAVA_HOME is set to: $JAVA_HOME"
}
# 检查并下载 JDK 文件
check_and_download_jdk() {
if [ -f "$JDK_FILE_PATH" ]; then
echo "JDK file exists: $JDK_FILE_PATH"
else
echo "openjdk file does not exist, downloading..."
mkdir -p "$(dirname "$JDK_FILE_PATH")"
curl -o "$JDK_FILE_PATH" "$JDK_DOWNLOAD_URL"
if [ $? -eq 0 ]; then
echo "openjdk download success: $JDK_FILE_PATH"
extract_tar_gz "$JDK_FILE_PATH" "/opt/modules"
else
echo "openjdk download failed!!"
exit 1
fi
fi
}
# 添加并配置 update-alternatives
configure_update_alternatives() {
sudo update-alternatives --install /usr/bin/java java ${JDK_FILE_HOME_PATH}/bin/java 2
sudo update-alternatives --install /usr/bin/javac javac ${JDK_FILE_HOME_PATH}/bin/javac 2
sudo update-alternatives --set java ${JDK_FILE_HOME_PATH}/bin/java
sudo update-alternatives --set javac ${JDK_FILE_HOME_PATH}/bin/javac
# 验证 Java 版本
java -version
}
main() {
check_and_download_jdk
if [ -d "$JDK_FILE_HOME_PATH" ]; then
echo "JDK home exists: $JDK_FILE_HOME_PATH"
else
extract_tar_gz "$JDK_FILE_PATH" "/opt/modules"
fi
configure_java_home
configure_update_alternatives
}
main
###########JDK_INIT end
echo "############## SETUP JDK_INIT end #############"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# 1.1.2 Maven 3.8.4 安装
安装 Apache Maven 时,确保您下载的是合适的版本。以下脚本会帮助您自动下载并安装 Maven 3.8.4:
#!/bin/bash
set +ex
###########MAVEN_INIT start
echo "############## SETUP MAVEN_INIT start #############"
# Maven path and URL
MAVEN_VERSION="3.8.4"
MAVEN_FILE_PATH="/opt/modules/apache-maven-${MAVEN_VERSION}-bin.tar.gz"
MAVEN_HOME_PATH="/opt/modules/apache-maven-${MAVEN_VERSION}"
MAVEN_DOWNLOAD_URL="https://repo.huaweicloud.com/apache/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz"
# 解压缩函数
extract_tar_gz() {
local file_path=$1
local dest_dir=$2
echo "Extracting file $file_path to directory $dest_dir..."
tar -zxvf "$file_path" -C "$dest_dir"
if [ $? -eq 0 ]; then
echo "File extracted successfully: $dest_dir"
else
echo "File extraction failed"
exit 1
fi
}
# 配置 MAVEN_HOME 函数
configure_maven_home() {
# 使用 sed 命令更新或添加 MAVEN_HOME 变量
if grep -q "^export MAVEN_HOME=" /etc/profile; then
sudo sed -i "s#^export MAVEN_HOME=.*#export MAVEN_HOME=${MAVEN_HOME_PATH}#" /etc/profile
else
echo "export MAVEN_HOME=${MAVEN_HOME_PATH}" | sudo tee -a /etc/profile
fi
# 更新 PATH 变量以包含 MAVEN_HOME/bin
if ! grep -q "^export PATH=.*\$MAVEN_HOME/bin" /etc/profile; then
echo "export PATH=\$PATH:\$MAVEN_HOME/bin" | sudo tee -a /etc/profile
fi
# 重新加载 /etc/profile 文件以应用更改
source /etc/profile
# 验证 MAVEN_HOME 设置
echo "MAVEN_HOME is set to: $MAVEN_HOME"
}
# 检查并下载 Maven 文件
check_and_download_maven() {
if [ -f "$MAVEN_FILE_PATH" ]; then
echo "Maven file exists: $MAVEN_FILE_PATH"
else
echo "Maven file does not exist, downloading..."
mkdir -p "$(dirname "$MAVEN_FILE_PATH")"
curl -o "$MAVEN_FILE_PATH" "$MAVEN_DOWNLOAD_URL"
if [ $? -eq 0 ]; then
echo "Maven download success: $MAVEN_FILE_PATH"
extract_tar_gz "$MAVEN_FILE_PATH" "/opt/modules"
else
echo "Maven download failed!!"
exit 1
fi
fi
}
main() {
check_and_download_maven
if [ -d "$MAVEN_HOME_PATH" ]; then
echo "Maven home exists: $MAVEN_HOME_PATH"
else
extract_tar_gz "$MAVEN_FILE_PATH" "/opt/modules"
fi
configure_maven_home
}
main
###########MAVEN_INIT end
echo "############## SETUP MAVEN_INIT end #############"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# 1.2 Ambari代码调整
在 Ambari 源码的某些配置文件中,需要做一些调整以确保构建过程顺利。最常见的调整是修改 .bowerrc
文件。请确保该文件的内容如下:
1、修改
ambari-admin/src/main/resources/ui/admin-web/.bowerrc
文件
{
"registry": "https://registry.bower.io/",
"strict-ssl": false,
"analytics": false,
"shorthand-resolver": "https://ghfast.top/https://github.com/{{owner}}/{{package}}.git",
"directory": "app/bower_components"
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 1.3 Ambari代码编译
编译 Ambari 代码是整个过程的关键步骤。在编译时,首先运行 mvn
命令进行打包,然后通过 bower
安装前端依赖:
# 执行 rpm 打包即可
mvn -T 16 -B install package rpm:rpm -Drat.skip=true -Dcheckstyle.skip=true -DskipTests -Dpython.ver="python >= 2.6" -Preplaceurl -X
1
2
2
# 查找打好的压缩包
find /opt/modules/ambari/ -name '*.rpm'
1
2
2
# 2、使用ambari-env
通过下载 Ambari 环境脚本,您可以快速设置和构建环境。只需运行以下脚本即可:
下载代码,跑环境 ambari-env.git (opens new window)
bash /scripts/build/ambari/build.sh
1
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16