MaxCompute, MapReduce işlerini ve kullanıcı tanımlı işlevleri (UDF'ler) dağıtık modda bir Java sandbox içinde çalıştırır. Sandbox, kodunuzun alttaki sisteme erişmeden veya yan etki oluşturmadan yalnızca aldığı veriler üzerinde işlem yapmasını ve sonuç döndürmesini zorlar. Bu sayede eşzamanlı işlerde dağıtık yürütme güvenli ve yalıtılmış olur.
Sandbox yalnızca dağıtık modda çalışan MapReduce görev kodu ve UDF'lere uygulanır. MapReduce ana işlevi bu kısıtlamalara tabi değildir.
Kısıtlamalar
Sandbox altı işlem kategorisini engeller. Her kategori için mevcut alternatifler aşağıda listelenmiştir.
| Kategori | Kısıtlama | Alternatif |
|---|---|---|
| Yerel dosya erişimi | Doğrudan dosya G/Ç işlemlerine izin verilmez. | Kaynak dosyalarına, JAR paketlerine ve kaynak tablolarına MaxCompute MapReduce veya MaxCompute Graph API'leri aracılığıyla erişin. MaxCompute istemcisindeki Log komutunu kullanarak System.out ve System.err konumlarına yazılan günlükleri görüntüleyin. |
| Dağıtık dosya sistemi | Dağıtık dosya sistemlerine doğrudan erişime izin verilmez. | Tabloları okumak ve yazmak için MaxCompute MapReduce veya MaxCompute Graph kullanın. |
| JNI | Java Native Interface (JNI) çağrılarına izin verilmez. | — |
| İş parçacıkları | Java iş parçacığı oluşturmaya izin verilmez. Alt iş parçacıklarından Linux komutları çalıştırılamaz. | — |
| Ağ erişimi | Yerel IP adreslerinin alınması dahil olmak üzere tüm ağ işlemlerine izin verilmez. | — |
| Java yansıması | suppressAccessChecks iznine izin verilmez. Özel alanlara ve özel yöntemlere erişilebilir hale getirilemez. |
— |
Kısıtlı API'ler
Aşağıdaki yöntemlerden veya kuruculardan herhangi birini çağırmak bir access denied özel durumu oluşturur. Liste, sandbox tarafından engellenen tüm API'leri kapsar.
Dosya G/Ç
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)
Sınıf yükleme ve çalışma zamanı
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 yöntemi yalnızca aşağıdaki anahtarlara izin verir:
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
İş parçacıkları
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()
Yansıma
java.lang.reflect.AccessibleObject
setAccessible(AccessibleObject[] array, boolean flag)
setAccessible(boolean flag)
Ağ
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(...)
Güvenlik
java.security.AccessControlContext
AccessControlContext(AccessControlContext acc, DomainCombiner combiner)
getDomainCombiner()