PerfectHadoop: YARN Node Manager
This project provides a Swift wrapper of YARN Node Manager REST API:
YARNNodeManager()
: access to all Applications and Containers information of a YARN manager
Connect to YARN Node Manager
To connect to your Hadoop YARN Node Manager by Perfect, initialize a YARNNodeManager()
object with sufficient parameters:
// this connection could possibly do some basic operations let nm = YARNNodeManager(host: "yarnNodeManager.somehadoopdomain.com", port: 8042)
or connect to Hadoop YARN Node Manager with a valid user name:
// add user name if need let nm = YARNNodeManager(host: "yarnNodeManager.somehadoopdomain.com", port: 8042, user: "your user name")
Authentication
If using Kerberos to authenticate, please try codes below:
// set auth to kerberos let yarn = YARNNodeManager(host: "yarnNodeManager.somehadoopdomain.com", port: 8042, user: "username", auth: .krb5)
Parameters of YARNNodeManager Object
Item | Data Type | Description |
---|---|---|
service | String | the service protocol of web request - http / https |
host | String | the hostname or ip address of the Hadoop YARN node manager |
port | Int | the port of yarn host, default is 8042 |
auth | Authorization | .off or .krb5. Default value is .off |
proxyUser | String | proxy user, if applicable |
apibase | String | use this parameter ONLY the target server has a different api routine other than /ws/v1/node |
timeout | Int | timeout in seconds, zero means never timeout during transfer |
Get General Information
Call checkOverall()
to get the general information of a YARN node manager in form of a YARNNodeManager.Info
structure:
guard let inf = try yarn.checkOverall() else { // something goes wrong here } print(inf.id) print(inf.nodeHostName) print(inf.healthReport)
Members of YARNNodeManager.NodeInfo
Item | Data Type | Description |
---|---|---|
id | String | The NodeManager id |
nodeHostName | String | The host name of the NodeManager |
totalPmemAllocatedContainersMB | Int | The amount of physical memory allocated for use by containers in MB |
totalVmemAllocatedContainersMB | Int | The amount of virtual memory allocated for use by containers in MB |
totalVCoresAllocatedContainers | Int | The number of virtual cores allocated for use by containers |
lastNodeUpdateTime | Int | The last timestamp at which the health report was received (in ms since epoch) |
healthReport | String | The diagnostic health report of the node |
nodeHealthy | Bool | true/false indicator of if the node is healthy |
nodeManagerVersion | String | Version of the NodeManager |
nodeManagerBuildVersion | String | NodeManager build string with build version, user, and checksum |
nodeManagerVersionBuiltOn | String | Timestamp when NodeManager was built(in ms since epoch) |
hadoopVersion | String | Version of hadoop common |
hadoopBuildVersion | String | Hadoop common build string with build version, user, and checksum |
hadoopVersionBuiltOn | String | Timestamp when hadoop common was built(in ms since epoch) |
Applications
Call checkApps()
to return an array of APP
structure.
With the Applications API, you can obtain a collection of resources, each of which represents an application.
let apps = try yarn.checkApps() apps.forEach { a in print(a.id) print(a.containerids) print(a.state) }//next
Data Structure of APP
Item | Data Type | Description |
---|---|---|
id | String | The application id |
user | String | The user who started the application |
state | APP.State | The state of the application - valid states are: NEW, INITING, RUNNING, FINISHINGCONTAINERSWAIT, APPLICATIONRESOURCESCLEANINGUP, FINISHED |
containerids | [String]] | The list of containerids currently being used by the application on this node. If not present then no containers are currently running for this application. |
Check A Specific Application
If an application id is available, you can call checkApp()
to query information on nodes:
guard let app = try yarn.checkApp("application_1326121700862_0005") else { // something wrong print("check app failed") return } // print out all container ids of the application print(app.containerids)
checkApp()
will return an APP
object, as described above.
Check Containers
Call checkContainers()
to check all containers on the current node:
// get all containers let containers = try ynode.checkContainers() // check how many containers on node print(containers.count) containers.forEach { container in print(container.id) print(container.state) print(container.nodeId) print(container.diagnostics) /// ... }
checkContainers()
returns an array of Container
structure, as described below:
Container Object
Item | Data Type | Description |
---|---|---|
id | String | The container id |
state | String | State of the container - valid states are: NEW, LOCALIZING, LOCALIZATIONFAILED, LOCALIZED, RUNNING, EXITEDWITHSUCCESS, EXITEDWITHFAILURE, KILLING, CONTAINERCLEANEDUPAFTERKILL, CONTAINERRESOURCESCLEANINGUP, DONE |
nodeId | String | The id of the node the container is on |
containerLogsLink | String | The http link to the container logs |
user | String | The user name of the user which started the container |
exitCode | Int | Exit code of the container |
diagnostics | String | A diagnostic message for failed containers |
totalMemoryNeededMB | Int | Total amount of memory needed by the container (in MB) |
totalVCoresNeeded | Int | Total number of virtual cores needed by the container |
Check a Specific Container
If a container id is available, you can also use checkContainer()
to check a specific container:
guard let container = try ynode.checkContainer(id: container.id) else { // checking container failed } print(container.id) print(container.state) print(container.nodeId) print(container.diagnostics)
This method will return a Container
object as described above.