情况预备
hadoop搭建(容器情况)
spark on yarn搭建(容器情况)
在上面情况搭建完成的底子上搭建hudi
预备好maven包和hudi包,可以去下面这里下载
apache-maven-3.6.3-bin.tar.gzhttps://gitcode.com/xfcloud/BIgdataA/blob/main/hudi/apache-maven-3.6.3-bin.tar.gzhudi-0.12.0.src.tgzhttps://gitcode.com/xfcloud/BIgdataA/blob/main/hudi/hudi-0.12.0.src.tgz
Hudi安装设置
本任务需要使用root用户完成相关设置,具体要求如下:
1、 从宿主机/opt目录下将maven相关安装包复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将maven相关安装包解压到/opt/module/目录下(若路径不存在,则需新建)并设置maven当地库为/opt/software/RepMaven/,远程仓库使用阿里云镜像,设置maven的情况变量,并在/opt/下执行mvn -v,将运行效果截图粘贴至客户端桌面【Release\任务A提交效果.docx】中对应的任务序号下;
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
第一步:从宿主机/opt目录下将maven相关安装包复制到容器Master中的/opt/software(若路径不存在,则需新建)中
- [root@Bigdata ~]# docker cp /opt/apache-maven-3.6.3-bin.tar.gz master:/software
复制代码 第二步:将maven相关安装包解压到/opt/module/目录下(若路径不存在,则需新建)
- [root@master ~]# tar zxvf /opt/software/apache-maven-3.6.3-bin.tar.gz -C /opt/module/
复制代码 第三步:设置maven当地库为/opt/software/RepMaven/,远程仓库使用阿里云镜像
- [root@master ~]# vi /opt/module/maven/conf/settings.xml
复制代码 当地仓库,找到 <localRepository>/path/to/local/repo</localRepository>这个后再下面添加
- <localRepository>/opt/software/RepMaven/</localRepository>
复制代码
远程仓库,找到mirrors标签,在里面添加阿里云镜
- <mirror>
- <id>nexus-aliyun</id>
- <mirrorOf>central</mirrorOf>
- <name>Nexus aliyun</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public</url>
- </mirror>
复制代码
第四步:设置maven的情况变量
[root@master ~]# vi /etc/profile 添加相应的情况变量
- export MAVEN_HOME=/opt/module/maven
- export PATH=$PATH:$MAVEN_HOME/bin
复制代码 第五步:在/opt/下执行mvn -v
- [root@master ~]# cd /opt/
- [root@master opt]# mvn -v
复制代码
2、 从宿主机/opt目录下将Hudi相关安装包复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将Hudi相关安装包解压到/opt/module/目录下(若路径不存在,则需新建),将下令复制并粘贴至客户端桌面【Release\任务A提交效果.docx】中对应的任务序号下;
第一步:从宿主机/opt目录下将Hudi相关安装包复制到容器Master中的/opt/software(若路径不存在,则需新建)中
- [root@Bigdata ~]# docker cp /opt/hudi-0.12.0.src.tgz master:/opt/software
复制代码 第二步:将Hudi相关安装包解压到/opt/module/目录下(若路径不存在,则需新建)
- [root@master ~]# tar zxvf /opt/software/hudi-0.12.0.src.tgz -C /opt/module/
复制代码 3、 完成解压安装及设置后使用maven对Hudi进行构建(spark3.1,scala-2.12),编译完成后与Spark集成,集成后使用spark-shell操作Hudi,将spark-shell启动使用spark-shell运行下面给到的案例,并将最终查询效果截图粘贴至客户端桌面【Release\任务A提交效果.docx】中对应的任务序号下。
第一步:设置hudi
1)、替换父模块pom.xml(比赛有给直接替换就行,没给就自己设置)
替换为这个
父模块pom.xmlhttps://gitcode.com/xfcloud/BIgdataA/blob/main/hudi/pom.xml
或者手动修改
- [root@master ~]# vi /opt/module/hudi-0.12.0/pom.xml
复制代码 新增repository加快依赖下载
- <repository>
- <id>nexus-aliyun</id>
- <name>nexus-aliyun</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
复制代码
修改依赖的组件版本,找到对应的标签修改就行了
- <hadoop.version>3.1.3</hadoop.version>
- <hive.version>3.1.2</hive.version>
复制代码 2)、HoodieParquetDataBlock.java替换(比赛有给直接替换就行,没给就自己设置)
替换为这个
HoodieParquetDataBlock.javahttps://gitcode.com/xfcloud/BIgdataA/blob/main/hudi/HoodieParquetDataBlock.java
或者手动修改
- [root@master ~]# vi /opt/module/hudi-0.12.0/hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java
复制代码 修改第110行,原先只有一个参数,添加第二个参数null,否则会因为hadoop2.x和3.x版本兼容问题(找不到合适的FSDataOutputStream构造器)
3)、hudi-spark-bundle/pom.xml替换(比赛有给直接替换就行,没给就自己设置)
替换为这个
hudi-spark-bundle/pom.xmlhttps://gitcode.com/xfcloud/BIgdataA/blob/main/hudi/hudi-spark-bundle/pom.xml
或者手动修改
- [root@master ~]# vi /opt/module/hudi-0.12.0/packaging/hudi-spark-bundle/pom.xml
复制代码 插入以下内容,标注插入的地方插入相应的内容
4)、将packaging/hudi-utilities-bundle/pom.xml替换(比赛有给直接替换就行,没给就自己设置)
替换为这个
hudi-utilities-bundle/pom.xmlhttps://gitcode.com/xfcloud/BIgdataA/blob/main/hudi/hudi-utilities-bundle/pom.xml
或者手动修改
- [root@master ~]# vi /opt/module/hudi-0.12.0/packaging/hudi-utilities-bundle/pom.xml
复制代码 插入以下内容,标注插入的地方插入相应的内容
第二步:编译完成后与Spark集成,集成后使用spark-shell操作Hudi
- 进入hudi项目目录
- cd /opt/module/hudi
- 编译构建
- mvn clean package -DskipTests -Dspark3.1 -Dscala-2.12
复制代码
编译完看下能不能进hudi-cli
- /opt/module/hudi-0.12.0/hudi-cli/hudi-cli.sh
复制代码
与spark集成
将上述编译好的安装包拷贝到spark下的jars目录中
- cp /opt/module/hudi-0.12.0/packaging/hudi-spark-bundle/target/hudi-spark3.1-bundle_2.12-0.12.0.jar /opt/module/spark/jars/
复制代码
第三步:将spark-shell启动使用spark-shell运行下面给到的案例
启动spark-shell
- spark-shell \
- --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
- --conf 'spark.sql.hive.convertMetastoreParquet=false'
复制代码 将案例复制到下令行运行

