Консоль обзора Accumulo недоступна за пределами виртуальной машины VirtualBox

Я запускаю Accumulo 1.5 на виртуальной машине Ubuntu 12.04 VirtualBox. Я установил в файле accumulo-site.xml instance.zookeeper.host IP-адрес виртуальной машины, и я могу подключаться к accumulo и выполнять запросы с удаленного клиентского компьютера. С клиентского компьютера я также могу использовать браузер для просмотра NameNode hadoop, просмотра файловой системы и т. д. Но я не могу подключиться к странице обзора Accumulo (порт 50095) откуда-либо еще, кроме как непосредственно с виртуальной машины Accumulo. Между виртуальной машиной и клиентом нет брандмауэра, и, кроме того, что страница обзора Accumulo недоступна, все остальное работает нормально.

Есть ли параметр конфигурации, который мне нужно изменить, чтобы разрешить внешний доступ к консоли обзора Accumulo?

Благодарность


person J21042    schedule 19.11.2013    source источник


Ответы (2)


Мне удалось заставить монитор Accumulo привязываться ко всем сетевым интерфейсам, вручную применив этот патч: https://git-wip-us.apache.org/repos/asf?p=accumulo.git;a=commit;h=7655de68

В conf/accumulo-env.sh добавить:

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

В bin/config.sh добавить:

# 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"}

И измените bin/start-server.sh, чтобы он соответствовал:

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
person Scott    schedule 18.02.2014

Убедитесь, что монитор привязан к правильному интерфейсу, а не к петлевому интерфейсу «localhost». Возможно, вам придется отредактировать файл мониторов в каталоге конфигурации Accumulo, указав IP/имя хоста правильного интерфейса.

person Christopher    schedule 20.11.2013
comment
Не могли бы вы уточнить, где/как добавить эту настройку? У меня нет файла «мониторы», и в accumulo-site.xml из примеров ничего нет. - person Scott; 18.02.2014
comment
Вы можете создать файл мониторов в каталоге conf Accumulo. Он имеет тот же формат, что и файл master или slave. Если он не существует, он вернется к содержимому файла masters. - person Christopher; 19.03.2014