On Wed, Apr 03, 2013 at 02:49:28PM +0000, JOAQUIN GUANTER GONZALBEZ wrote: > Hello, > > I am trying to create a cluster with HDFS programmatically by targeting the > REST APIs in the Ambari Server directly instead of using the Web frontend. I > set the HDFS service state to "INSTALLED" and I can see my host components > entering the state "INSTALLING", but after a while, they transition to > "INSTALL_FAILED". The problem is that neither the ambari-server.log/out nor > the ambari-agent.log/out have any error messages. > > I'm not sure if there are any other sources of information I should be > looking at for errors, or if I'm doing anything wrong when calling the REST > APIs (all the API calls return successfully, though). My test is a NodeJS > program which I have attached in case anyone wants to take a look at it. The > ambari.js code is a supporting object model that enables easy calls to the > REST API. > > Does anyone know how can investigate why the state of my host components is > ending up in INSTALL_FAILED?
Hi, I'm doing the same thing (and manage to install my first cluster today) When I have that kind of failure I try to log in to the host and manually check logs in /var/log/hadoop... or /var/log/ambari-* it helped me quite a lot > > Thanks, > Ximo. > > ________________________________ > > Este mensaje se dirige exclusivamente a su destinatario. Puede consultar > nuestra pol?tica de env?o y recepci?n de correo electr?nico en el enlace > situado m?s abajo. > This message is intended exclusively for its addressee. We only send and > receive email on the basis of the terms set out at: > http://www.tid.es/ES/PAGINAS/disclaimer.aspx > ;'use strict'; > > var Q = require('q'); > var http = require('http'); > var PATH_PREFIX = '/api/v1/'; > > var performRequest = function (request_options) { > var result = Q.defer(); > var body = request_options.body; > delete request_options.body; > var req = http.request(request_options, function(res) { > var body = ''; > res.setEncoding('utf8'); > res.on('data', function(chunk) { > body += chunk; > }); > res.on('end', function() { > if (body) { > res.body = body; > try { > var json = JSON.parse(body); > res.body = json; > } catch(ignored) { } > } > if (Math.floor(res.statusCode / 100) === 2) result.resolve(res); > else result.reject(res); > }); > }); > if (body) req.write(JSON.stringify(body)); > req.end(); > return result.promise; > }; > > var isString = function(obj) { > return Object.prototype.toString.call(obj) == '[object String]'; > }; > > var Service = function(cluster, serviceInfo) { > var service = this; > this.cluster = cluster; > this.name = serviceInfo.ServiceInfo.service_name; > this.state = serviceInfo.ServiceInfo.state; > this.componentNames = serviceInfo.components.map(function(componentInfo) { > return componentInfo.ServiceComponentInfo.component_name; > }); > this.desiredConfigs = serviceInfo.ServiceInfo.desired_configs; > this.addComponent = function(componentName) { > var request_options = service.cluster.server.getBaseRequest(); > request_options.method = 'POST'; > request_options.path = PATH_PREFIX + 'clusters/' + > service.cluster.name + '/services/' + service.name + '/components/' + > componentName; > return performRequest(request_options).then(function(res) { > return componentName; > }); > }; > this.updateCluster = function() { throw new Error('Not implemented'); }; > this.removeComponent = function() { throw new Error('Not implemented'); }; > this.applyConfiguration = function(type, tag) { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'PUT'; > request_options.path = PATH_PREFIX + 'clusters/' + > service.cluster.name + '/services/' + service.name; > request_options.body = { > config: {} > }; > request_options.body.config[type] = tag; > return performRequest(request_options); > }; > this.install = function() { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'PUT'; > request_options.path = PATH_PREFIX + 'clusters/' + > service.cluster.name + '/services/' + service.name; > request_options.body = { > ServiceInfo: { > state: 'INSTALLED' > } > }; > return performRequest(request_options); > }; > this.start = function() { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'PUT'; > request_options.path = PATH_PREFIX + 'clusters/' + > service.cluster.name + '/services/' + service.name; > request_options.body = { > ServiceInfo: { > state: 'STARTED' > } > }; > return performRequest(request_options); > }; > return this; > }; > > var Host = function(cluster, hostInfo) { > var host = this; > this.cluster = cluster; > this.name = hostInfo.Hosts.host_name; > this.ip = hostInfo.Hosts.ip; > this.status = hostInfo.Hosts.host_status; > this.addComponents = function(components) { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'POST'; > request_options.path = PATH_PREFIX + 'clusters/' + cluster.name + > '/hosts?Hosts/host_name=' + host.name; > request_options.body = { > "host_components": components.map(function(component) { > return { HostRoles: { > "component_name": component > }}; > }) > }; > return performRequest(request_options); > }; > this.addComponent = function(component) { > return host.addComponents([component]); > }; > }; > > var Cluster = function(server, clusterInfo) { > var cluster = this; > this.server = server; > this.name = clusterInfo.Clusters.cluster_name; > this.serviceNames = clusterInfo.services.map(function(service) { > return service.ServiceInfo.service_name; > }); > this.hostNames = clusterInfo.hosts.map(function(host) { > return host.Hosts.host_name; > }); > this.configurations = clusterInfo.configurations.map(function(config) { > return { > type: config.type, > tag: config.tag > }; > }); > this.getService = function(serviceName) { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'GET'; > request_options.path = PATH_PREFIX + 'clusters/' + cluster.name + > '/services/' + serviceName; > return performRequest(request_options).then(function(res) { > return new Service(cluster, res.body); > }); > }; > this.addService = function(serviceName) { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'POST'; > request_options.path = PATH_PREFIX + 'clusters/' + cluster.name + > '/services'; > request_options.body = { > ServiceInfo: { service_name: serviceName } > }; > return performRequest(request_options).then(function(res) { > return cluster.getService(serviceName); > }); > }; > this.removeService = function(service) { > if (!isString(service)) { > service = service.name; > } > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'DELETE'; > request_options.path = PATH_PREFIX + 'clusters/' + cluster.name + > '/services/' + service; > return performRequest(request_options); > }; > this.getConfiguration = function() { throw new Error('Not implemented'); > }; > this.addConfiguration = function(type, tag, config) { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'POST'; > request_options.path = PATH_PREFIX + 'clusters/' + cluster.name + > '/configurations'; > request_options.body = { > type: type, > tag: tag, > properties: config, > }; > return performRequest(request_options); > }; > this.removeConfiguration = function() { throw new Error('Not > implemented'); }; > this.updateConfiguration = function() { throw new Error('Not > implemented'); }; > this.getHost = function(hostname) { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'GET'; > request_options.path = PATH_PREFIX + 'clusters/' + cluster.name + > '/hosts/' + hostname; > return performRequest(request_options).then(function(res) { > return new Host(cluster, res.body); > }); > }; > this.addHost = function(hostname) { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'POST'; > request_options.path = PATH_PREFIX + 'clusters/' + cluster.name + > '/hosts'; > request_options.body = { Hosts: { host_name: hostname} }; > return performRequest(request_options).then(function(res) { > return cluster.getHost(hostname); > }); > }; > this.removeHost = function(hostname) { > var request_options = cluster.server.getBaseRequest(); > request_options.method = 'DELETE'; > request_options.path = PATH_PREFIX + 'clusters/' + cluster.name + > '/hosts'; > return performRequest(request_options); > }; > this.updateHost = function() { throw new Error('Not implemented'); }; > return this; > }; > > exports.Server = function(host, port, user, pass) { > var server = this; > this.host = host; > this.port = port; > this.user = user; > this.pass = pass; > this.getBaseRequest = function() { > return { > host: host, > port: port.toString(), > auth: user + ':' + pass > }; > }; > this.listClusterNames = function() { > var request = server.getBaseRequest(); > request.path = PATH_PREFIX + 'clusters'; > request.method = 'GET'; > return performRequest(request).then(function(res) { > return res.body.items.map(function(clusterInfo) { > return clusterInfo.Clusters.cluster_name; > }); > }); > }; > this.getCluster = function(clusterName) { > var request = server.getBaseRequest(); > request.path = PATH_PREFIX + 'clusters/' + clusterName; > request.method = 'GET'; > return performRequest(request).then(function(res) { > return new Cluster(server, res.body); > }); > }; > this.createCluster = function(clusterName, version) { > var request = server.getBaseRequest(); > request.path = PATH_PREFIX + 'clusters/' + clusterName; > request.method = 'POST'; > request.body = { "Clusters": { "version": version }}; > return performRequest(request).then(function(res) { > return server.getCluster(clusterName); > }); > }; > this.updateCluster = function() { throw new Error('Not implemented'); }; > this.removeCluster = function(clusterName) { > var request = server.getBaseRequest(); > request.path = PATH_PREFIX + 'clusters/' + clusterName; > request.method = 'DELETE'; > return performRequest(request); > }; > return this; > }; > ;'use strict'; > > process.on('uncaughtException', function(err) { > console.log(err); > console.log(err.stack); > }); > > var Q = require('q'); > var ambari = require('./ambari'); > var server = new ambari.Server('localhost', 8080, 'admin', 'admin'); > > server.createCluster('test', 'HDP-1.2.0').then(function(cluster) { > var serviceD = Q.defer(); > var servicePromise = serviceD.promise; > Q.all([ > cluster.addService('HDFS'), > cluster.addConfiguration('core-site', '1', { > 'fs.default.name' : 'local', > 'fs.checkpoint.dir': '/hdfs/checkpoint', > 'hadoop.security.authentication': 'simple', > 'hadoop.security.authorization': 'false' > }), > cluster.addConfiguration('hdfs-site', '1', { > 'dfs.name.dir': '/hdfs/name', > 'dfs.support.append': 'true', > 'dfs.webhdfs.enabled': 'false', > 'dfs.datanode.failed.volume.tolerated': '0', > 'dfs.block.local-path-access.user': 'root', > 'dfs.data.dir': '/hdfs/data', > 'dfs.replication': '1', > 'dfs.datanode.address': '0.0.0.0:50010', > 'dfs.datanode.http.address': '0.0.0.0:50075', > 'dfs.http.address': '0.0.0.0:50070', > > }) > ]).spread(function(service) { > serviceD.resolve(service); > }); > return servicePromise.then(function(service) { > return Q.all([ > service.addComponent('NAMENODE'), > service.addComponent('DATANODE'), > service.addComponent('HDFS_CLIENT') > ]).then(function() { return service }); > }).then(function(service) { > return Q.all([ > > service.cluster.addHost('1ddf42d1-0539-45f7-807a-a846a0cab9d8').then(function(host) > { > return host.addComponents(['NAMENODE', 'DATANODE', > 'HDFS_CLIENT']); > }), > service.applyConfiguration('core-site', '1'), > service.applyConfiguration('hdfs-site', '1') > ]).then(function() { return service; }); > }).then(function(service) { > return service.install().then(function() { return service; }); > }); > }).done();
