Tous les produits
Search
Centre de documentation

MaxCompute:Java sandbox

Dernière mise à jour :Sep 20, 2026

MaxCompute exécute les tâches MapReduce et les fonctions définies par l'utilisateur (UDF) en mode distribué au sein d'un sandbox Java. Ce mécanisme garantit que votre code traite uniquement les données qu'il reçoit et renvoie un résultat, sans accéder au système sous-jacent ni provoquer d'effets secondaires. Cette isolation assure la sécurité de l'exécution distribuée entre les tâches concurrentes.

Le sandbox s'applique uniquement au code des tâches MapReduce et aux UDF exécutées en mode distribué. La fonction principale MapReduce n'est pas soumise à ces restrictions.

Restrictions

Le sandbox bloque six catégories d'opérations. Pour chaque catégorie, une alternative est proposée lorsqu'elle existe.

Catégorie Restriction Alternative
Accès aux fichiers locaux Les opérations d'E/S directes sur les fichiers sont interdites. Accédez aux fichiers de ressources, aux packages JAR et aux tables de ressources via les API MaxCompute MapReduce ou MaxCompute Graph. Consultez les journaux écrits dans System.out et System.err à l'aide de la commande Log sur le client MaxCompute.
Système de fichiers distribué L'accès direct aux systèmes de fichiers distribués est interdit. Utilisez MaxCompute MapReduce ou MaxCompute Graph pour lire et écrire dans les tables.
JNI Les appels à l'interface native Java (JNI) sont interdits. —
Threads La création de threads Java est interdite. L'exécution de commandes Linux depuis des sous-threads est impossible. —
Accès réseau Toutes les opérations réseau sont interdites, y compris l'obtention des adresses IP locales. —
Réflexion Java L'autorisation suppressAccessChecks n'est pas accordée. Les champs privés et les méthodes privées ne peuvent pas être rendus accessibles. —

API restreintes

L'appel de l'une des méthodes ou de l'un des constructeurs suivants déclenche une exception access denied. Cette liste couvre toutes les API bloquées par le sandbox.

E/S de fichiers

java.io.File

delete()
deleteOnExit()
exists()
canRead()
isFile()
isDirectory()
isHidden()
lastModified()
length()
list()
list(FilenameFilter filter)
listFiles()
listFiles(FilenameFilter filter)
listFiles(FileFilter filter)
canWrite()
createNewFile()
createTempFile(String prefix, String suffix)
createTempFile(String prefix, String suffix, File directory)
mkdir()
mkdirs()
renameTo(File dest)
setLastModified(long time)
setReadOnly()

java.io.RandomAccessFile

RandomAccessFile(String name, String mode)
RandomAccessFile(File file, String mode)

java.io.FileInputStream

FileInputStream(FileDescriptor fdObj)
FileInputStream(String name)
FileInputStream(File file)

java.io.FileOutputStream

FileOutputStream(FileDescriptor fdObj)
FileOutputStream(File file)
FileOutputStream(String name)
FileOutputStream(String name, boolean append)

Chargement de classes et exécution

java.lang.Class

getProtectionDomain()

java.lang.ClassLoader

ClassLoader()
ClassLoader(ClassLoader parent)

java.lang.Runtime

exec(String command)
exec(String command, String[] envp)
exec(String[] cmdarray)
exec(String[] cmdarray, String[] envp)
exit(int status)
runFinalizersOnExit(boolean value)
addShutdownHook(Thread hook)
removeShutdownHook(Thread hook)
load(String lib)
loadLibrary(String lib)

java.lang.System

exit(int status)
runFinalizersOnExit(boolean value)
load(String filename)
loadLibrary(String libname)
getProperties()
setProperties(Properties props)
getProperty(String key)           // Only the keys listed below are allowed
getProperty(String key, String def) // Only the keys listed below are allowed
setProperty(String key, String value)
setIn(InputStream in)
setOut(PrintStream out)
setErr(PrintStream err)
setSecurityManager(SecurityManager s)

La méthode System.getProperty n'autorise que les clés suivantes :

java.version
java.vendor
java.vendor.url
java.class.version
os.name
os.version
os.arch
file.separator
path.separator
line.separator
java.specification.version
java.specification.vendor
java.specification.name
java.vm.specification.version
java.vm.specification.vendor
java.vm.specification.name
java.vm.version
java.vm.vendor
java.vm.name
file.encoding
user.timezone

Threads

java.lang.Thread

Thread()
Thread(Runnable target)
Thread(String name)
Thread(Runnable target, String name)
Thread(ThreadGroup group, ...)
checkAccess()
interrupt()
suspend()
resume()
setPriority(int newPriority)
setName(String name)
setDaemon(boolean on)
stop()
stop(Throwable obj)
enumerate(Thread[] tarray)
setContextClassLoader(ClassLoader cl)

java.lang.ThreadGroup

ThreadGroup(String name)
ThreadGroup(ThreadGroup parent, String name)
checkAccess()
enumerate(Thread[] list)
enumerate(Thread[] list, boolean recurse)
enumerate(ThreadGroup[] list)
enumerate(ThreadGroup[] list, boolean recurse)
getParent()
setDaemon(boolean daemon)
setMaxPriority(int pri)
suspend()
resume()
destroy()
interrupt()
stop()

Réflexion

java.lang.reflect.AccessibleObject

setAccessible(AccessibleObject[] array, boolean flag)
setAccessible(boolean flag)

Réseau

java.net.InetAddress

getHostName()
getAllByName(String host)
getLocalHost()

java.net.DatagramSocket

DatagramSocket(...)
getLocalAddress()
receive(DatagramPacket p)

java.net.Socket

Socket(...)

java.net.ServerSocket

ServerSocket(...)
accept()
implAccept(Socket s)
setSocketFactory(...)
setSocketImplFactory(...)

java.net.MulticastSocket

MulticastSocket(...)

java.net.URL

URL(...)
setURLStreamHandlerFactory(...)

java.net.URLConnection

setContentHandlerFactory(...)
setFileNameMap(FileNameMap map)

java.net.HttpURLConnection

setFollowRedirects(boolean set)

java.net.URLClassLoader

URLClassLoader(...)

Sécurité

java.security.AccessControlContext

AccessControlContext(AccessControlContext acc, DomainCombiner combiner)
getDomainCombiner()