IBM Cloud Docs
使用 Java

使用 Java

IBM Analytics Engine SDK for Java 提供了一些功能,允许您以编程方式与无服务器实例的 IBM Analytics Engine 服务 API 进行交互。

可在此 GitHub 存储库中找到源代码。

获取 SDK

使用 IBM Analytics Engine Java SDK 的最简单方法是使用 Maven 来管理库依赖关系。 如果您不熟悉 Maven,请参阅 Maven in 5-Minutes

Maven 使用名为 pom.xml 的文件来指定 Java 项目所需的库及其版本。 以下是使用 IBM Analytics Engine Java SDK 连接到 IBM Analytics Engine的 pom.xml 文件的示例。

<dependency>
  <groupId>com.ibm.cloud</groupId>
  <artifactId>ibm-analytics-engine-api</artifactId>
  <version>0.4.2</version>
</dependency>

创建客户机和获取凭证

当您连接到 IBM Analytics Engine时,将使用您提供的凭证信息 (API 密钥和服务实例标识) 来创建和配置客户机。 如果您未手动提供此信息,那么可以从凭证文件或环境变量获取这些凭证。

您可以在创建服务凭证时或通过 CLI 检索服务实例标识。 请参阅 检索服务端点

要使用 IBM Analytics Engine Java SDK,您需要以下值:

  • IAM_API_KEY: 创建服务凭证时生成的 API 密钥。 您可以通过在 IBM Cloud 仪表板上查看服务凭证来进行检索。

  • instance_guid: 创建服务凭证时在 resource_instance_id 中生成的值。 您可以通过在 IBM Cloud 仪表板上查看服务凭证来获取值。

  • IAE_ENDPOINT_URL : 包含 https:// 协议的服务端点 URL。 请参阅 服务端点

正在初始化配置

Java SDK 允许您通过以下两种方法之一来构造服务客户机:

  • 通过以编程方式设置客户机选项

    您可以通过指定各种客户机选项 (例如认证程序和服务端点 URL),以编程方式构造 IBM Analytics Engine 服务客户机的实例:

    import com.ibm.cloud.iaesdk.ibm_analytics_engine_api.v3.IbmAnalyticsEngineApi;
    import com.ibm.cloud.iaesdk.ibm_analytics_engine_api.v3.model.*;
    import com.ibm.cloud.sdk.core.http.Response;
    import com.ibm.cloud.sdk.core.security.*;
    import java.util.HashMap;
    
    private static IbmAnalyticsEngineApi ibmAnalyticsEngineApiService;
    
    private static String IAM_API_KEY = "{apikey}";
    private static String IAE_ENDPOINT_URL = "{url}";
    private static String API_AUTH_URL = "{api auth url}";
    
    public static void main(String[] args)
    {  
       HashMap<String, String> config = new HashMap<String, String>();
       config.put("APIKEY",IAM_API_KEY );
       config.put("AUTH_URL", API_AUTH_URL);
    
       try {
          // Create an IAM authenticator.
          Authenticator authenticator = IamAuthenticator.fromConfiguration(config);
          // Construct the service client.
          ibmAnalyticsEngineApiService = new IbmAnalyticsEngineApi(IbmAnalyticsEngineApi.DEFAULT_SERVICE_NAME, authenticator);
          // Set our service URL.
          ibmAnalyticsEngineApiService.setServiceUrl(IAE_ENDPOINT_URL);
          }
          catch (Exception e) {
          System.out.println("Exception");
          }
    }
    
  • 通过使用外部配置属性

    为了避免对寻源凭证进行硬编码,可以将这些值存储在应用程序外部的配置属性中。

    要使用配置属性:

    1. 定义要由应用程序使用的配置属性。 这些属性可以实现为:

      • 导出的环境变量

      • 存储在凭证文件中的值

        以下示例显示了如何使用环境变量。 每个环境变量都必须以 IBM_ANALYTICS_ENGINE_API 作为前缀。

        export IBM_ANALYTICS_ENGINE_API_URL=<IAE_ENDPOINT_URL>
        export IBM_ANALYTICS_ENGINE_API_AUTH_TYPE=iam
        export IBM_ANALYTICS_ENGINE_API_APIKEY=<IAM_API_KEY>
        

        IBM_ANALYTICS_ENGINE_API 是 IBM Analytics Engine API 客户机的缺省服务名称,这意味着缺省情况下 SDK 将查找以此前缀开头的属性。

    2. 构建服务客户机:

      import com.ibm.cloud.iaesdk.ibm_analytics_engine_api.v3.IbmAnalyticsEngineApi;
      import com.ibm.cloud.iaesdk.ibm_analytics_engine_api.v3.model.*;
      import com.ibm.cloud.sdk.core.http.Response;
      import com.ibm.cloud.sdk.core.security.*;
      import java.util.HashMap;
      
      private static IbmAnalyticsEngineApi ibmAnalyticsEngineApiService;
      
      private static String IAM_API_KEY = "{apikey}";
      private static String IAE_ENDPOINT_URL = "{url}";
      private static String API_AUTH_URL = "{api auth url}";
      
      public static void main(String[] args)
      {
         HashMap<String, String> config = new HashMap<String, String>();
      	   config.put("APIKEY",IAM_API_KEY );
      	   config.put("AUTH_URL", API_AUTH_URL);
      
         try {
            // Create an IAM authenticator.
            Authenticator authenticator = IamAuthenticator.fromConfiguration(config);
            // Construct the service client.
            ibmAnalyticsEngineApiService = new IbmAnalyticsEngineApi(IbmAnalyticsEngineApi.DEFAULT_SERVICE_NAME, authenticator);
            // Set our service URL.
            ibmAnalyticsEngineApiService.setServiceUrl(IAE_ENDPOINT_URL);
      
         } catch (Exception e) {
            System.out.println("Exception");
         }
      }
      

