• 猿创征文|大数据bug笔记之利用Hudi将数据落地到HDFS


    前言:遇到困难,旁边有大佬一定要问!!!(当然,如果觉得自己能解决就自己解决吧!!!)你怎么也解决不了的问题,在别人看来只是看一眼就能解决的问题!一个小问题卡了一天,还好在中秋前一天解决了,能够过一个快乐的中秋节了!!!祝大家中秋节快乐,都吃上好吃的大月饼!!!

    进入正题
    需求:通过Spark消费Kafka的数据并进行处理,将用户的行为数据和基本信息数据分类,使用Hudi存储并同步Hive表,生成两张表。

    报错情况

    执行代码,报出如下错误:

    在这里插入图片描述

    Exception in thread "main" org.apache.spark.sql.streaming.StreamingQueryException: Cannot create hive connection jdbc:hive2://192.168.109.101:10000/
    === Streaming Query ===
    Identifier: [id = 454bfb83-c6a7-4f3e-88f1-4cf18a631c61, runId = e0300265-62bf-4795-8ea1-ad1025477296]
    Current Committed Offsets: {KafkaV2[Subscribe[news]]: {"news":{"2":316,"1":308,"0":268}}}
    Current Available Offsets: {KafkaV2[Subscribe[news]]: {"news":{"2":316,"1":309,"0":268}}}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    org.apache.spark.sql.streaming.StreamingQueryException: Cannot create hive connection jdbc:hive2: //192.168.109.101:10000/😦

    乍一看,就是不能远程连接hive,它确实也就是不能连接。

    思路一

    首先

    ,考虑不能连接是否节点没开启,所以
    开启hive元数据

    hive --service matestore &
    
    • 1

    开启远程连接hiveserver2

    hive --service hiveserver2	
    或直接
    hiveserver2
    
    • 1
    • 2
    • 3

    再次打开一个虚拟机界面
    jps检查节点是否开启。

    第二步

    (其他博主那里借鉴的一点解决思路),检查pom文件中的依赖,看hive-jdbc版本是否匹配
    在这里插入图片描述
    检查resources下的.xml文件,是否配置齐全
    在这里插入图片描述

    第三步

    ,检查参数是否配置正确(如下图所示)
    在这里插入图片描述

    在这里插入图片描述
    以上三步(启动节点、检查配置文件、检查启动参数)都没问题了,再次执行代码,结果还是不能连接;
    既然这样连不上,换个方式连接试试。

    思路二

    (步骤如下图)
    在项目右边点击Database连接到hive,看是否能够建立连接
    在这里插入图片描述
    点击+
    在这里插入图片描述
    选择Data Source,再选择Apache Hive
    在这里插入图片描述

    这里填写连接信息,Name填写随意,Host填写IP地址,User和Password根据自己设定的填写,端口默认10000,最后点击Test Connection测试能否连接到hive,这里结果显示能够连上,同时这里也会显示Hive JDBC的版本。
    在这里插入图片描述
    做到这里,我就纳闷了,难道是代码有问题?继而检查代码,最后也没发现啥问题…
    最后的最后,只能报最后的希望寄托到老师身上,当然老师也从没让人失望,看了一眼报错就判断出了问题所在。

    问题所在

    报错信息太多没仔细看后面的一长串,下面是详细问题描述:

    Required field ‘serverProtocolVersion’ is unset!

    [*org.apache.hive.service.cli.HiveSQLException:Failed to open new session:

    org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=EXECUTE, inode=“/tmp”:root:supergroup:dr–r–r–

    在这里插入图片描述

    Caused by: java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.109.101:10000: Could not establish connection to jdbc:hive2://192.168.109.101:10000: Required field 'serverProtocolVersion' is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:ERROR_STATUS, infoMessages:[*org.apache.hive.service.cli.HiveSQLException:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=EXECUTE, inode="/tmp":root:supergroup:dr--r--r--
    
    • 1

    在这里插入图片描述

    Caused by: java.sql.SQLException: Could not establish connection to jdbc:hive2://192.168.109.101:10000: Required field 'serverProtocolVersion' is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:ERROR_STATUS, infoMessages:[*org.apache.hive.service.cli.HiveSQLException:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=EXECUTE, inode="/tmp":root:supergroup:dr--r--r--
    
    • 1

    总而言之,言而总之,就是HDFS中的文件权限不够。所以,困了我一天的问题,就是这么一个不起眼的小问题:(
    操作:

    hdfs dfs -chmod 777 /tmp
    
    • 1

    再次执行代码,不出意外的成功运行,进入hive,查询库、表、数据,数据成功落地!!!
    在这里插入图片描述
    谨以此篇,警醒自己认真分析报错信息(可能还是解决不了…)

  • 相关阅读:
    java各种异常总结
    JS力扣刷题经典100题——寻找两个正序数组的中位数
    Effctive C++
    Nginx+Lua+OpenResty(详解及使用)
    js的继承
    SpringCloud微服务(一)——Consul服务注册中心
    MongoDB 使用账号密码在navicat登录
    隐藏微信网页右上角的按钮、在微信网页中获取用户的网络状态,支付等
    【OpenSSL】VC编译OpenSSL
    附下载,《数据传输安全白皮书》上新,90页详解安全策略
  • 原文地址:https://blog.csdn.net/Mr_Ren_0_1/article/details/126788620