Jingxuan Fu created HIVE-26213:
----------------------------------
Summary: "hive.limit.pushdown.memory.usage" better not be equal to
1.0, otherwise it will raise an error
Key: HIVE-26213
URL: https://issues.apache.org/jira/browse/HIVE-26213
Project: Hive
Issue Type: Bug
Affects Versions: 3.1.2
Environment: Hive 3.1.2
os.name=Linux
os.arch=amd64
os.version=5.4.0-72-generic
java.version=1.8.0_162
java.vendor=Oracle Corporation
Reporter: Jingxuan Fu
Assignee: Jingxuan Fu
In hive-default.xml.template
{code:java}
<property> <name>hive.limit.pushdown.memory.usage</name> <value>0.1</value>
<description> Expects value between 0.0f and 1.0f. The fraction of available
memory to be used for buffering rows in Reducesink operator for limit pushdown
optimization. </description> </property>
{code}
Based on the description of hive-default.xml.template,
hive.limit.pushdown.memory.usage expects a value between 0.0 and 1.0, setting
hive.limit.pushdown.memory.usage to 1.0 means that it expects the available
memory of all buffered lines for the limit pushdown optimization, and
successfully start hiveserver2.
Then, call the java api to write a program to establish a jdbc connection as a
client to access hive, using JDBCDemo as an example.
{code:java}
import demo.utils.JDBCUtils; public class JDBCDemo{ public static void
main(String[] args) throws Exception { JDBCUtils.init();
JDBCUtils.createDatabase(); JDBCUtils.showDatabases();
JDBCUtils.createTable(); JDBCUtils.showTables(); JDBCUtils.descTable();
JDBCUtils.loadData(); JDBCUtils.selectData(); JDBCUtils.countData();
JDBCUtils.dropDatabase(); JDBCUtils.dropTable(); JDBCUtils.destory(); } }
{code}
After running the client program, both the client and the hiveserver throw
exceptions.
{code:java}
2022-05-09 19:05:36: Starting HiveServer2 SLF4J: Class path contains multiple
SLF4J bindings. SLF4J: Found binding in
[jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
explanation. SLF4J: Actual binding is of type
[org.apache.logging.slf4j.Log4jLoggerFactory] Hive Session ID =
67a6db8d-f957-4d5d-ac18-28403adab7f3 Hive Session ID =
f9f8772c-5765-4c3e-bcff-ca605c667be7 OK OK OK OK OK OK OK Loading data to table
default.emp OK FAILED: SemanticException Invalid memory usage value 1.0 for
hive.limit.pushdown.memory.usage{code}
{code:java}
liky@ljq1:~/hive_jdbc_test$ ./startJDBC_0.sh SLF4J: Class path contains
multiple SLF4J bindings. SLF4J: Found binding in
[jar:file:/home/liky/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.17.1/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/home/liky/.m2/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
explanation. SLF4J: Actual binding is of type
[org.apache.logging.slf4j.Log4jLoggerFactory] Running: drop database if exists
hive_jdbc_test Running: create database hive_jdbc_test Running: show databases
default hive_jdbc_test Running: drop table if exists emp Running: create table
emp( empno int, ename string, job string, mgr int, hiredate string, sal double,
comm double, deptno int ) row format delimited fields terminated by '\t'
Running: show tables emp Running: desc emp empno int ename string job string
mgr int hiredate string sal double comm double deptno int Running: load data
local inpath '/home/liky/hiveJDBCTestData/data.txt' overwrite into table emp
Running: select * from emp Exception in thread "main"
org.apache.hive.service.cli.HiveSQLException: Error while compiling statement:
FAILED: SemanticException Invalid memory usage value 1.0 for
hive.limit.pushdown.memory.usage at
org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:380) at
org.apache.hive.jdbc.Utils.verifySuccessWithInfo(Utils.java:366) at
org.apache.hive.jdbc.HiveStatement.runAsyncOnServer(HiveStatement.java:354) at
org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:293) at
org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:509) at
demo.utils.JDBCUtils.selectData(JDBCUtils.java:98) at
demo.test.JDBCDemo.main(JDBCDemo.java:19){code}
Setting hive.limit.pushdown.memory.usage to 0.0 has no exception.
So, setting hive.limit.pushdown.memory.usage to 1.0 is not desirable,
*hive-default.xml.template is not clear enough for the description of the
boundary of the value, it is better to use the interval to indicate the value
that is [0.0,1.0).*
--
This message was sent by Atlassian Jira
(v8.20.7#820007)