hdfs_mkdir(options, callback)
Create an HDFS directory.
Options include:
target
krb5_user
krb5_user.principal
krb5_user.password
krb5_user.keytab
mode
user
group
parent
parent.mode
parent.user
parent.group
Exmple
@registry.register 'hdfs_mdkir', 'ryba/lib/hdfs_mdkir'
@hdfs_mdkir
target: '/path/to/dir'
user: 'myself'
Source Code
module.exports = ({options}, callback) ->
throw callback Error "Required option: 'target'" unless options.target
options.mode ?= ''
options.mode = mode.stringify options.mode
options.user ?= ''
options.group ?= ''
options.parent ?= {}
options.parent.mode ?= options.mode
options.parent.mode = mode.stringify options.parent.mode if options.parent.mode
options.parent.user ?= options.user
options.parent.group ?= options.group
wrap = (cmd) ->
return cmd unless options.krb5_user
throw Error "Required Options: krb5_user.principal" unless options.krb5_user.principal
if options.krb5_user.password
"echo '#{options.krb5_user.password}' | kinit #{options.krb5_user.principal} >/dev/null && {\n#{cmd}\n}"
else if options.krb5_user.keytab
"kinit -kt #{options.krb5_user.keytab} #{options.krb5_user.principal} >/dev/null && {\n#{cmd}\n}"
conf_opt = if options.conf_dir then "--config #{options.conf_dir}" else '--config /etc/hadoop/conf'
@system.execute
cmd: wrap """
target="#{options.target}"
if hdfs #{conf_opt} dfs -test -d $target; then
# TODO: compare permissions and ownership
exit 3;
fi
function create_dir {
dir=$1
mode=$2
user=$3
group=$4
echo "Create dir $dir"
# Use -p to prevent race conditions
hdfs #{conf_opt} dfs -mkdir -p $dir
if [ -n "$mode" ]; then
echo "Change permissions to $mode"
hdfs #{conf_opt} dfs -chmod $mode $dir
fi
if [ -n "$user" ]; then
echo "Change owner ownership to $user"
hdfs #{conf_opt} dfs -chown $user $dir
fi
if [ -n "$group" ]; then
echo "Change group ownership to $group"
hdfs #{conf_opt} dfs -chgrp $group $dir
fi
}
function create_parent_dir {
local dir=`dirname $1`
if [ $dir == "/" ]; then return; fi
if hdfs #{conf_opt} dfs -test -d $dir; then return; fi
create_parent_dir $dir
# echo "Create parent directory: $dir"
create_dir \
"$dir" \
"#{options.parent.mode or ''}" \
"#{options.parent.user or ''}" \
"#{options.parent.group or ''}"
}
create_parent_dir $target
create_dir \
$target \
"#{options.mode or ''}" \
"#{options.user or ''}" \
"#{options.group or ''}"
"""
code_skipped: 3
trap: true
.next callback
Dependecies
{mode} = require '@nikitajs/core/lib/misc'