编译hudi操作记录

目录

修改组件版本

修改源码兼容hadoop3

手动安装kafka依赖

解决spark模块依赖冲突

1)修改hudi-spark-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:

2)修改hudi-utilities-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:

编译过程中的报错及操作


hudi官方文档详见:Overview | Apache Hudi

编译hudi操作记录_第1张图片

 

修改组件版本

hudi项目clone到本地,拉取0.12.0分支,修改最外层pom文件,更改各组件版本如下

hadoop 3.0.0-cdh6.3.1
hive 2.1.1-cdh6.3.1
spark 2.4.0-cdh6.3.1
flink 1.14.3
hudi 0.12.0

编译hudi操作记录_第2张图片

 

修改源码兼容hadoop3

org.apache.hudi.common.table.log.block.HoodieParquetDataBlock 的110行,添加第二个参数null

 

手动安装kafka依赖

重新编译hudi需要的kafka依赖如下:

  • common-config-5.3.4.jar
  • common-utils-5.3.4.jar
  • kafka-avro-serializer-5.3.4.jar
  • kafka-schema-registry-client-5.3.4.jar

 下载链接:http://packages.confluent.io/archive/5.3/confluent-5.3.4-2.12.zip

安装到本地库

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

解决spark模块依赖冲突

1)修改hudi-spark-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:

hudi/packaging/hudi-spark-bundle/pom.xml,在382行的位置,修改如下


    
      ${hive.groupid}
      hive-service
      ${hive.version}
      ${spark.bundle.hive.scope}
      
        
          guava
          com.google.guava
        
        
          org.eclipse.jetty
          *
        
        
          org.pentaho
          *
        
      
    

    
      ${hive.groupid}
      hive-service-rpc
      ${hive.version}
      ${spark.bundle.hive.scope}
    

    
      ${hive.groupid}
      hive-jdbc
      ${hive.version}
      ${spark.bundle.hive.scope}
      
        
          javax.servlet
          *
        
        
          javax.servlet.jsp
          *
        
        
          org.eclipse.jetty
          *
        
      
    

    
      ${hive.groupid}
      hive-metastore
      ${hive.version}
      ${spark.bundle.hive.scope}
      
        
          javax.servlet
          *
        
        
          org.datanucleus
          datanucleus-core
        
        
          javax.servlet.jsp
          *
        
        
          guava
          com.google.guava
        
      
    

    
      ${hive.groupid}
      hive-common
      ${hive.version}
      ${spark.bundle.hive.scope}
      
        
          org.eclipse.jetty.orbit
          javax.servlet
        
        
          org.eclipse.jetty
          *
        
      


    
    
      org.eclipse.jetty
      jetty-server
      ${jetty.version}
    
    
      org.eclipse.jetty
      jetty-util
      ${jetty.version}
    
    
      org.eclipse.jetty
      jetty-webapp
      ${jetty.version}
    
    
      org.eclipse.jetty
      jetty-http
      ${jetty.version}
    

2)修改hudi-utilities-bundle的pom文件,排除低版本jetty,添加hudi指定版本的jetty:

hudi/packaging/hudi-utilities-bundle/pom.xml,在345行的位置,修改如下:


    
      org.apache.hudi
      hudi-common
      ${project.version}
      
        
          org.eclipse.jetty
          *
        
      
    
    
      org.apache.hudi
      hudi-client-common
      ${project.version}
      
        
          org.eclipse.jetty
          *
        
      
    



    
      ${hive.groupid}
      hive-service
      ${hive.version}
      ${utilities.bundle.hive.scope}
      
		
          servlet-api
          javax.servlet
        
        
          guava
          com.google.guava
        
        
          org.eclipse.jetty
          *
        
        
          org.pentaho
          *
        
      
    

    
      ${hive.groupid}
      hive-service-rpc
      ${hive.version}
      ${utilities.bundle.hive.scope}
    

    
      ${hive.groupid}
      hive-jdbc
      ${hive.version}
      ${utilities.bundle.hive.scope}
      
        
          javax.servlet
          *
        
        
          javax.servlet.jsp
          *
        
        
          org.eclipse.jetty
          *
        
      
    

    
      ${hive.groupid}
      hive-metastore
      ${hive.version}
      ${utilities.bundle.hive.scope}
      
        
          javax.servlet
          *
        
        
          org.datanucleus
          datanucleus-core
        
        
          javax.servlet.jsp
          *
        
        
          guava
          com.google.guava
        
      
    

    
      ${hive.groupid}
      hive-common
      ${hive.version}
      ${utilities.bundle.hive.scope}
      
        
          org.eclipse.jetty.orbit
          javax.servlet
        
        
          org.eclipse.jetty
          *
        
      


    
    
      org.eclipse.jetty
      jetty-server
      ${jetty.version}
    
    
      org.eclipse.jetty
      jetty-util
      ${jetty.version}
    
    
      org.eclipse.jetty
      jetty-webapp
      ${jetty.version}
    
    
      org.eclipse.jetty
      jetty-http
      ${jetty.version}
    

编译过程中的报错及操作

指定版本执行编译命令

mvn clean package -DskipTests -Dspark2.4.0 -Dflink1.14 -Dscala-2.12 -Dhadoop.version=3.0.0 -Pflink-bundle-shade-hive2

报错如下:

无法将类 org.apache.zookeeper.server.ZooKeeperServer中的方法 shutdown应用到给定类型

将hadoop、spark版本指定为cdh版本,重新编译  

mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.12 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2

报错如下:

cdh的包找不到,没有Scala2.12的包

 更改Scala版本为2.11,重新编译

mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2

报错如下:

[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.3.1:compile (scala-compile-first) on project hudi-spark-common_2.11: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) -> [Help 1]

 往上查日志,发现error信息

编译hudi操作记录_第3张图片

 注释掉org.apache.hudi.DataSourceReadOptions的部分代码

编译hudi操作记录_第4张图片

注释掉org.apache.hudi.HoodieBaseRelation的部分代码  

编译hudi操作记录_第5张图片

 

 

重新编译

mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2

 报错如下:

 error: polymorphic expression cannot be instantiated to expected type
 ......
 required: Seq[org.apache.spark.sql.execution.datasources.PartitionedFile]

编译hudi操作记录_第6张图片

修改org.apache.spark.sql.adapter.Spark2Adapter的部分源码

编译hudi操作记录_第7张图片

 

重新编译

mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2

 

报错如下:

JSONException未处理

编译hudi操作记录_第8张图片

修改org.apache.hudi.utilities.sources.helpers.S3EventsMetaSelector的部分源码,增加try catch  

编译hudi操作记录_第9张图片

编译hudi操作记录_第10张图片

 

重新编译

mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2

 

报错如下:

同样是JSONException未处理

编译hudi操作记录_第11张图片

编译hudi操作记录_第12张图片

 

编译hudi操作记录_第13张图片

 

修改部分源码,增加try catch

重新编译

mvn clean package -DskipTests -Dspark2.4.0-cdh6.3.1 -Dflink1.14 -Dscala-2.11 -Dhadoop.version=3.0.0-cdh6.3.1 -Pflink-bundle-shade-hive2

 编译成功

编译hudi操作记录_第14张图片

 

参考:

Hudi集成CDH – 时光如水

0871-6.3.2-如何基于CDH6环境编译Hudi-0.9.0并使用 - 腾讯云开发者社区-腾讯云

整合Apache Hudi+Mysql+FlinkCDC2.1+CDH6.3.0_江南独孤客的技术博客_51CTO博客

你可能感兴趣的:(大数据,hive,hadoop,flink)