代码样本

除了此部分中的样本代码片段外,您还可以使用 IBM Analytics Engine V3 API 参考 中的 Java 代码样本。

以下代码样本显示了如何执行以下操作:

  • 访问 IBM Analytics Engine 服务实例:
    import com.ibm.cloud.iaesdk.ibm_analytics_engine_api.v3.IbmAnalyticsEngineApi;
    import com.ibm.cloud.iaesdk.ibm_analytics_engine_api.v3.model.*;
    import com.ibm.cloud.sdk.core.http.Response;
    import com.ibm.cloud.sdk.core.security.*;
    import java.util.HashMap;
    
    private static IbmAnalyticsEngineApi ibmAnalyticsEngineApiService;
    
    private static String IAM_API_KEY = "{apikey}";
    private static String IAE_ENDPOINT_URL = "{url}";
    private static String API_AUTH_URL = "{api auth url}";
    
    public static void main(String[] args)
    {  
       HashMap<String, String> config = new HashMap<String, String>();
    		config.put("APIKEY",IAM_API_KEY );
    		config.put("AUTH_URL", API_AUTH_URL);
    
       try {
          // Create an IAM authenticator.
          Authenticator authenticator = IamAuthenticator.fromConfiguration(config);
          // Construct the service client.
          ibmAnalyticsEngineApiService = new IbmAnalyticsEngineApi(IbmAnalyticsEngineApi.DEFAULT_SERVICE_NAME, authenticator);
          // Set our service URL.
          ibmAnalyticsEngineApiService.setServiceUrl(IAE_ENDPOINT_URL);
    
       } catch (Exception e) {
          System.out.println("Exception");
       }
    }
    
  • 检索单个 instance.:
    ServiceCall<Instance> getInstance(GetInstanceOptions getInstanceOptions)
    
    示例请求:
    // Construct an instance of the GetInstanceOptions model
    GetInstanceOptions getInstanceOptionsModel = new GetInstanceOptions.Builder()
    .instanceId("dc0e9889-eab2-4t9e-9441-566209499546")
    .build();
    
    // Invoke operation with valid options model (positive test)
    Response<Instance> response = ibmAnalyticsEngineApiService.getInstance(getInstanceOptionsModel).execute();
    Instance responseObj = response.getResult();
    System.out.println(String.valueOf(responseObj));
    
  • 在给定的无服务器 Spark 实例上部署 Spark 应用程序:
    ServiceCall<ApplicationResponse> createApplication(CreateApplicationOptions createApplicationOptions)
    
    示例请求:
    // Construct an instance of the ApplicationRequestApplicationDetails model
    ApplicationRequestApplicationDetails applicationRequestApplicationDetailsModel = new ApplicationRequestApplicationDetails.Builder()
    .application("cos://ae-bucket-do-not-delete-dc0e9889-eab2-4t9e-9441-566209499546.s3.us-south.cloud-object-storage.appdomain.cloud/my_spark_application.py")
    .xClass("IbmAnalyticsEngineApi")
    .arguments(new java.util.ArrayList<String>(java.util.Arrays.asList("/opt/ibm/spark/examples/src/main/resources/people.txt")))
    .conf(new java.util.HashMap<String, Object>() { { put("spark.app.name", "MySparkApp"); } })
    .env(new java.util.HashMap<String, Object>() { { put("SPARK_ENV_LOADED", "2"); } })
    .build();
    
    // Construct an instance of the CreateApplicationOptions model
    CreateApplicationOptions createApplicationOptionsModel = new CreateApplicationOptions.Builder()
    .instanceId("dc0e9889-eab2-4t9e-9441-566209499546")
    .applicationDetails(applicationRequestApplicationDetailsModel)
    .build();
    
    // Invoke operation with valid options model (positive test)
    Response<ApplicationResponse> response = ibmAnalyticsEngineApiService.createApplication(createApplicationOptionsModel).execute();
    ApplicationResponse responseObj = response.getResult();
    System.out.println(String.valueOf(responseObj));
    
  • 检索在给定实例上运行的所有 Spark 应用程序:
    ServiceCall<ApplicationCollection> listApplications(ListApplicationsOptions listApplicationsOptions)
    
    示例请求:
    // Construct an instance of the ListApplicationsOptions model
    ListApplicationsOptions listApplicationsOptionsModel = new ListApplicationsOptions.Builder()
    .instanceId("dc0e9889-eab2-4t9e-9441-566209499546")
    .build();
    
    // Invoke operation with valid options model (positive test)
    Response<ApplicationCollection> response = ibmAnalyticsEngineApiService.listApplications(listApplicationsOptionsModel).execute();
    ApplicationCollection responseObj = response.getResult();
    System.out.println(String.valueOf(responseObj));
    
  • 检索给定 Spark 应用程序的详细信息:
    ServiceCall<ApplicationGetResponse> getApplication(GetApplicationOptions getApplicationOptions)
    
    示例请求:
    // Construct an instance of the GetApplicationOptions model
    GetApplicationOptions getApplicationOptionsModel = new GetApplicationOptions.Builder()
    .instanceId("dc0e9889-eab2-4t9e-9441-566209499546")
    .applicationId("db933645-0b68-4dcb-80d8-7b71a6c8e542")
    .build();
    
    // Invoke operation with valid options model (positive test)
    Response<ApplicationGetResponse> response = ibmAnalyticsEngineApiService.getApplication(getApplicationOptionsModel).execute();
    ApplicationGetResponse responseObj = response.getResult();
    System.out.println(String.valueOf(responseObj));
    
  • 停止由 app_id 标识标识的正在运行的应用程序。 这是一个幂等的操作。 如果请求的应用程序已停止或完成,那么不执行任何操作。
    ServiceCall<Void> deleteApplication(DeleteApplicationOptions deleteApplicationOptions)
    
    示例请求:
    // Construct an instance of the DeleteApplicationOptions model
    DeleteApplicationOptions deleteApplicationOptionsModel = new DeleteApplicationOptions.Builder()
    .instanceId("dc0e9889-eab2-4t9e-9441-566209499546")
    .applicationId("db933645-0b68-4dcb-80d8-7b71a6c8e542")
    .build();
    
    // Invoke operation with valid options model (positive test)
    Response<Void> response = ibmAnalyticsEngineApiService.deleteApplication(deleteApplicationOptionsModel).execute();
    Void responseObj = response.getResult();
    System.out.println(String.valueOf(responseObj));
    
  • 返回应用程序的状态:
    ServiceCall<ApplicationGetStateResponse> getApplicationState(GetApplicationStateOptions getApplicationStateOptions)
    
    示例请求:
    // Construct an instance of the GetApplicationStateOptions model
    GetApplicationStateOptions getApplicationStateOptionsModel = new GetApplicationStateOptions.Builder()
    .instanceId("dc0e9889-eab2-4t9e-9441-566209499546")
    .applicationId("db933645-0b68-4dcb-80d8-7b71a6c8e542")
    .build();
    
    // Invoke operation with valid options model (positive test)
    Response<ApplicationGetStateResponse> response = ibmAnalyticsEngineApiService.getApplicationState(getApplicationStateOptionsModel).execute();
    ApplicationGetStateResponse responseObj = response.getResult();
    System.out.println(String.valueOf(responseObj));