Todos os produtos
Search
Central de documentação

MaxCompute:Java sandbox

Última atualização: Oct 10, 2026

O MaxCompute executa jobs MapReduce e funções definidas pelo usuário (UDFs) em modo distribuído dentro de um sandbox do Java. Esse sandbox garante que seu código atue apenas sobre os dados recebidos e retorne um resultado, sem acessar o sistema subjacente ou causar efeitos colaterais. Isso mantém a execução distribuída segura e isolada entre jobs concorrentes.

O sandbox se aplica somente ao código de tarefas MapReduce e a UDFs executadas em modo distribuído. A função principal do MapReduce não está sujeita a essas restrições.

Restrições

O sandbox bloqueia seis categorias de operações. Para cada categoria, há uma alternativa listada quando disponível.

Categoria

Restrição

Alternativa

Acesso a arquivos locais

E/S direta de arquivos não é permitida.

Acesse arquivos de recursos, pacotes JAR e tabelas de recursos por meio das APIs do MaxCompute MapReduce ou MaxCompute Graph. Visualize logs gravados em System.out e System.err com o comando Log no cliente MaxCompute.

Sistema de arquivos distribuído

Acesso direto a sistemas de arquivos distribuídos não é permitido.

Use o MaxCompute MapReduce ou MaxCompute Graph para ler e gravar tabelas.

JNI

Chamadas à Java Native Interface (JNI) são proibidas.

—

Threads

Criação de threads Java não é permitida. Não é possível executar comandos Linux a partir de sub-threads.

—

Acesso à rede

Todas as operações de rede são bloqueadas, incluindo a obtenção de endereços IP locais.

—

Reflexão Java

A permissão suppressAccessChecks não é permitida. Não é possível tornar acessíveis campos e métodos privados.

—

APIs restritas

Chamar qualquer um dos métodos ou construtores a seguir gera uma exceção access denied. Esta lista abrange todas as APIs bloqueadas pelo sandbox.

E/S de arquivos

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)

Carregamento de classes e runtime

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)

O método System.getProperty permite apenas as seguintes chaves:

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

Reflexão

java.lang.reflect.AccessibleObject

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

Rede

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

Segurança

java.security.AccessControlContext

AccessControlContext(AccessControlContext acc, DomainCombiner combiner)
getDomainCombiner()