- (提示:编译需要替换以下内容:
- 1.将父模块pom.xml替换;
- 2.hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java替换;
- 3.将packaging/hudi-spark-bundle/pom.xml替换;
- 4.将packaging/hudi-utilities-bundle/pom.xml替换)
- import org.apache.hudi.QuickstartUtils._
- import scala.collection.JavaConversions._
- import org.apache.spark.sql.SaveMode._
- import org.apache.hudi.DataSourceReadOptions._
- import org.apache.hudi.DataSourceWriteOptions._
- import org.apache.hudi.config.HoodieWriteConfig._
- import org.apache.hudi.common.model.HoodieRecord
- val tableName = "hudi_trips_cow"
- val basePath = "file:///tmp/hudi_trips_cow"
- val dataGen = new DataGenerator
- val inserts = convertToStringList(dataGen.generateInserts(10))
- val df = spark.read.json(spark.sparkContext.parallelize(inserts, 2))
- df.write.format("hudi").
- options(getQuickstartWriteConfigs).
- option(PRECOMBINE_FIELD_OPT_KEY, "ts").
- option(RECORDKEY_FIELD_OPT_KEY, "uuid").
- option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath").
- option(TABLE_NAME, tableName).
- mode(Overwrite).
- save(basePath)
- val tripsSnapshotDF = spark.read.format("hudi").load(basePath + "/*/*/*/*")
- tripsSnapshotDF.createOrReplaceTempView("hudi_trips_snapshot")
- spark.sql("select fare, begin_lon, begin_lat, ts from hudi_trips_snapshot where fare > 20.0").show()
复制代码 END
一键三连是我写文章的动力!
声明:此文章为个人学习笔记,如文章有问题欢迎留言探讨,也希望您的指正 !
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |