Dynamic UDF Loading in Distributed In-Memory Computing

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing frameworks for distributed data processing, such as Apache Spark, lack dynamic extensibility, requiring recompilation and redeployment of code for new user-defined functions and operations, which is inefficient and limits column-level processing capabilities.

Innovation Solution

The introduction of additional data structures and modules at the central and remote nodes allows for dynamic loading and execution of user-built transformation operations during job execution, enabling users to compile and distribute Java code to remote nodes without recompiling existing modules, and supports user-defined functions (UDFs) for column-level processing within Spark SQL queries.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Productivity

If recompilation and redeployment of code is performed for new user-defined functions, then the framework maintains stability and reliability, but the productivity and adaptability deteriorate due to inefficient updates

Engineering Contradiction:
Improvespeed of adding new functionsVSAvoidsystem stability
Core Design Contradiction:
ProductivityVSReliability

Solution Approach 1:

The system dynamically loads user-defined functions into memory during runtime without requiring recompilation or redeployment. The UDF registry and class loaders enable the framework to adapt its functionality dynamically, allowing new functions to be added while the system is running, thus improving productivity while maintaining stability through controlled dynamic updates

Inventive Principle:
Principle #15Dynamics

Solution Approach 2:

User-defined functions are pre-compiled and registered in the UDF registry before execution. This preliminary registration allows the system to validate and cache function metadata in advance, enabling fast dynamic loading during runtime without compromising system reliability or requiring full recompilation when new functions are needed

Inventive Principle:
Principle #10Preliminary action

2Productivity

If core modules are rebuilt for new operations, then the framework maintains consistency, but the loss of time and productivity worsen

Engineering Contradiction:
Improveefficiency of adding operationsVSAvoidtime for rebuilding modules
Core Design Contradiction:
ProductivityVSLoss of time

Solution Approach 1:

The framework segments functionality into independent user-defined functions that can be developed, compiled, and registered separately. Each UDF is a self-contained unit that can be added to the registry without affecting other functions or core modules, eliminating the need to rebuild entire modules when adding new operations

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

The UDF registry serves as a universal mechanism that can store and manage any user-defined function regardless of its specific purpose. This multi-functional registry accepts diverse UDFs (scalar functions, aggregate functions, table-valued functions) through a common interface, allowing new operations to be added without modifying existing module structures

Inventive Principle:
Principle #6Universality (Multi-functionality)

3Adaptability or versatility

If the framework lacks dynamic extensibility, then the device complexity is reduced, but the adaptability and versatility worsen

Engineering Contradiction:
Improveextensibility of frameworkVSAvoidcomplexity of extension mechanism
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The UDF registry acts as an intermediary layer between user-defined functions and the execution engine. This registry stores function metadata, handles class loading, and manages function registration/unregistration, providing a standardized interface that simplifies the extension process while enabling high adaptability without directly complicating the core execution path

Inventive Principle:
Principle #24Intermediary (Mediator)

Solution Approach 2:

The framework uses Java's class loading mechanism to copy and load UDF classes into the runtime environment. Class loaders retrieve UDF implementations from external sources, validate them against the registry schema, and instantiate them without modifying the core framework code, thus enabling extensibility through standardized copying and loading processes

Inventive Principle:
Principle #26Copying

4Productivity

If user-defined functions are not cached in memory, then the loss of substance is reduced, but the productivity and speed of execution worsen

Engineering Contradiction:
Improveexecution speed of UDFsVSAvoidmemory consumption
Core Design Contradiction:
ProductivityVSQuantity of substance

Solution Approach 1:

User-defined functions are loaded into memory during runtime before execution. The class loading mechanism pre-loads UDF classes and compiles them into the JVM's method area, making them readily available for execution without repeated disk I/O operations, thus improving execution speed while managing memory usage through controlled loading

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The framework manages memory resources by loading UDFs into memory when needed and allowing the JVM's garbage collection to reclaim memory when functions are no longer required. This dynamic memory management enables fast execution of cached UDFs while preventing permanent memory consumption, balancing speed and resource usage

Inventive Principle:
Principle #34Discarding and recovering

Data Source

PatentUS10380137B2Technology for extensible in-memory computing
Publication Date: 2019.08.13 INTERNATIONAL BUSINESS MACHINE CORPORATION
  • US10380137B2 patent drawing
  • US10380137B2 patent drawing
  • US10380137B2 patent drawing

AI summary

A user-defined function (UDF) is received in a central Computer System, which causes registration of the UDF and distributes the UDF to a cluster of computer system nodes configured for performing, in volatile memory of the nodes, extract-transform-load processing of data cached in the volatile memory of the nodes. First and second job specifications that include the UDF are received by the central Computer System, and the central computer system distributes instructions for the job specifications to the nodes including at least one instruction that invokes the UDF for loading and executing the UDF in the volatile memory of at least one of the nodes during runtime of the jobs. The central Computer System does not cause registration of the UDF again after receiving the first job specification.