This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/paimon-python.git
The following commit(s) were added to refs/heads/main by this push:
new 6581f65 Remove flink-shaded-hadoop-2-uber in java-bridge (#14)
6581f65 is described below
commit 6581f65877145976d4f761b7ea75848f1c24a4a7
Author: yuzelin <[email protected]>
AuthorDate: Wed Oct 9 14:04:55 2024 +0800
Remove flink-shaded-hadoop-2-uber in java-bridge (#14)
---
paimon_python_java/gateway_server.py | 26 ++++++++++++++++++----
.../paimon-python-java-bridge/pom.xml | 8 -------
paimon_python_java/tests/test_data_types.py | 6 ++++-
paimon_python_java/tests/test_write_and_read.py | 11 ++++++---
.../{util/constants.py => tests/utils.py} | 26 +++++++++++++++-------
paimon_python_java/util/constants.py | 1 +
6 files changed, 54 insertions(+), 24 deletions(-)
diff --git a/paimon_python_java/gateway_server.py
b/paimon_python_java/gateway_server.py
index 31933e2..fc05ddc 100644
--- a/paimon_python_java/gateway_server.py
+++ b/paimon_python_java/gateway_server.py
@@ -79,12 +79,30 @@ _JAVA_BRIDGE = 'paimon-python-java-bridge'
def _get_classpath(env):
- user_defined = env.get(constants.PYPAIMON_JAVA_CLASSPATH)
+ classpath = []
module = importlib.import_module(_JAVA_IMPL_MODULE)
builtin_java_bridge = os.path.join(*module.__path__, _JAVA_DEPS,
_JAVA_BRIDGE + '.jar')
+ classpath.append(builtin_java_bridge)
- if user_defined is None:
- return builtin_java_bridge
+ # user defined
+ if constants.PYPAIMON_JAVA_CLASSPATH in env:
+ classpath.append(env[constants.PYPAIMON_JAVA_CLASSPATH])
+
+ # hadoop
+ hadoop_classpath = _get_hadoop_classpath(env)
+ if hadoop_classpath is not None:
+ classpath.append(hadoop_classpath)
+
+ return os.pathsep.join(classpath)
+
+
+def _get_hadoop_classpath(env):
+ if constants.PYPAIMON_HADOOP_CLASSPATH in env:
+ return env[constants.PYPAIMON_HADOOP_CLASSPATH]
+
+ if 'HADOOP_CLASSPATH' in env:
+ return None
else:
- return os.pathsep.join([builtin_java_bridge, user_defined])
+ raise EnvironmentError(f"You haven't set
'{constants.PYPAIMON_HADOOP_CLASSPATH}', \
+ and 'HADOOP_CLASSPATH' is also not set. Ensure one of them is set.")
diff --git a/paimon_python_java/paimon-python-java-bridge/pom.xml
b/paimon_python_java/paimon-python-java-bridge/pom.xml
index 7fe5858..52bc061 100644
--- a/paimon_python_java/paimon-python-java-bridge/pom.xml
+++ b/paimon_python_java/paimon-python-java-bridge/pom.xml
@@ -30,7 +30,6 @@
<properties>
<paimon.version>0.9.0</paimon.version>
- <flink.shaded.hadoop.version>2.8.3-10.0</flink.shaded.hadoop.version>
<py4j.version>0.10.9.7</py4j.version>
<slf4j.version>1.7.32</slf4j.version>
<log4j.version>2.17.1</log4j.version>
@@ -68,12 +67,6 @@
<version>${log4j.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.flink</groupId>
- <artifactId>flink-shaded-hadoop-2-uber</artifactId>
- <version>${flink.shaded.hadoop.version}</version>
- </dependency>
-
<dependency>
<groupId>org.apache.arrow</groupId>
<artifactId>arrow-vector</artifactId>
@@ -178,7 +171,6 @@
<include>com.google.flatbuffers:flatbuffers-java</include>
<include>org.slf4j:slf4j-api</include>
<include>org.apache.logging.log4j:log4j-1.2-api</include>
-
<include>org.apache.flink:flink-shaded-hadoop-2-uber</include>
<include>net.sf.py4j:py4j</include>
</includes>
</artifactSet>
diff --git a/paimon_python_java/tests/test_data_types.py
b/paimon_python_java/tests/test_data_types.py
index 72a4587..3920cd2 100644
--- a/paimon_python_java/tests/test_data_types.py
+++ b/paimon_python_java/tests/test_data_types.py
@@ -24,9 +24,9 @@ import tempfile
import pyarrow as pa
import unittest
-
from paimon_python_api import Schema
from paimon_python_java import Catalog
+from paimon_python_java.tests import utils
from paimon_python_java.util import java_utils
from setup_utils import java_setuputils
@@ -36,6 +36,8 @@ class DataTypesTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
java_setuputils.setup_java_bridge()
+ cls.hadoop_path = tempfile.mkdtemp()
+ utils.setup_hadoop_bundle_jar(cls.hadoop_path)
cls.warehouse = tempfile.mkdtemp()
cls.simple_pa_schema = pa.schema([
('f0', pa.int32()),
@@ -47,6 +49,8 @@ class DataTypesTest(unittest.TestCase):
@classmethod
def tearDownClass(cls):
java_setuputils.clean()
+ if os.path.exists(cls.hadoop_path):
+ shutil.rmtree(cls.hadoop_path)
if os.path.exists(cls.warehouse):
shutil.rmtree(cls.warehouse)
diff --git a/paimon_python_java/tests/test_write_and_read.py
b/paimon_python_java/tests/test_write_and_read.py
index cd2bd0e..593fe7e 100644
--- a/paimon_python_java/tests/test_write_and_read.py
+++ b/paimon_python_java/tests/test_write_and_read.py
@@ -22,20 +22,23 @@ import tempfile
import unittest
import pandas as pd
import pyarrow as pa
-import setup_utils.java_setuputils as setuputils
from paimon_python_api import Schema
from paimon_python_java import Catalog
from paimon_python_java.java_gateway import get_gateway
+from paimon_python_java.tests import utils
from paimon_python_java.util import java_utils
from py4j.protocol import Py4JJavaError
+from setup_utils import java_setuputils
class TableWriteReadTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
- setuputils.setup_java_bridge()
+ java_setuputils.setup_java_bridge()
+ cls.hadoop_path = tempfile.mkdtemp()
+ utils.setup_hadoop_bundle_jar(cls.hadoop_path)
cls.warehouse = tempfile.mkdtemp()
cls.simple_pa_schema = pa.schema([
('f0', pa.int32()),
@@ -46,7 +49,9 @@ class TableWriteReadTest(unittest.TestCase):
@classmethod
def tearDownClass(cls):
- setuputils.clean()
+ java_setuputils.clean()
+ if os.path.exists(cls.hadoop_path):
+ shutil.rmtree(cls.hadoop_path)
if os.path.exists(cls.warehouse):
shutil.rmtree(cls.warehouse)
diff --git a/paimon_python_java/util/constants.py
b/paimon_python_java/tests/utils.py
similarity index 61%
copy from paimon_python_java/util/constants.py
copy to paimon_python_java/tests/utils.py
index 00f419c..2af2fe0 100644
--- a/paimon_python_java/util/constants.py
+++ b/paimon_python_java/tests/utils.py
@@ -16,12 +16,22 @@
# limitations under the License.
################################################################################
-# ---------------------------- for env var ----------------------------
-PYPAIMON_CONN_INFO_PATH = '_PYPAIMON_CONN_INFO_PATH'
-PYPAIMON_JVM_ARGS = '_PYPAIMON_JVM_ARGS'
-PYPAIMON_JAVA_CLASSPATH = '_PYPAIMON_JAVA_CLASSPATH'
-PYPAIMON_MAIN_CLASS = 'org.apache.paimon.python.PythonGatewayServer'
-PYPAIMON_MAIN_ARGS = '_PYPAIMON_MAIN_ARGS'
+import os
+import urllib.request
-# ------------------------ for catalog options ------------------------
-MAX_WORKERS = "max-workers"
+from paimon_python_java.util import constants
+
+
+def setup_hadoop_bundle_jar(hadoop_dir):
+ url = 'https://repo.maven.apache.org/maven2/org/apache/flink/' \
+
'flink-shaded-hadoop-2-uber/2.8.3-10.0/flink-shaded-hadoop-2-uber-2.8.3-10.0.jar'
+
+ response = urllib.request.urlopen(url)
+ if not os.path.exists(hadoop_dir):
+ os.mkdir(hadoop_dir)
+
+ jar_path = os.path.join(hadoop_dir, "bundled-hadoop.jar")
+ with open(jar_path, 'wb') as file:
+ file.write(response.read())
+
+ os.environ[constants.PYPAIMON_HADOOP_CLASSPATH] = jar_path
diff --git a/paimon_python_java/util/constants.py
b/paimon_python_java/util/constants.py
index 00f419c..1039de2 100644
--- a/paimon_python_java/util/constants.py
+++ b/paimon_python_java/util/constants.py
@@ -20,6 +20,7 @@
PYPAIMON_CONN_INFO_PATH = '_PYPAIMON_CONN_INFO_PATH'
PYPAIMON_JVM_ARGS = '_PYPAIMON_JVM_ARGS'
PYPAIMON_JAVA_CLASSPATH = '_PYPAIMON_JAVA_CLASSPATH'
+PYPAIMON_HADOOP_CLASSPATH = '_PYPAIMON_HADOOP_CLASSPATH'
PYPAIMON_MAIN_CLASS = 'org.apache.paimon.python.PythonGatewayServer'
PYPAIMON_MAIN_ARGS = '_PYPAIMON_MAIN_ARGS'