MaxCompute MapReduce dan fungsi yang ditentukan pengguna (UDF) yang berjalan dalam mode terdistribusi dibatasi oleh sandbox Java. Fungsi utama MapReduce tidak tunduk pada batasan sandbox Java.
Batasan penggunaan sandbox Java
- Akses langsung ke file lokal tidak diizinkan. Anda hanya dapat mengakses file menggunakan antarmuka yang disediakan oleh MaxCompute MapReduce dan MaxCompute Graph. Batasan ini mencakup data berikut:
- Sumber daya yang ditentukan oleh opsi resources, termasuk file sumber daya, paket JAR, dan tabel sumber daya.
- Log yang dihasilkan oleh System.out dan System.err. Anda dapat menjalankan perintah Log di klien MaxCompute untuk melihat log.
- Akses langsung ke sistem file terdistribusi tidak diizinkan. Anda hanya dapat menggunakan MaxCompute MapReduce atau MaxCompute Graph untuk mengakses tabel.
- Panggilan Java Native Interface (JNI) tidak diizinkan.
- Thread Java tidak dapat dibuat. Perintah Linux tidak dapat dieksekusi dengan menggunakan sub-thread.
- Operasi akses jaringan, seperti mendapatkan alamat IP lokal, tidak diizinkan.
- Batasan pada refleksi Java: Izin suppressAccessChecks dilarang. Anda tidak dapat menyetel atribut atau metode pribadi agar dapat diakses untuk membaca atribut pribadi atau memanggil metode pribadi.
Batasan akses ke file lokal
Jika Anda menggunakan metode berikut untuk mengakses file lokal, pengecualianaccess denied akan dilaporkan:
- java.io.File
public boolean delete() public void deleteOnExit() public boolean exists() public boolean canRead() public boolean isFile() public boolean isDirectory() public boolean isHidden() public long lastModified() public long length() public String[] list() public String[] list(FilenameFilter filter) public File[] listFiles() public File[] listFiles(FilenameFilter filter) public File[] listFiles(FileFilter filter) public boolean canWrite() public boolean createNewFile() public static File createTempFile(String prefix, String suffix) public static File createTempFile(String prefix, String suffix,File directory) public boolean mkdir() public boolean mkdirs() public boolean renameTo(File dest) public boolean setLastModified(long time) public boolean 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) - java.lang.Class
public ProtectionDomain getProtectionDomain() - java.lang.ClassLoader
ClassLoader() ClassLoader(ClassLoader parent) - java.lang.Runtime
public Process exec(String command) public Process exec(String command, String envp[]) public Process exec(String cmdarray[]) public Process exec(String cmdarray[], String envp[]) public void exit(int status) public static void runFinalizersOnExit(boolean value) public void addShutdownHook(Thread hook) public boolean removeShutdownHook(Thread hook) public void load(String lib) public void loadLibrary(String lib) - java.lang.System
public static void exit(int status) public static void runFinalizersOnExit(boolean value) public static void load(String filename) public static void loadLibrary( String libname) public static Properties getProperties() public static void setProperties(Properties props) public static String getProperty(String key) // Hanya beberapa kunci yang diizinkan untuk akses ke file. public static String getProperty(String key, String def) // Hanya beberapa kunci yang diizinkan untuk akses ke file. public static String setProperty(String key, String value) public static void setIn(InputStream in) public static void setOut(PrintStream out) public static void setErr(PrintStream err) public static synchronized void setSecurityManager(SecurityManager s)Kunci yang didukung oleh System.getProperty: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 - java.lang.Thread
Thread() Thread(Runnable target) Thread(String name) Thread(Runnable target, String name) Thread(ThreadGroup group, ...) public final void checkAccess() public void interrupt() public final void suspend() public final void resume() public final void setPriority (int newPriority) public final void setName(String name) public final void setDaemon(boolean on) public final void stop() public final synchronized void stop(Throwable obj) public static int enumerate(Thread tarray[]) public void setContextClassLoader(ClassLoader cl) - java.lang.ThreadGroup
ThreadGroup(String name) ThreadGroup(ThreadGroup parent, String name) public final void checkAccess() public int enumerate(Thread list[]) public int enumerate(Thread list[], boolean recurse) public int enumerate(ThreadGroup list[]) public int enumerate(ThreadGroup list[], boolean recurse) public final ThreadGroup getParent() public final void setDaemon(boolean daemon) public final void setMaxPriority(int pri) public final void suspend() public final void resume() public final void destroy() public final void interrupt() public final void stop() - java.lang.reflect.AccessibleObject
public static void setAccessible(...) public void setAccessible(...) - java.net.InetAddress
public String getHostName() public static InetAddress[] getAllByName(String host) public static InetAddress getLocalHost() - java.net.DatagramSocket
public InetAddress getLocalAddress() - java.net.Socket
Socket(...) - java.net.ServerSocket
ServerSocket(...) public Socket accept() protected final void implAccept(Socket s) public static synchronized void setSocketFactory(...) public static synchronized void setSocketImplFactory(...) - java.net.DatagramSocket
DatagramSocket(...) public synchronized void receive(DatagramPacket p) - java.net.MulticastSocket
MulticastSocket(...) - java.net.URL
URL(...) public static synchronized void setURLStreamHandlerFactory(...) java.net.URLConnection public static synchronized void setContentHandlerFactory(...) public static void setFileNameMap(FileNameMap map) - java.net.HttpURLConnection
public static void setFollowRedirects(boolean set) java.net.URLClassLoader URLClassLoader(...) - java.security.AccessControlContext
public AccessControlContext(AccessControlContext acc, DomainCombiner combiner) public DomainCombiner getDomainCombiner()