MaxCompute は、Java サンドボックス内で MapReduce ジョブとユーザー定義関数 (UDF) を分散モードで実行します。サンドボックスは、コードが受信したデータに対して動作し、基盤システムにアクセスしたり副作用を引き起こしたりすることなく結果を返すことを強制します。これにより、分散実行が安全に保たれ、同時ジョブ間で分離されます。
サンドボックスは、MapReduce タスクコードと、分散モードで実行される UDF にのみ適用されます。MapReduce のメイン関数は、これらの制限の対象外です。
制限事項
サンドボックスは、6 つのカテゴリの操作をブロックします。各カテゴリについて、代替手段が存在する場合はそれがリストされています。
| カテゴリ | 制限事項 | 代替手段 |
|---|---|---|
| ローカルファイルへのアクセス | 直接的なファイル I/O は許可されていません。 | リソースファイル、JAR パッケージ、およびリソーステーブルには、MaxCompute MapReduce または MaxCompute Graph の API を使用してアクセスしてください。MaxCompute クライアントの System.out および System.err に出力されたログは、Log コマンドで確認できます。 |
| 分散ファイルシステム | 分散ファイルシステムへの直接アクセスは許可されていません。 | テーブルの読み取りおよび書き込みには、MaxCompute MapReduce または MaxCompute Graph を使用してください。 |
| JNI | Java Native Interface (JNI) 呼び出しは許可されていません。 | — |
| スレッド | Java スレッドの作成は許可されていません。サブスレッドから Linux コマンドを実行することもできません。 | — |
| ネットワークアクセス | すべてのネットワーク操作(ローカル IP アドレスの取得を含む)が禁止されています。 | — |
| Java リフレクション | suppressAccessChecks 権限は許可されていません。非公開フィールドおよび非公開メソッドをアクセシブルにすることはできません。 | — |
制限された API
以下のいずれかのメソッドまたはコンストラクターを呼び出すと、アクセス拒否 例外がスローされます。このリストには、サンドボックスによってブロックされているすべての API が含まれています。
ファイル 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)クラスローディングとランタイム
`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 では、次のキーのみが使用できます:
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, ...)
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()リフレクション
`java.lang.reflect.AccessibleObject`
setAccessible(AccessibleObject[] array, boolean flag)
setAccessible(boolean flag)ネットワーク
`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(...)セキュリティ
`java.security.AccessControlContext`
AccessControlContext(AccessControlContext acc, DomainCombiner combiner)
getDomainCombiner()