首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dataproc创建集群操作(Java库)中诊断错误

在Dataproc创建集群操作(Java库)中诊断错误
EN

Stack Overflow用户
提问于 2016-12-13 01:09:07
回答 1查看 222关注 0票数 1

当尝试使用Google创建集群时,结果似乎最初返回成功,但随后集群的"get“通知我,集群立即从”创建“状态转到”错误“状态。不幸的是,试图调用诊断调用似乎没有帮助。

下面是我正在做的事情(有些自由是用硬编码字符串来表示代码,而不是通过api或配置属性获得的值):

代码语言:javascript
复制
String projectId = "wide-isotope-147019";
String region = "us-central1-f"
GceClusterConfig computeEngineConfig = new GceClusterConfig();
computeEngineConfig.setZoneUri(
    String.format(ZONE_URI_FORMAT, config.getProjectid(),
                  config.getRegion())
List<String> tagList = new ArrayList<>();
tagList.add("ClusterName: mrfoo");
computeEngineConfig.setTags(tagList);

String machineType = String.format(MACHINE_TYPE_URI_FORMAT,
    projectId, region, "n1-standard-1");
InstanceGroupConfig masterConfig = new InstanceGroupConfig();
masterConfig.setMachineTypeUri(machineType)
            .setNumInstances(1);
InstanceGroupConfig workerConfig = new InstanceGroupConfig();
workerConfig.setMachineTypeUri(machineType)
            .setNumInstances(1);
ClusterConfig clusterConfig = new ClusterConfig();
clusterConfig.setMasterConfig(masterConfig);
clusterConfig.setWorkerConfig(workerConfig);
List<NodeInitializationAction> installActions = new ArrayList<>();
// no init actions yet. want to get basics working first.
clusterConfig.setInitializationActions(installActions);
Cluster cluster = new Cluster();
cluster.setProjectId();
cluster.setConfig(clusterConfig);
cluster.setClusterName("mrfoo");

Dataproc.Projects.Regions.Clusters.Create createOp = null;
Operation result = null;
try {
    createOp = dataproc.projects().regions().clusters()
                       .create(projectId, "global", cluster);
    createOp.setBearerToken(...);
} catch (IOException ex) {
  // handle ...
}

try {
    result = createOp.execute();
} catch (IOExceptions ex) {
   // handle.
}

return result;

上面的结果是“合理”的,没有错误。但是,稍后,当我执行get操作时:

代码语言:javascript
复制
Dataproc.Projects.RegoinsClsuters.Get getOp = null;
Cluster result = null;
try {
    getOp = dataproc.projects().regions().clusters()
           .get("wide-isotope-147019", "global", "mrfoo");
    getOp.setBearerToken(...);
} catch (IOException ioEx) {
  ...
}
try {
   result = getOp.execute();
} catch (IOException ioEx) {
    ...
}

进程不会生成错误,但是它告诉我们集群的状态是:(对长转储很抱歉。请参见它将历史记录显示为创建,而当前状态显示为错误)。

代码语言:javascript
复制
{"clusterName":"mrfoo","clusterUuid":"<id string>","config":
    {"configBucket":"dataproc-<idstring>",
     "gceClusterConfig":"projectId":"wide-isotope-147019",
    <lots of stuff deleted>
  "status":{"state":"ERROR",
            "stateStartTime":"2016-12-13T00:27:11.143Z"},
   "statusHistory":[
      {"state":"CREATING",
       "stateStartTime":"2016-12-13T00:27:09.947Z"}]}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-13 01:44:22

创建Dataproc集群的一般模式是:

代码语言:javascript
复制
Operaiton op = createCluster(...);
while(!op.getDone()) {
    sleep(10);
    op = getOperation(op.getName());
}

if (op.hasError()) {
   // Display op.getError(); 
}

从日志来看,在这个特殊的例子中,我可以说问题是Compute拒绝正在传递的实例标记,因为它们不匹配Compute对有效标记的正则表达式:'(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?)'。我提交了一个错误,以便Dataproc能够更快地验证实例标记,并在尝试创建集群时立即引发错误,而不是在操作中设置错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41112231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档