thrift out of memory

本文讨论了在使用 Java IO 实现时遇到的问题,导致无法通过 telnet 连接到 thrift 服务的端口。主要原因是 Java IO 实现存在 bug,不支持 telnet 功能。
不能telnet thrift 服务的端口,因为java io 实现 有 bug,不支持 telnet 
下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
176825 [HiveServer2-Handler-Pool: Thread-47] DEBUG org.apache.thrift.transport.TSaslTransport - writing data length: 42 176900 [HiveServer2-Handler-Pool: Thread-47] DEBUG org.apache.thrift.transport.TSaslTransport - SERVER: reading data length: 85 176900 [HiveServer2-Handler-Pool: Thread-47] DEBUG org.apache.hadoop.security.UserGroupInformation - PrivilegedAction [as: dashuju (auth:PROXY) via dashuju (auth:SIMPLE)][action: org.apache.hive.service.cli.session.HiveSessionProxy$1@54fa2166] java.lang.Exception at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1875) at org.apache.hive.service.cli.session.HiveSessionProxy.invoke(HiveSessionProxy.java:59) at com.sun.proxy.$Proxy39.getInfo(Unknown Source) at org.apache.hive.service.cli.CLIService.getInfo(CLIService.java:252) at org.apache.hive.service.cli.thrift.ThriftCLIService.GetInfo(ThriftCLIService.java:541) at org.apache.hive.service.rpc.thrift.TCLIService$Processor$GetInfo.getResult(TCLIService.java:1537) at org.apache.hive.service.rpc.thrift.TCLIService$Processor$GetInfo.getResult(TCLIService.java:1522) at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39) at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) at org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56) at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
05-26
### 分析 HiveServer2 Thrift TSaslTransport 日志中的 `java.lang.Exception` #### 背景介绍 HiveServer2 是 Apache Hive 提供的一个服务,允许客户端通过 JDBC/ODBC 接口访问 Hive 数据仓库。Thrift 协议被用于实现客户端和服务端之间的通信。TSaslTransport 则负责处理 SASL(Simple Authentication Security Layer)协议的安全传输层。当出现 `java.lang.Exception` 或类似的错误时,通常是由于配置问题、权限问题或底层网络异常引起的。 --- #### 常见的日志分析方向 ##### 1. **SASL 认证失败** 如果日志中显示类似于以下内容: ```plaintext javax.security.auth.login.LoginException: Unsupported authentication type CUSTEM ``` 表明认证类型不支持或者配置有误[^2]。这可能是由于 Hive 配置文件 (`hive-site.xml`) 中指定了无效的认证方式所致。 - 检查 `hive.server2.authentication` 参数是否正确设置为以下之一: ```xml <property> <name>hive.server2.authentication</name> <value>NOSASL|KERBEROS|LDAP|PAM|CUSTOM</value> </property> ``` - 若使用自定义认证(`CUSTOM`),则需要提供相应的类路径和实现逻辑。 ##### 2. **断开的管道 (Write failed)** 当日志中有如下提示时: ```plaintext java.net.SocketException: Broken pipe (Write failed) ``` 这表明客户端与服务器之间的连接突然中断,常见于以下场景: - 客户端过早关闭连接。 - 网络不稳定导致数据包丢失。 - 服务端资源耗尽(如内存溢出或线程池满)。 - 解决方法包括: - 增加超时时间参数: ```properties hive.execution.engine.timeout=3600s ``` - 减少单次请求的数据量,避免大查询引发性能瓶颈。 ##### 3. **ClassNotFoundException** 如果日志中存在类似以下信息: ```plaintext java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager ``` 这意味着某些依赖库缺失或版本冲突[^3]。例如,Impala JDBC 驱动可能依赖特定版本的 Log4j 库,而当前环境未满足该要求。 - 确保所有必要的 JAR 文件已正确部署到 `$HIVE_HOME/lib` 目录下。 - 使用工具检查依赖树是否有重复或冲突的库版本: ```bash mvn dependency:tree ``` ##### 4. **OutOfMemoryError 和 GC 异常** 在 Spark Thrift Server 场景下,如果频繁发生 OOM(Out Of Memory)错误,则需优化 JVM 堆大小及相关参数[^4]。 - 修改启动脚本 `/sbin/start-thriftserver.sh` 添加以下选项: ```bash export SPARK_DAEMON_MEMORY=8g export SPARK_EXECUTOR_MEMORY=16g ``` - 并在配置文件中调整垃圾回收策略: ```properties spark.executor.extraJavaOptions=-XX:+UseG1GC -XX:MaxGCPauseMillis=200 ``` --- #### 示例代码片段 以下是针对 HiveServer2 启用调试模式的操作示例: ```bash # 开启 HiveServer2 Debug 日志级别 $ bin/hiveserver2 --hiveconf hive.root.logger=DEBUG,console & ``` 运行后可查看控制台输出更多详细的上下文信息,便于定位具体问题。 对于 Kerberos 认证场景,可以测试票据有效性: ```bash kinit -kt /path/to/keytab username klist ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值