Search code examples
virtualboxaccumulo

Accumulo Overview console not reachable outside of VirtualBox VM


I am running Accumulo 1.5 in an Ubuntu 12.04 VirtualBox VM. I have set the accumulo-site.xml instance.zookeeper.host file to the VM's IP address, and I can connect to accumulo and run queries from a remote client machine. From the client machine, I can also use a browser to see the hadoop NameNode, browse the filesystem, etc. But I cannot connect to the Accumulo Overview page (port 50095) from anywhere else than directly from the Accumulo VM. There is no firewall between the VM and the client, and besides the Accumulo Overview page not being reachable, everything else seems to work fine.

Is there a config setting that I need to change to allow outside access to the Accumulo Overview console?

thanks


Solution

  • I was able to get the Accumulo monitor to bind to all network interfaces by manually applying this patch: https://git-wip-us.apache.org/repos/asf?p=accumulo.git;a=commit;h=7655de68

    In conf/accumulo-env.sh add:

    # Should the monitor bind to all network interfaces -- default: false
    export ACCUMULO_MONITOR_BIND_ALL="true"
    

    In bin/config.sh add:

    # ACCUMULO-1985 provide a way to use the scripts and still bind to all network interfaces
    export ACCUMULO_MONITOR_BIND_ALL=${ACCUMULO_MONITOR_BIND_ALL:-"false"}
    

    And modify bin/start-server.sh to match:

    SOURCE="${BASH_SOURCE[0]}"
    while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
       bin="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
       SOURCE="$(readlink "$SOURCE")"
       [[ $SOURCE != /* ]] && SOURCE="$bin/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
    done
    bin="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
    # Stop: Resolve Script Directory
    
    . "$bin"/config.sh
    
    HOST="$1"
    host "$1" >/dev/null 2>/dev/null
    if [ $? -ne 0 ]; then
       LOGHOST="$1"
    else
       LOGHOST=$(host "$1" | head -1 | cut -d' ' -f1)
    fi
    ADDRESS="$1"
    SERVICE="$2"
    LONGNAME="$3"
    if [ -z "$LONGNAME" ]; then
       LONGNAME="$2"
    fi
    SLAVES=$( wc -l < ${ACCUMULO_HOME}/conf/slaves )
    
    IFCONFIG=/sbin/ifconfig
    if [ ! -x $IFCONFIG ]; then
       IFCONFIG='/bin/netstat -ie'
    fi
    
    # ACCUMULO-1985 Allow monitor to bind on all interfaces
    if [ ${SERVICE} == "monitor" -a ${ACCUMULO_MONITOR_BIND_ALL} == "true" ]; then
        ADDRESS="0.0.0.0"
    fi
    
    ip=$($IFCONFIG 2>/dev/null| grep inet[^6] | awk '{print $2}' | sed 's/addr://' | grep -v 0.0.0.0 | grep -v 127.0.0.1 | head -n 1)
    if [ $? != 0 ]
    then
       ip=$(python -c 'import socket as s; print s.gethostbyname(s.getfqdn())')
    fi
    
    if [ "$HOST" = "localhost" -o "$HOST" = "`hostname`" -o "$HOST" = "$ip" ]; then
       PID=$(ps -ef | egrep ${ACCUMULO_HOME}/.*/accumulo.*.jar | grep "Main $SERVICE" | grep -v grep | awk {'print $2'} | head -1)
    else
       PID=$($SSH $HOST ps -ef | egrep ${ACCUMULO_HOME}/.*/accumulo.*.jar | grep "Main $SERVICE" | grep -v grep | awk {'print $2'} | head -1)
    fi
    
    if [ -z $PID ]; then
       echo "Starting $LONGNAME on $HOST"
       if [ "$HOST" = "localhost" -o "$HOST" = "`hostname`" -o "$HOST" = "$ip" ]; then
          #${bin}/accumulo ${SERVICE} --address $1 >${ACCUMULO_LOG_DIR}/${SERVICE}_${LOGHOST}.out 2>${ACCUMULO_LOG_DIR}/${SERVICE}_${LOGHOST}.err & 
          ${bin}/accumulo ${SERVICE} --address ${ADDRESS} >${ACCUMULO_LOG_DIR}/${SERVICE}_${LOGHOST}.out 2>${ACCUMULO_LOG_DIR}/${SERVICE}_${LOGHOST}.err & 
          MAX_FILES_OPEN=$(ulimit -n)
       else
          #$SSH $HOST "bash -c 'exec nohup ${bin}/accumulo ${SERVICE} --address $1 >${ACCUMULO_LOG_DIR}/${SERVICE}_${LOGHOST}.out 2>${ACCUMULO_LOG_DIR}/${SERVICE}_${LOGHOST}.err' &"
          $SSH $HOST "bash -c 'exec nohup ${bin}/accumulo ${SERVICE} --address ${ADDRESS} >${ACCUMULO_LOG_DIR}/${SERVICE}_${LOGHOST}.out 2>${ACCUMULO_LOG_DIR}/${SERVICE}_${LOGHOST}.err' &"
          MAX_FILES_OPEN=$($SSH $HOST "/usr/bin/env bash -c 'ulimit -n'") 
       fi
    
       if [ -n "$MAX_FILES_OPEN" ] && [ -n "$SLAVES" ] ; then
          if [ "$SLAVES" -gt 10 ] && [ "$MAX_FILES_OPEN" -lt 65536 ]; then
             echo "WARN : Max files open on $HOST is $MAX_FILES_OPEN, recommend 65536"
          fi
       fi
    else
       echo "$HOST : $LONGNAME already running (${PID})"
    fi