hudi搭建【大数据比赛长期更新】

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>

要求:

  1. root用户完成
  2. 宿主机和docker容器文件的传输,使用docker cp命令
  3. 搭建maven,配置阿里云仓库

2、 从宿主机/opt目录下将Hudi相关安装包复制到容器Master中的/opt/software(若路径不存在,则需新建)中,将Hudi相关安装包解压到/opt/module/目录下(若路径不存在,则需新建),将命令复制并粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下;

要求:

  1. 宿主机和docker容器文件的传输,使用docker cp命令
  2. tar文件的解压

3、完成解压安装及配置后使用maven对Hudi进行构建(spark3.1,scala-2.12),编译完成后与Spark集成,集成后使用spark-shell操作Hudi,将spark-shell启动使用spark-shell运行下面给到的案例,并将最终查询结果截图粘贴至客户端桌面【Release\任务A提交结果.docx】中对应的任务序号下。
(提示:编译需要替换以下内容:
1.将父模块pom.xml替换;
2.hudi-common/src/main/java/org/apache/hudi/common/table/log/block/HoodieParquetDataBlock.java替换;
2. 将packaging/hudi-spark-bundle/pom.xml替换
3.将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()

要求:

  1. 配置hudi,题目中已经给出修改位置,并说明替换?比赛中服务器可能会给pom文件,选手只需要替换即可
  2. 使用maven对hudi进行构建,需注意使用spark和scala的版本
  3. hudi与spark的集成
  4. 使用spark-shell运行给定的案例

搭建部署

由于当前没有提供hudi-0.12版本的安装包,需要自己去官网去下载,解压完以后使用idea进行配置操作

  1. 修改中央仓库地址(hudi/pom.xml)
<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>
  1. 修改版本(hudi/pom.xml)
 <hadoop.version>3.1.3</hadoop.version>
 <hive.version>3.1.2</hive.version>
  1. 修改代码兼容(\hudi-release-0.12.0\hudi-common\src\main\java\org\apache\hudi\common\table\log\block\HoodieParquetDataBlock.java)
    在这里插入图片描述

  2. 安装kafka依赖到本地仓库(需要注意参数需要加引号),如依赖没有找到可以联系我

  1. common-config-5.3.4.jar
  2. common-utils-5.3.4.jar
  3. kafka-avro-serializer-5.3.4.jar
  4. kafka-schema-registry-client-5.3.4.jar
mvn install:install-file "-DgroupId=io.confluent" "-DartifactId=common-config" "-Dversion=5.3.4" "-Dpackaging=jar -Dfile=./common-config-5.3.4.jar"
mvn install:install-file "-DgroupId=io.confluent" "-DartifactId=common-utils" "-Dversion=5.3.4" "-Dpackaging=jar -Dfile=./common-utils-5.3.4.jar"
mvn install:install-file "-DgroupId=io.confluent" "-DartifactId=kafka-avro-serializer" "-Dversion=5.3.4" "-Dpackaging=jar -Dfile=./kafka-avro-serializer-5.3.4.jar"
mvn install:install-file "-DgroupId=io.confluent" "-DartifactId=kafka-schema-registry-client" "-Dversion=5.3.4" "-Dpackaging=jar -Dfile=./kafka-schema-registry-client-5.3.4.jar"
  1. 修改hudi-spark-bundle的pom文件
hudi-0.12.0/packaging/hudi-spark-bundle/pom.xml 

<!-- Hive -->

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-service</artifactId>

      <version>${hive.version}</version>

      <scope>${spark.bundle.hive.scope}</scope>

      <exclusions>

        <exclusion>

          <artifactId>guava</artifactId>

          <groupId>com.google.guava</groupId>

        </exclusion>

        <exclusion>

          <groupId>org.eclipse.jetty</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <groupId>org.pentaho</groupId>

          <artifactId>*</artifactId>

        </exclusion>

      </exclusions>

    </dependency>

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-service-rpc</artifactId>

      <version>${hive.version}</version>

      <scope>${spark.bundle.hive.scope}</scope>

    </dependency>

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-jdbc</artifactId>

      <version>${hive.version}</version>

      <scope>${spark.bundle.hive.scope}</scope>

      <exclusions>

        <exclusion>

          <groupId>javax.servlet</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <groupId>javax.servlet.jsp</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <groupId>org.eclipse.jetty</groupId>

          <artifactId>*</artifactId>

        </exclusion>

      </exclusions>

    </dependency>

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-metastore</artifactId>

      <version>${hive.version}</version>

      <scope>${spark.bundle.hive.scope}</scope>

      <exclusions>

        <exclusion>

          <groupId>javax.servlet</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <groupId>org.datanucleus</groupId>

          <artifactId>datanucleus-core</artifactId>

        </exclusion>

        <exclusion>

          <groupId>javax.servlet.jsp</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <artifactId>guava</artifactId>

          <groupId>com.google.guava</groupId>

        </exclusion>

      </exclusions>

    </dependency>

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-common</artifactId>

      <version>${hive.version}</version>

      <scope>${spark.bundle.hive.scope}</scope>

      <exclusions>

        <exclusion>

          <groupId>org.eclipse.jetty.orbit</groupId>

          <artifactId>javax.servlet</artifactId>

        </exclusion>

        <exclusion>

          <groupId>org.eclipse.jetty</groupId>

          <artifactId>*</artifactId>

        </exclusion>

      </exclusions>

</dependency>

    <!-- 增加hudi配置版本的jetty -->

    <dependency>

      <groupId>org.eclipse.jetty</groupId>

      <artifactId>jetty-server</artifactId>

      <version>${jetty.version}</version>

    </dependency>

    <dependency>

      <groupId>org.eclipse.jetty</groupId>

      <artifactId>jetty-util</artifactId>

      <version>${jetty.version}</version>

    </dependency>

    <dependency>

      <groupId>org.eclipse.jetty</groupId>

      <artifactId>jetty-webapp</artifactId>

      <version>${jetty.version}</version>

    </dependency>

    <dependency>

      <groupId>org.eclipse.jetty</groupId>

      <artifactId>jetty-http</artifactId>

      <version>${jetty.version}</version>

    </dependency>
  1. 修改hudi-utilities-bundle的pom文件
hudi-0.12.0/packaging/hudi-utilities-bundle/pom.xml

  <!-- Hoodie -->

    <dependency>

      <groupId>org.apache.hudi</groupId>

      <artifactId>hudi-common</artifactId>

      <version>${project.version}</version>

      <exclusions>

        <exclusion>

          <groupId>org.eclipse.jetty</groupId>

          <artifactId>*</artifactId>

        </exclusion>

      </exclusions>

    </dependency>

    <dependency>

      <groupId>org.apache.hudi</groupId>

      <artifactId>hudi-client-common</artifactId>

      <version>${project.version}</version>

      <exclusions>

        <exclusion>

          <groupId>org.eclipse.jetty</groupId>

          <artifactId>*</artifactId>

        </exclusion>

      </exclusions>

    </dependency>

<!-- Hive -->

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-service</artifactId>

      <version>${hive.version}</version>

      <scope>${utilities.bundle.hive.scope}</scope>

      <exclusions>

       <exclusion>

          <artifactId>servlet-api</artifactId>

          <groupId>javax.servlet</groupId>

        </exclusion>

        <exclusion>

          <artifactId>guava</artifactId>

          <groupId>com.google.guava</groupId>

        </exclusion>

        <exclusion>

          <groupId>org.eclipse.jetty</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <groupId>org.pentaho</groupId>

          <artifactId>*</artifactId>

        </exclusion>

      </exclusions>

    </dependency>

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-service-rpc</artifactId>

      <version>${hive.version}</version>

      <scope>${utilities.bundle.hive.scope}</scope>

    </dependency>

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-jdbc</artifactId>

      <version>${hive.version}</version>

      <scope>${utilities.bundle.hive.scope}</scope>

      <exclusions>

        <exclusion>

          <groupId>javax.servlet</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <groupId>javax.servlet.jsp</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <groupId>org.eclipse.jetty</groupId>

          <artifactId>*</artifactId>

        </exclusion>

      </exclusions>

    </dependency>

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-metastore</artifactId>

      <version>${hive.version}</version>

      <scope>${utilities.bundle.hive.scope}</scope>

      <exclusions>

        <exclusion>

          <groupId>javax.servlet</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <groupId>org.datanucleus</groupId>

          <artifactId>datanucleus-core</artifactId>

        </exclusion>

        <exclusion>

          <groupId>javax.servlet.jsp</groupId>

          <artifactId>*</artifactId>

        </exclusion>

        <exclusion>

          <artifactId>guava</artifactId>

          <groupId>com.google.guava</groupId>

        </exclusion>

      </exclusions>

    </dependency>

    <dependency>

      <groupId>${hive.groupid}</groupId>

      <artifactId>hive-common</artifactId>

      <version>${hive.version}</version>

      <scope>${utilities.bundle.hive.scope}</scope>

      <exclusions>

        <exclusion>

          <groupId>org.eclipse.jetty.orbit</groupId>

          <artifactId>javax.servlet</artifactId>

        </exclusion>

        <exclusion>

          <groupId>org.eclipse.jetty</groupId>

          <artifactId>*</artifactId>

        </exclusion>

      </exclusions>

</dependency>

    <!-- 增加hudi配置版本的jetty -->

    <dependency>

      <groupId>org.eclipse.jetty</groupId>

      <artifactId>jetty-server</artifactId>

      <version>${jetty.version}</version>

    </dependency>

    <dependency>

      <groupId>org.eclipse.jetty</groupId>

      <artifactId>jetty-util</artifactId>

      <version>${jetty.version}</version>

    </dependency>

    <dependency>

      <groupId>org.eclipse.jetty</groupId>

      <artifactId>jetty-webapp</artifactId>

      <version>${jetty.version}</version>

    </dependency>

    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-http</artifactId>
      <version>${jetty.version}</version>
    </dependency>

  1. 编译
mvn clean package "-DskipTests" "-Dspark3.1" "-Dscala-2.12" "-Dhadoop.version=3.1.3" "-Pflink-bundle-shade-hive3"
  1. packaging包下的每个模块的target目录下就是最终我们所需要的jar包

在这里插入图片描述

  1. 将编译好的hudi-spark、hudi-hadoop包拷贝到spark安装目录的jars下
  2. 启动spark-shell,配置启动序列化参数
spark-shell --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer"
  1. 将题目中给的案例直接复制到shell中运行

在这里插入图片描述

欢迎一起交流,有问题欢迎指正!!

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
随着互联网的发展,数据的不断膨胀,从刚开始的关系型数据库到非关系型数据库,再到大数据技术,技术的不断演进最终是随着数据膨胀而不断改变,最初的数据仓库能解决我们的问题,但是随着时代发展,企业已经不满足于数据仓库,希望有更强大的技术来支撑数据的存储,包括结构化,非结构化的数据等,希望能够积累企业的数据,从中挖掘出更大的价值。基于这个背景,数据湖的技术应运而生。本课程基于真实的企业数据湖案例进行讲解,结合业务实现数据湖平台,让大家在实践中理解和掌握数据湖技术,未来数据湖的需求也会不断加大,希望同学们抓住这个机遇。项目中将以热门的互联网电商业务场景为案例讲解,具体分析指标包含:流量分析,订单分析,用户行为分析,营销分析,广告分析等,能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。Apache Hudi代表Hadoop Upserts anD Incrementals,管理大型分析数据集在HDFS上的存储。Hudi的主要目的是高效减少摄取过程中的数据延迟。Hudi的出现解决了现有hadoop体系的几个问题:1、HDFS的可伸缩性限制 2、需要在Hadoop中更快地呈现数据 3、没有直接支持对现有数据的更新和删除 4、快速的ETL和建模 5、要检索所有更新的记录,无论这些更新是添加到最近日期分区的新记录还是对旧数据的更新Hudi都允许用户使用最后一个检查点时间戳,此过程不用执行扫描整个源表的查询。 本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.9.0、HudiClickHouseHadoop2.7.5 Hbase2.2.6Kafka2.1.0 Hive2.2.0HDFS、MapReduceSpark、ZookeeperBinlog、Canal、MySQLSpringBoot2.0.2.RELEASE SpringCloud Finchley.RELEASEVue.js、Nodejs、HighchartsLinux Shell编程课程亮点: 1.与企业接轨、真实工业界产品 2.ClickHouse高性能列式存储数据库 3.大数据热门技术Flink4.Flink join 实战 5.Hudi数据湖技术6.集成指标明细查询 7.主流微服务后端系统 8.数据库实时同步解决方案 9.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS 10.集成SpringCloud实现统一整合方案 11.互联网大数据企业热门技术栈 12.支持海量数据的实时分析 13.支持全端实时数据分析 14.全程代码实操,提供全部代码和资料 15.提供答疑和提供企业技术方案咨询企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

do{a++b++}while(a&b)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值