Support Questions

Find answers, ask questions, and share your expertise
Announcements
Check out our newest addition to the community, the Cloudera Data Analytics (CDA) group hub.

Rack topology script not working ERROR: script /etc/hadoop/conf/topology.sh returned 0 values when 1

Contributor

Hi,

I have written my own topology script and made required configuration in cloudera manager>hdfs>configurations>net.topology.script.file.name property. But the rack topology is not updated and could see ERROR in namenode log as "script /etc/hadoop/conf/topology.sh returned 0 values when 1 were expected.". Please help to resolve the issue. 

 

topology.sh

#!/bin/bash

nodearg=$1  #get the first argument

while [ $# -gt 0 ]; do

        for line in `cat topology.data`;  do  #read line from topology.data file

        node=$(echo $line|awk -F ',' '{print $1}')   #parse the data and get the hostname to compare

        result=""

         if [ $nodearg = $node ]; then          #compare the hostname in the file with the argument

                 result=$(echo $line|awk -F ','  '{print $2}')  #parse the file again to recive the rack details for the host

                break;

         else

                result="/default/rack-0"

         fi

        done

 

shift

echo $result

done

 

topology.data

hdp-1.hdp.com,/default/rack-1

hdp-2.hdp.com,/default/rack-2

hdp-3.hdp.com,/default/rack-3

19.1.0.13,/default/rack-1

19.1.0.14,/default/rack-2

19.1.0.15,/default/rack-3

 

Output:

$ ./topology.sh hdp-1. hdp.com

/default/rack-1

$ ./topology.sh 19.1.0.14

/default/rack-2

 

 

Thanks and regards

Sidharth

 

1 ACCEPTED SOLUTION

Contributor

Hi,

 

Thanks for your response and help.

 

Everytime i make changes in configs it re-deploy the configurations which was deleting my topology script. So i pushed my script to /mnt/topology/ directory and also tweak the script a bit

It look like below now 

 

topology.sh

#!/bin/bash

while [ $# -gt 0 ]; do

  nodearg=$1  #get the first argument

        for line in `cat /mnt/topology/topology.data`;  do  #read line from topology.data file

        node=$(echo $line|awk -F ',' '{print $1}')   #parse the data and get the hostname to compare

        result=""

         if [ $nodearg = $node ]; then          #compare the hostname in the file with the argument

                 result=$(echo $line|awk -F ','  '{print $2}')  #parse the file again to recive the rack details for the host

                break;

         else

                result="/default/rack-0"

         fi

        done

 

shift

echo $result

done

View solution in original post

6 REPLIES 6

Master Collaborator
The first explanation could be that the script is called without argument maybe?

Contributor
So, in that case it will satisfy the first if condition. Do you know how
hadoop invoke topology script? I mean the parameters it passes along with
script file.

Super Guru

Contributor

Hi,

 

Thanks for your response and help.

 

Everytime i make changes in configs it re-deploy the configurations which was deleting my topology script. So i pushed my script to /mnt/topology/ directory and also tweak the script a bit

It look like below now 

 

topology.sh

#!/bin/bash

while [ $# -gt 0 ]; do

  nodearg=$1  #get the first argument

        for line in `cat /mnt/topology/topology.data`;  do  #read line from topology.data file

        node=$(echo $line|awk -F ',' '{print $1}')   #parse the data and get the hostname to compare

        result=""

         if [ $nodearg = $node ]; then          #compare the hostname in the file with the argument

                 result=$(echo $line|awk -F ','  '{print $2}')  #parse the file again to recive the rack details for the host

                break;

         else

                result="/default/rack-0"

         fi

        done

 

shift

echo $result

done

Super Guru

@sid2707,

 

Very cool and thanks for sharing your solution!

Super Guru

@sid2707,

 

Sounds like you may need to add some debugging to your shell script to identify what values are being evaluated and why no results are being returned.

Take a Tour of the Community
Don't have an account?
Your experience may be limited. Sign in to explore more.