Apache-Hadoop-WebHDFS

 view release on metacpan or  search on metacpan

lib/Apache/Hadoop/WebHDFS.pm  view on Meta::CPAN

    if ($_[0]->{'buffersize'}) { $buffersize = $_[0]->{'buffersize'};  } 

    my $url;
	if ($self->{'authmethod'} eq 'gssapi') { 
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file . '?op=OPEN';	
	} elsif ( $self->{'authmethod'} eq 'unsecure' ) {
       croak ("I need a 'user' value if authmethod is 'none'") if ( !$self->{'user'} ) ;
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file . '?op=OPEN' . '&user.name=' . $self->{'user'};
	} elsif ( $self->{'authmethod'} eq 'doas' ) {
       croak ("I need a 'user' value if authmethod is 'doas'") if ( !$self->{'user'} ) ;
       croak ("I need a 'doas_user' value if authmethod is 'doas'") if ( !$self->{'doas_user'} ) ;
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file . '?op=OPEN' . '&user.name=' . $self->{'user'} . '&doas=' . $self->{'doas_user'};
	}
    if ( $self->{'webhdfstoken'} ) {
        $url = $url . "&delegation=" . $self->{'webhdfstoken'};
    }

    if ($offset) { 
        $url = $url . "&offset=" . $offset;
    }

    if ($length) { 
        $url = $url . "&length=" . $length;
    }

    if ($buffersize) { 
        $url = $url . "&buffersize=" . $buffersize;
    }

    $self->get( $url );
    return $self;
}

sub getfilestatus {
	# curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILESTATUS"
    my ( $self, $file ) = undef;
    $self = shift;
    if ($_[0]->{'file'}) { $file = $_[0]->{'file'}; } else { croak ("Need HDFS filename before listing status") ;}
    
    my $url;
	if ($self->{'authmethod'} eq 'gssapi') { 
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file . '?op=GETFILESTATUS';	
	} elsif ( $self->{'authmethod'} eq 'unsecure' ) {
       croak ("I need a 'user' value if authmethod is 'none'") if ( !$self->{'user'} ) ;
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file . '?op=GETFILESTATUS' . '&user.name=' . $self->{'user'};
	} elsif ( $self->{'authmethod'} eq 'doas' ) {
       croak ("I need a 'user' value if authmethod is 'doas'") if ( !$self->{'user'} ) ;
       croak ("I need a 'doas_user' value if authmethod is 'doas'") if ( !$self->{'doas_user'} ) ;
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file . '?op=GETFILESTATUS' . '&user.name=' . $self->{'user'} . '&doas=' . $self->{'doas_user'};
	}
    if ( $self->{'webhdfstoken'} ) {
        $url = $url . "&delegation=" . $self->{'webhdfstoken'};
    }
    $self->get( $url );
    return $self;
}

# Added as  LWP::UserAgent and WWW:Mechanize don't have delete 
# stolen from http://code.google.com/p/www-mechanize/issues/detail?id=219
sub _SUPER_delete {
    require HTTP::Request::Common;
    my($self, @parameters) = @_;
    my @suff = $self->_process_colonic_headers(\@parameters,1);
    return $self->request( HTTP::Request::Common::DELETE( @parameters ), @suff );
}

sub Delete {
	# curl -i -X DELETE "http://<host>:<port>/webhdfs/v1/<path>?op=DELETE[&recursive=<true|false>]"
    my ( $path, $recursive, $url ) = undef;
    my $self = shift; 

    if ($_[0]->{'path'})       { $path       = $_[0]->{'path'};     } else { croak("No HDFS path given to delete"); }
    if ($_[0]->{'recursive'})  { $recursive  = $_[0]->{'recursive'};} 

	if ($self->{'authmethod'} eq 'gssapi') { 
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $path . '?op=DELETE';	
	} elsif ( $self->{'authmethod'} eq 'unsecure' ) {
       croak ("I need a 'user' value if authmethod is 'none'") if ( !$self->{'user'} ) ;
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $path . '?op=DELETE' . '&user.name=' . $self->{'user'};
	} elsif ( $self->{'authmethod'} eq 'doas' ) {
       croak ("I need a 'user' value if authmethod is 'doas'") if ( !$self->{'user'} ) ;
       croak ("I need a 'doas_user' value if authmethod is 'doas'") if ( !$self->{'doas_user'} ) ;
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $path . '?op=DELETE' . '&user.name=' . $self->{'user'} . '&doas=' . $self->{'doas_user'};
	}
    if ( $self->{'webhdfstoken'} ) {
        $url = $url . "&delegation=" . $self->{'webhdfstoken'};
    }

    if ($recursive) {
       $url = $url . "&recursive=true";
    } else {
       $url = $url . "&recursive=false";
    }

    $self->_SUPER_delete( $url );
    return $self;
}


sub create {
	# curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATE
	#                                         [&overwrite=<true|false>][&blocksize=<LONG>][&replication=<SHORT>]
	#                                         [&permission=<OCTAL>][&buffersize=<INT>]"
    my ( $self, $content, $file_src, $file_dest, $perms, $overwrite, $blocksize, $replication, $buffersize ) = undef;
    $self = shift; 
    if ($_[0]->{'permission'})  { $perms       = $_[0]->{'permission'};  } else { $perms = '000'; }
    if ($_[0]->{'overwrite'})   { $overwrite   = $_[0]->{'overwrite'};    } else { $overwrite='false'; } 
    if ($_[0]->{'srcfile'})     { $file_src    = $_[0]->{'srcfile'};      } else { croak ("Need local source file to copy to HDFS") ;}
    if ($_[0]->{'dstfile'})     { $file_dest   = $_[0]->{'dstfile'};      } else { croak ("Need HDFS destination before file create can happen") ;}
    if ($_[0]->{'blocksize'})   { $blocksize   = $_[0]->{'blocksize'};    }
    if ($_[0]->{'replication'}) { $replication = $_[0]->{'replication'};  }
    if ($_[0]->{'buffersize'})  { $buffersize  = $_[0]->{'buffersize'};   }
    my $url;
	if ($self->{'authmethod'} eq 'gssapi') { 
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file_dest . '?op=CREATE&permission=' . $perms . '&overwrite=' . $overwrite ;	
	} elsif ( $self->{'authmethod'} eq 'unsecure' ) {
       croak ("I need a 'user' value if authmethod is 'none'") if ( !$self->{'user'} ) ;
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file_dest . '?op=CREATE&permission=' . $perms . '&overwrite=' . $overwrite . '&user.name=' . $self->{'user'};	
	} elsif ( $self->{'authmethod'} eq 'doas' ) {
       croak ("I need a 'user' value if authmethod is 'doas'") if ( !$self->{'user'} ) ;
       croak ("I need a 'doas_user' value if authmethod is 'doas'") if ( !$self->{'doas_user'} ) ;
       $url = 'http://' . $self->{'namenode'} . ':' . $self->{'namenodeport'} . '/webhdfs/v1' . $file_dest . '?op=CREATE&permission=' . $perms . '&overwrite=' . $overwrite . '&user.name=' . $self->{'user'} . '&doas=' . $self->{'doas_user'};
	}



( run in 2.719 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )