Net-Hadoop-WebHDFS
view release on metacpan or search on metacpan
lib/Net/Hadoop/WebHDFS.pm view on Meta::CPAN
sub getfilestatus { (shift)->stat(@_); }
# curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS"
sub list {
my ($self, $path, %options) = @_;
my $err = $self->check_options('LISTSTATUS', %options);
croak $err if $err;
my $res = $self->operate_requests('GET', $path, 'LISTSTATUS', \%options);
$self->check_success_json($res, 'FileStatuses')->{FileStatus};
}
sub liststatus { (shift)->list(@_); }
# curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETCONTENTSUMMARY"
sub content_summary {
my ($self, $path, %options) = @_;
my $err = $self->check_options('GETCONTENTSUMMARY', %options);
croak $err if $err;
my $res = $self->operate_requests('GET', $path, 'GETCONTENTSUMMARY', \%options);
$self->check_success_json($res, 'ContentSummary');
}
sub getcontentsummary { (shift)->content_summary(@_); }
# curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM"
sub checksum {
my ($self, $path, %options) = @_;
my $err = $self->check_options('GETFILECHECKSUM', %options);
croak $err if $err;
my $res = $self->operate_requests('GET', $path, 'GETFILECHECKSUM', \%options);
$self->check_success_json($res, 'FileChecksum');
}
sub getfilechecksum { (shift)->checksum(@_); }
# curl -i "http://<HOST>:<PORT>/webhdfs/v1/?op=GETHOMEDIRECTORY"
sub homedir {
my ($self, %options) = @_;
my $err = $self->check_options('GETHOMEDIRECTORY', %options);
croak $err if $err;
my $res = $self->operate_requests('GET', '/', 'GETHOMEDIRECTORY', \%options);
$self->check_success_json($res, 'Path');
}
sub gethomedirectory { (shift)->homedir(@_); }
# curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETPERMISSION
# [&permission=<OCTAL>]"
sub chmod {
my ($self, $path, $mode, %options) = @_;
my $err = $self->check_options('SETPERMISSION', %options);
croak $err if $err;
my $res = $self->operate_requests('PUT', $path, 'SETPERMISSION', {%options, permission => $mode});
$res->{code} == 200;
}
sub setpermission { (shift)->chmod(@_); }
# curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETOWNER
# [&owner=<USER>][&group=<GROUP>]"
sub chown {
my ($self, $path, %options) = @_;
my $err = $self->check_options('SETOWNER', %options);
croak $err if $err;
unless (defined($options{owner}) or defined($options{group})) {
croak "'chown' needs at least one of owner or group";
}
my $res = $self->operate_requests('PUT', $path, 'SETOWNER', \%options);
$res->{code} == 200;
}
$OPT_TABLE{SETOWNER} = ['owner', 'group'];
sub setowner { (shift)->chown(@_); }
# curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETREPLICATION
# [&replication=<SHORT>]"
sub replication {
my ($self, $path, $replnum, %options) = @_;
my $err = $self->check_options('SETREPLICATION', %options);
croak $err if $err;
my $res = $self->operate_requests('PUT', $path, 'SETREPLICATION', {%options, replication => $replnum});
$self->check_success_json($res, 'boolean');
}
sub setreplication { (shift)->replication(@_); }
# curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETTIMES
# [&modificationtime=<TIME>][&accesstime=<TIME>]"
# modificationtime: radix-10 long integer
# accesstime: radix-10 long integer
$OPT_TABLE{SETTIMES} = [ qw( modificationtime accesstime ) ];
sub touch {
my ($self, $path, %options) = @_;
my $err = $self->check_options('SETTIMES', %options);
croak $err if $err;
unless (defined($options{modificationtime}) or defined($options{accesstime})) {
croak "'touch' needs at least one of modificationtime or accesstime";
}
my $res = $self->operate_requests('PUT', $path, 'SETTIMES', \%options);
$res->{code} == 200;
}
#---------------------------- EXTENDED ATTRIBUTES START -----------------------#
sub xattr {
my($self, $path, $action, @args) = @_;
croak "No action defined for xattr" if ! $action;
my $target = sprintf '_%s_xattr', $action;
my $target2 = sprintf '_%s_xattrs', $action;
my $method = $self->can( $target )
|| $self->can( $target2 )
|| croak "invalid action `$action`";
$self->$method( $path, @args );
}
# curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETXATTRS
# &xattr.name=<XATTRNAME>&encoding=<ENCODING>"
#
# curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETXATTRS
# &xattr.name=<XATTRNAME1>&xattr.name=<XATTRNAME2>&encoding=<ENCODING>"
$OPT_TABLE{GETXATTRS} = [qw( names encoding flatten )];
sub _get_xattrs {
my($self, $path, %options) = @_;
my $err = $self->check_options('GETXATTRS', %options);
croak $err if $err;
my $flatten = delete $options{flatten};
# limit to a subset? will return all of the attributes otherwise
if ( my $name = delete $options{names} ) {
croak "getxattrs: name needs to be an arrayref" if ref $name ne 'ARRAY';
lib/Net/Hadoop/WebHDFS.pm view on Meta::CPAN
I<%options> might be:
=over
=item buffersize :Int
=back
=head3 C<< $client->read($path, %options) :Str >>
Open file of I<$path> and returns its content. Alias: B<open>.
I<%options> might be:
=over
=item offset :Int
=item length :Int
=item buffersize :Int
=back
=head3 C<< $client->mkdir($path, [permission => '0644']) :Bool >>
Make directory I<$path> on HDFS. Alias: B<mkdirs>.
=head3 C<< $client->rename($path, $dest) :Bool >>
Rename file or directory as I<$dest>.
=head3 C<< $client->delete($path, [recursive => 0/1]) :Bool >>
Delete file I<$path> from HDFS. With optional I<< recursive => 1 >>, files and directories are removed recursively (default false).
=head3 C<< $client->stat($path) :HashRef >>
Get and returns file status object for I<$path>. Alias: B<getfilestatus>.
=head3 C<< $client->list($path) :ArrayRef >>
Get list of files in directory I<$path>, and returns these status objects arrayref. Alias: B<liststatus>.
=head3 C<< $client->content_summary($path) :HashRef >>
Get 'content summary' object and returns it. Alias: B<getcontentsummary>.
=head3 C<< $client->checksum($path) :HashRef >>
Get checksum information object for I<$path>. Alias: B<getfilechecksum>.
=head3 C<< $client->homedir() :Str >>
Get accessing user's home directory path. Alias: B<gethomedirectory>.
=head3 C<< $client->chmod($path, $mode) :Bool >>
Set permission of I<$path> as octal I<$mode>. Alias: B<setpermission>.
=head3 C<< $client->chown($path, [owner => 'username', group => 'groupname']) :Bool >>
Set owner or group of I<$path>. One of owner/group must be specified. Alias: B<setowner>.
=head3 C<< $client->replication($path, $replnum) :Bool >>
Set replica number for I<$path>. Alias: B<setreplication>.
=head3 C<< $client->touch($path, [modificationtime => $mtime, accesstime => $atime]) :Bool >>
Set mtime/atime of I<$path>. Alias: B<settimes>.
=head3 C<< $client->touchz($path) :Bool >>
Create a zero length file.
=head3 C<< $client->checkaccess( $path, $fsaction ) :Bool >>
Test if the user has the rights to do a file system action.
=head3 C<< $client->concat( $path, @source_paths ) :Bool >>
Concatenate paths.
=head3 C<< $client->truncate( $path, $newlength ) :Bool >>
Truncate a path contents.
=head3 C<< $client->delegation_token( $action, $path, @args ) >>
This is a method wrapping the multiple methods for delegation token
handling.
my $token = $client->delegation_token( get => $path );
print "Token: $token\n";
my $milisec = $client->delegation_token( renew => $token );
printf "Token expiration renewed until %s\n", scalar localtime $milisec / 1000;
if ( $client->delegation_token( cancel => $token ) ) {
print "Token cancelled. There will be a new one created.\n";
my $token_new = $client->delegation_token( get => $path );
print "New token: $token_new\n";
printf "New token is %s\n", $token_new eq $token ? 'the same' : 'different';
}
else {
warn "Failed to cancel token $token!";
}
=head4 C<< $client->delegation_token( get => $path, [renewer => $username, service => $service, kind => $kind ] ) :Str ) >>
Returns the delegation token id for the specified path.
=head4 C<< $client->delegation_token( renew => $token ) :Int >>
Returns the new expiration time for the specified delegation token in miliseconds.
=head4 C<< $client->delegation_token( cancel => $token ) :Bool >>
Cancels the specified delegation token (which will force a new one to be created.
( run in 1.777 second using v1.01-cache-2.11-cpan-71847e10f99 )