Iceberg 1.6.1 源码使用IDEA本地编译
文章目录
- Iceberg 1.6.1 源码使用IDEA本地编译
- 下载
- 文件配置调整
- gradle相关
- 修改bulid.gradle
- gradle.properties
- 在IDEA上构建
- 编译打包
- 可能出现的问题
- 彩蛋
- 与Spark部署
- Spark与Iceberg集成部署
下载
网络条件允许的情况下,使用git直接克隆,命令git clone https://github.com/apache/iceberg.git
。
如果网络情况不好,可以使用腾讯的软件源,下载地址:apache-iceberg-1.6.1.tar.gz
下载 gradle-8.9-bin.zip
文件配置调整
解压压缩过后,不要直接使用IDEA打开,需要天调整一些文件
gradle相关
gradle-wrapper.properties
distributionUrl=file:///D:/backup/gradle/InstallationPackage/gradle-8.9-bin.zip
修改bulid.gradle
使用aliyun的gardle仓库
buildscript
内中的部分
repositories {
mavenLocal()
maven {
url 'https://maven.aliyun.com/repository/gradle-plugin'
}
gradlePluginPortal()
}
allprojects
内中的部分
allprojects {
group = "org.apache.iceberg"
version = projectVersion
repositories {
maven {
url 'https://maven.aliyun.com/repository/public/'
}
maven {
url 'https://maven.aliyun.com/repository/central'
}
def REPOSITORY_URL = 'https://maven.aliyun.com/repository/public'
all {
ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith('https://artifacts.elastic.co/maven')
|| url.startsWith('https://repo1.maven.org/maven2')
|| url.startsWith('https://repo.maven.org/maven2')
|| url.startsWith('https://jcenter.bintray.com/')
|| url.startsWith('https://repo.maven.apache.org/maven2')
) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
mavenLocal()
mavenCentral()
}
}
gradle.properties
目前里面支持的集成组件的版本。将sparkversion的版本改为3.4
systemProp.defaultSparkVersions=3.4
在IDEA上构建
使用IntelliJ IDEA 2024.1.2
打开项目apache-iceberg-1.6.1
,进行Gradle项目加载。或者使用快捷键进行构建。 构建:Ctrl + F9 。
编译打包
在linux环境中进行编译打包
./gradlew build -x test -x integrationTest
可能出现的问题
- 错误信息
git clone
时显示RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
19057578@CNHQ-19057578N MINGW64 /d/code
$ git clone https://github.com/apache/iceberg.git
Cloning into 'iceberg'...
remote: Enumerating objects: 151733, done.
remote: Counting objects: 100% (2690/2690), done.
remote: Compressing objects: 100% (604/604), done.
error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
error: 6642 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
很可能是由于HTTP/2通信协议导致的问题
Git和底层的curl库可能在处理HTTP/2协议时遇到问题,尤其是在某些网络配置或特定的服务器实现上。尝试强制Git使用HTTP/1.1来绕开这个问题
git config --global http.version HTTP/1.1
- gradle wapper下载失败
curl: (28) Failed to connect to raw.githubusercontent.com port 443 after 63120 ms: Couldn't connect to server
▒▒▒▒: ▒Ҳ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ org.gradle.wrapper.GradleWrapperMain
网络问题,不行就用手机热点
彩蛋
与Spark部署
采用Spark On Yarn运行架构,使用Yarn-Cluster
模式。
-
将spark打包后的tgz包解压
-
将解压后的文件夹
spark-3.4.2-bin-2.9.1.1
中的子文件jars
文件夹中内容重新打包成zip
,然后上传至HDFS。得到对应的HDFS路径。cd /home/spark/spark-3.4.2-bin-2.9.1.1/jars; zip -r jars.zip ./* hadoop fs -put -f /home/spark/spark-3.4.2-bin-2.9.1.1/jars hdfs:///user/spark/spark-3.4.2/
-
将spark的默认配置文件
spark-3.4.2-bin-2.9.1.1/conf/spark-defaults.conf
进行修改,增加配置项spark.yarn.archive
,其值改为上面的zip包的HDFS路径。# config for spark.yarn spark.yarn.archive hdfs:///user/bigdata/spark-3.4.2.1-bin-2.9.1.1/jars.zip
Spark与Iceberg集成部署
采用Spark On Yarn运行架构,使用Yarn-Cluster
模式。
-
将spark打包后的
spark-2.3.4-bin-2.9.2.tgz
包解压 -
把
iceberg-spark-runtime-3.4_2.12.jar
复制进,解压后的文件夹spark-3.4.2-bin-2.9.1.1
中的子文件jars
文件夹 -
将解压后的文件夹
spark-3.4.2-bin-2.9.1.1
中的子文件jars
文件夹中内容重新打包成zip
,然后上传至HDFS。得到对应的HDFS路径。cd /home/spark/spark-3.4.2-bin-2.9.1.1/jars; zip -r jars.zip ./* hadoop fs -put -f /home/spark/spark-3.4.2-bin-2.9.1.1/jars hdfs:///user/spark/spark-3.4.2/
-
将spark的默认配置文件
spark-3.4.2-bin-2.9.1.1/conf/spark-defaults.conf
进行修改,增加配置项spark.yarn.archive
,其值改为上面的zip包的HDFS路径。# config for spark.yarn spark.yarn.archive hdfs:///user/bigdata/spark-3.4.2.1-bin-2.9.1.1/jars.zip