NAME
Net::Hadoop::WebHDFS - Client library for Hadoop WebHDFS and HttpFs
SYNOPSIS
use
Net::Hadoop::WebHDFS;
my
$client
= Net::Hadoop::WebHDFS->new(
host
=>
'hostname.local'
,
port
=> 50070 );
my
$statusArrayRef
=
$client
->list(
'/'
);
my
$contentData
=
$client
->
read
(
'/data.txt'
);
$client
->create(
'/foo/bar/data.bin'
,
$bindata
);
DESCRIPTION
This module supports WebHDFS v1 on Hadoop 1.x (and CDH4.0.0 or later), and HttpFs on Hadoop 2.x (and CDH4 or later). WebHDFS/HttpFs has two authentication methods: pseudo authentication and Kerberos, but this module supports pseudo authentication only.
METHODS
Net::Hadoop::WebHDFS class method and instance methods.
CLASS METHODS
Net::Hadoop::WebHDFS->new( %args ) :Net::Hadoop::WebHDFS
Creates and returns a new client instance with %args. If you are using HttpFs, set httpfs_mode => 1 and port => 14000.
%args might be:
- host :Str = "namenode.local"
- port :Int = 50070
- standby_host :Str = "standby.namenode.local"
- standby_port :Int = 50070
- username :Str = "hadoop"
- doas :Str = "hdfs"
- httpfs_mode :Bool = 0/1
INSTANCE METHODS
$client->create($path, $body, %options) :Bool
Creates file on HDFS with $body data. If you want to create blank file, pass blank string.
%options might be:
- overwrite :Str = "true" or "false"
- blocksize :Int
- replication :Int
- permission :Str = "0600"
- buffersize :Int
$client->append($path, $body, %options) :Bool
Append $body data to $path file.
%options might be:
$client->read($path, %options) :Str
Open file of $path and returns its content. Alias: open.
%options might be:
$client->mkdir($path, [permission => '0644']) :Bool
Make directory $path on HDFS. Alias: mkdirs.
$client->rename($path, $dest) :Bool
Rename file or directory as $dest.
$client->delete($path, [recursive => 0/1]) :Bool
Delete file $path from HDFS. With optional recursive => 1, files and directories are removed recursively (default false).
$client->stat($path) :HashRef
Get and returns file status object for $path. Alias: getfilestatus.
$client->list($path) :ArrayRef
Get list of files in directory $path, and returns these status objects arrayref. Alias: liststatus.
$client->content_summary($path) :HashRef
Get 'content summary' object and returns it. Alias: getcontentsummary.
$client->checksum($path) :HashRef
Get checksum information object for $path. Alias: getfilechecksum.
$client->homedir() :Str
Get accessing user's home directory path. Alias: gethomedirectory.
$client->chmod($path, $mode) :Bool
Set permission of $path as octal $mode. Alias: setpermission.
$client->chown($path, [owner => 'username', group => 'groupname']) :Bool
Set owner or group of $path. One of owner/group must be specified. Alias: setowner.
$client->replication($path, $replnum) :Bool
Set replica number for $path. Alias: setreplication.
$client->touch($path, [modificationtime => $mtime, accesstime => $atime]) :Bool
Set mtime/atime of $path. Alias: settimes.
$client->touchz($path) :Bool
Create a zero length file.
$client->checkaccess( $path, $fsaction ) :Bool
Test if the user has the rights to do a file system action.
$client->concat( $path, @source_paths ) :Bool
Concatenate paths.
$client->truncate( $path, $newlength ) :Bool
Truncate a path contents.
$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
);
"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
) ) {
"Token cancelled. There will be a new one created.\n"
;
my
$token_new
=
$client
->delegation_token(
get
=>
$path
);
"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!"
;
}
$client->delegation_token( get => $path, [renewer => $username, service => $service, kind => $kind ] ) :Str )
Returns the delegation token id for the specified path.
$client->delegation_token( renew => $token ) :Int
Returns the new expiration time for the specified delegation token in miliseconds.
$client->delegation_token( cancel => $token ) :Bool
Cancels the specified delegation token (which will force a new one to be created.
$client->snapshot( $path, $action => @args )
This is a method wrapping the multiple methods for snapshot handling.
$client->snapshot( $path, create => [, $snapshotname ] ) :Str
Creates a new snaphot on the specified path and returns the name of the snapshot.
$client->snapshot( $path, rename => $oldsnapshotname, $snapshotname ) :Bool
Renames the snaphot.
$client->snapshot( $path, delete => $snapshotname ) :Bool
Deletes the specified snapshot.
$client->xattr( $path, $action, @args )
This is a method wrapping the multiple methods for extended attributes handling.
my
@attr_names
=
$client
->xattr(
$path
,
'list'
);
my
%attr
=
$client
->xattr(
$path
,
get
=>
flatten
=> 1 );
if
( !
exists
$attr
{
'user.bar'
} ) {
warn
"set user.bar = 42\n"
;
$client
->xattr(
$path
,
create
=>
'user.bar'
=> 42 )
||
warn
"Failed to create user.bar"
;
}
else
{
warn
"alter user.bar = 24\n"
;
$client
->xattr(
$path
,
replace
=>
'user.bar'
=> 24 )
||
warn
"Failed to replace user.bar"
;
;
}
if
(
exists
$attr
{
'user.foo'
} ) {
warn
"No more foo\n"
;
$client
->xattr(
$path
,
remove
=>
'user.foo'
)
||
warn
"Failed to remove user.foo"
;
;
}
$client->xattr( $path, get => [, names => \@attr_names] [, flatten => 1 ] [, encoding => $enc ] ) :Struct
Returns the extended attribute key/value pairs on a path. The default data set is an array of hashrefs with the pairs, however if you set <flatten
> to a true value then a simple hash will be returned.
It is also possible to fetch a subset of the attributes if you specify the names of them with the <names
> option.
$client->xattr( $path, 'list' ) :List
This method will return the names of all the attributes set on <$path
>.
$client->xattr( $path, create => $attr_name => $value ) :Bool
It is possible to create a new extended attribute on a path with this method.
$client->xattr( $path, replace => $attr_name => $value ) :Bool
It is possible to replace the value of an existing extended attribute on a path with this method.
$client->xattr( $path, remove => $attr_name ) :Bool
Deletes the speficied attribute on <$path
>.
EXTENSIONS
$client->exists($path) :Bool
Returns the stat()
hash if successful, and false otherwise. Dies on interface errors.
$client->find($path, $callback, $options_hash)
Loops recursively over the specified path:
$client
->find(
'/user'
,
sub
{
my
(
$cwd
,
$path
) =
@_
;
my
$date
=
localtime
$path
->{modificationTime};
my
$type
=
$path
->{type} eq
q{DIRECTORY}
?
"[dir ]"
:
"[file]"
;
my
$size
=
sprintf
"% 10s"
,
$path
->{blockSize}
?
sprintf
"%.2f MB"
,
$path
->{blockSize} / 1024**2
: 0;
"$type $size $path->{permission} $path->{owner}:$path->{group} $cwd/$path->{pathSuffix}\n"
;
},
{
# optional
re_ignore
=>
qr{
\A # Filter some filenames out even before reaching the callback
[_] # logs and meta data, java junk, _SUCCESS files, etc.
}
xms,
}
);
AUTHOR
TAGOMORI Satoshi <tagomoris {at} gmail.com>
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.