Todos los productos
Search
Centro de documentos

MaxCompute:Sandbox de Java

Última actualización: Sep 20, 2026

MaxCompute ejecuta los trabajos de MapReduce y las funciones definidas por el usuario (UDF) en modo distribuido dentro de un sandbox de Java. Este entorno garantiza que su código procese únicamente los datos que recibe y devuelva un resultado, sin acceder al sistema subyacente ni generar efectos secundarios. De esta manera, la ejecución distribuida se mantiene segura y aislada entre trabajos concurrentes.

El sandbox aplica solo al código de las tareas de MapReduce y a las UDF que se ejecutan en modo distribuido. La función principal de MapReduce no está sujeta a estas restricciones.

Restricciones

El sandbox bloquea seis categorías de operaciones. A continuación se indica una alternativa para cada categoría cuando existe alguna.

Categoría

Restricción

Alternativa

Acceso a archivos locales

No se permite la E/S directa de archivos.

Acceda a los archivos de recursos, paquetes JAR y tablas de recursos mediante las API de MaxCompute MapReduce o MaxCompute Graph. Consulte los registros escritos en System.out y System.err con el comando Log en el cliente de MaxCompute.

Sistema de archivos distribuido

No se permite el acceso directo a sistemas de archivos distribuidos.

Use MaxCompute MapReduce o MaxCompute Graph para leer y escribir tablas.

JNI

No se permiten las llamadas a Java Native Interface (JNI).

—

Hilos

No se permite crear hilos de Java. Tampoco es posible ejecutar comandos de Linux desde subhilos.

—

Acceso a la red

Se bloquean todas las operaciones de red, incluida la obtención de direcciones IP locales.

—

Reflexión de Java

No se permite el permiso suppressAccessChecks. No es posible habilitar el acceso a campos ni métodos privados.

API restringidas

La llamada a cualquiera de los métodos o constructores que se muestran a continuación genera una excepción access denied. Esta lista abarca todas las API que bloquea el sandbox.

E/S de archivos

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)

Carga de clases y tiempo de ejecución

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)

System.getProperty admite únicamente a continuación claves:

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

Hilos

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()

Reflexión

java.lang.reflect.AccessibleObject

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

Red

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(...)

Seguridad

java.security.AccessControlContext

AccessControlContext(AccessControlContext acc, DomainCombiner combiner)
getDomainCombiner()