В HDFS: как проверить, есть ли у 2 каталогов один родительский каталог - PullRequest
0 голосов
/ 18 октября 2018

Есть ли команда HDFS, чтобы проверить, имеют ли 2 каталога в HDFS общий родительский каталог.

Например:

$ hadoop fs -ls -R  /user/username/data/
/user/username/data/LIST_1539724717/SUBLIST_1533057294, 
/user/username/data/LIST_1539724717/SUBLIST_1533873826/UI,
/user/username/data/LIST_1539724717/SUBLIST_1533873826/NEWDATA/A,
/user/username/data/LIST_1539724717/SUBLIST_1533873826/NEWDATA/A/N,
/user/username/data/LIST_1539724717/SUBLIST_1533873826/NEWDATA/M/K/L,
/user/username/data/LIST_1539724717/SUBLIST_1533873826/NEWDATA/O/P/P,
/user/username/data/LIST_1539724717/SUBLIST_1533873826/NEWDATA/wkejdhew,
/user/username/data/LIST_1539724717/SUBLIST_1533873826/NEWDATA/oi32u,
/user/username/data/ARRAY_1539724717/SUBLIST_1533057294, 
/user/username/data/ARRAY_1539724717/SUBLIST_1533873826/UI,
/user/username/data/ARRAY_1539724717/SUBLIST_1533873826/NEWDATA/A,
/user/username/data/ARRAY_1539724717/SUBLIST_1533873826/NEWDATA/A/N,
/user/username/data/ARRAY_1539724717/SUBLIST_1533873826/NEWDATA/M/K/L,
/user/username/data/ARRAY_1539724717/SUBLIST_1533873826/NEWDATA/O/P/P,
/user/username/data/ARRAY_1539724717/SUBLIST_1533873826/NEWDATA/wkejdhew,
/user/username/data/ARRAY_1539724717/SUBLIST_1533873826/NEWDATA/oi32u,

Все эти каталоги имеют один и тот же родительский каталог /user/username/data/LIST_1539724717/SUBLIST_1533057294 и /user/username/data/ARRAY_1539724717/SUBLIST_1533057294.Как мы можем проверить это в bash?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018
for value in `hadoop fs -ls ${DIR}| awk '{print $NF}' | tr '\n' ' '`
do
    if [ "$value" != "items" ]; then
        #add values into "results" array
        log "info" "$value"
        results+=("$value")
    fi
done

#Loop through each value inside the array ie " $DIR"
for i in "${results[@]}"
do
    oldVal=`hadoop fs -ls -R ${i} | sed 's/  */ /g' | cut -d\  -f 1,8 --output-delimiter=',' | grep ^d | cut -d, -f2`
    log "info" "Checking sub-directories under $i ! "
    #This takes the directory name as its input and extract the directories only for the provided runID
        for val in `hadoop fs -ls -R $i  | grep  1539724717 |sed 's/  */ /g' | cut -d\  -f 1,8 --output-delimiter=',' | grep ^d | cut -d, -f2`
          do

           if [[ ! ${val} =~ ${oldVal} ]]; then
               oldVal=$val
               directory+=("${oldVal}")
           fi
        done
done

directory массив содержит все необходимые каталоги.

0 голосов
/ 19 октября 2018

Создавая сценарий оболочки, в котором имя каталога может передаваться как переменная, мы можем проверить, принадлежат ли оба к одному и тому же родительскому элементу.

...