美文网首页玩转大数据spark程序员
通过 Spark thriftserver 操作Hudi表

通过 Spark thriftserver 操作Hudi表

作者: AlienPaul | 来源:发表于2022-11-21 16:21 被阅读0次

    背景

    本篇主要讲解如何配置Spark thriftserver,从而可以使用JDBC方式通过Spark thriftserver操作Hudi表。

    博主的环境信息:

    • Spark 3.1.1
    • Hive 3.1.0
    • Hadoop 3.1.1
    • Hudi 0.11.1

    环境准备

    首先,我们需要编译Hudi。然后找到编译后输出的hudi-spark3.1-bundle_2.12-0.11.1.jarhudi-hadoop-mr-bundle-0.11.1.jar,复制到$SPARK_HOME/jars中。

    找一台已经安装了maven的服务器。执行:

    git clone https://github.com/apache/hudi.git
    

    源代码clone成功之后,切换分支到origin/release-0.11.1。接着执行编译命令(Scala版本和Spark版本需要和实际使用的Spark一致):

    mvn clean package -Dspark3.1 -Dscala2.12 -DskipTests -T 4
    

    编译输出产物位于hudi/packaging/中。

    接下来集成Hive配置。如果Spark还没有集成Hive metastore配置的话,需要将hive-site.xml复制到$SPARK_HOME/conf目录中。

    最后使用如下命令启动Spark thriftserver:

    $SPARK_HOME/sbin/start-thriftserver.sh \
    --jars /path/to/hudi-spark3.1-bundle_2.12-0.11.1.jar \
    --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
    --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension \
    --hiveconf hive.aux.jars.path=/path/to/hudi-hadoop-mr-bundle-0.11.1.jar \
    --hiveconf hive.metastore.schema.verification=false \
    --hiveconf datanucleus.schema.autoCreateAll=true
    

    --jars /path/to/hudi-spark3.1-bundle_2.12-0.11.1.jar--hiveconf hive.aux.jars.path=/path/to/hudi-hadoop-mr-bundle-0.11.1.jar需要替换为jar包真实存放路径。前面将这两个jar放置到了$SPARK_HOME/jars中,可以不添加这两个配置。

    以上配置是根据本人在GitHub上的提问[SUPPORT] Cannot create table via Spark thrift server · Issue #6185 · apache/hudi (github.com)的解答得知。Thriftserver的这些启动参数不全是必需的。实测时候不可缺少的参数是这两个:

    --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
    --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension \
    

    执行后有如下提示信息:

    starting org.apache.spark.sql.hive.thriftserver.HiveThriftServer2, logging to /var/log/spark3/spark-hdfs-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-xxx.out
    

    根据提示,我们可以查看启动时候的日志文件:

    tail -f /var/log/spark3/spark-hdfs-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-xxx.out
    

    如果没有报错,说明启动成功。

    最常见的错误为没有权限访问HDFS。需要配置启动Spark thriftserver用户访问HDFS的权限(通过Ranger),或者换一个有权限的用户启动thriftserver。

    如果需要修改thriftserver的端口号和bind host,可以在启动thriftserver的命令行添加如下配置:

    --hiveconf hive.server2.thrift.port=<listening-port> \
    --hiveconf hive.server2.thrift.bind.host=<listening-host> \
    

    验证

    $SPARK_HOME/bin/beeline --hiveconf hive.input.format=org.apache.hudi.hadoop.HoodieParquetInputFormat -u jdbc:hive2://thriftserver-ip:10000/default
    

    注意:jdbc连接字符串中的thriftserver-ip为thriftserver所在机器的IP或hostname,后面的10000为端口号。使用的时候需要替换为真实值。

    进入beeline命令行后可以执行建表,插入数据和查询语句。可以正常操作Hudi表。

    附录

    如果使用了Ambari管理Spark thriftserver,为了修改启动参数,可以自定义spark3-thrift-server-conf配置项,增加:

    • spark.serializer=org.apache.spark.serializer.KryoSerializer
    • spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension

    两个自定义配置。然后重启Spark thriftserver。

    参考资料

    Spark 官方 Thriftserver 文档

    相关文章

      网友评论

        本文标题:通过 Spark thriftserver 操作Hudi表

        本文链接:https://www.haomeiwen.com/subject/kernxdtx.html