All Products
Search
Document Center

MaxCompute:Java sandbox

Last Updated:Mar 27, 2026

MaxCompute menjalankan pekerjaan MapReduce dan user-defined function (UDF) dalam mode terdistribusi di dalam Java sandbox. Sandbox ini memastikan bahwa kode Anda hanya memproses data yang diterima dan mengembalikan hasil—tanpa mengakses sistem dasar atau menyebabkan efek samping—sehingga menjaga eksekusi terdistribusi tetap aman dan terisolasi antar pekerjaan yang berjalan secara konkuren.

Sandbox hanya berlaku untuk kode task MapReduce dan UDF yang dijalankan dalam mode terdistribusi. Fungsi utama MapReduce tidak tunduk pada pembatasan ini.

Pembatasan

Sandbox memblokir enam kategori operasi. Untuk setiap kategori, alternatif disediakan jika tersedia.

CategoryRestrictionAlternative
Local file accessI/O file langsung tidak diizinkan.Akses file resource, paket JAR, dan tabel resource melalui API MaxCompute MapReduce atau MaxCompute Graph. Lihat log yang ditulis ke System.out dan System.err dengan perintah Log pada client MaxCompute.
Distributed file systemAkses langsung ke sistem file terdistribusi tidak diizinkan.Gunakan MaxCompute MapReduce atau MaxCompute Graph untuk membaca dan menulis tabel.
JNIPanggilan Java Native Interface (JNI) tidak diizinkan.
ThreadsMembuat thread Java tidak diizinkan. Perintah Linux tidak dapat dijalankan dari sub-thread.
Network accessSemua operasi jaringan tidak diizinkan, termasuk mendapatkan alamat IP lokal.
Java reflectionIzin suppressAccessChecks tidak diizinkan. Field privat dan metode privat tidak dapat diakses.

API yang Dibatasi

Pemanggilan metode atau konstruktor berikut akan melemparkan pengecualian access denied. Daftar ini mencakup seluruh API yang diblokir oleh sandbox.

File I/O

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

Class loading and 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)           // Hanya kunci yang tercantum di bawah ini yang diizinkan
getProperty(String key, String def) // Hanya kunci yang tercantum di bawah ini yang diizinkan
setProperty(String key, String value)
setIn(InputStream in)
setOut(PrintStream out)
setErr(PrintStream err)
setSecurityManager(SecurityManager s)

System.getProperty hanya mengizinkan kunci-kunci berikut:

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

Reflection

`java.lang.reflect.AccessibleObject`

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

Network

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

Security

`java.security.AccessControlContext`

AccessControlContext(AccessControlContext acc, DomainCombiner combiner)
getDomainCombiner()