Я тоже столкнулся с этим.
Я думаю, что ключ к этому находится в журналах, т.е.
. Вызвано: java.lang.IllegalArgumentException: / tmp / zookeeper / data / myid файл отсутствует в org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties (QuorumPeerConfig.java:408)
blockquote>Следующие строки в вашем файле
zookeeper.properties
предоставляют подробную информацию о ансамбль zookeeper:server.1=0.0.0.0:2888:3888 server.2=150.20.11.134:2888:3888 server.3=150.20.11.137:2888:3888
Когда запускается один из серверов zookeeper, он знает, какой это сервер, посмотрев файл
myid
в его собственном каталоге данных, который в этом случае будет/tmp/zookeeper/data
.Итак, все, что вам нужно сделать, это просто создать файл с именем
myid
в вышеупомянутом каталоге каждого сервера и написать просто x =1
,2
или3
(они соответствуют серверу .x
в файле zookeeper.properties).Ссылка - Apache Zookeeper .
Надеюсь, это поможет!
По существу, потому что инициализация переменной была бы пропущена, если бы маркировка, содержащая переменную инициализацию, не была поражена. Это было бы плохо, потому что компилятор должен будет затем испустить код, который уничтожил бы, сказал, что переменная, если и только если код инициализации работал.
Например:
class A
{
// has some non-trivial constructor and destructor
};
switch (x)
{
case 1:
A a;
break;
default:
// do something else
}
Если код совершил нападки default
, затем a
не был бы инициализирован. Компилятор, должно быть, смог понять это заранее. Вероятно, по причинам производительности, это было запрещено.
Простая фиксация должна представить новый слой объема:
class A
{
// has some non-trivial constructor and destructor
};
switch (x)
{
case 1:
{
A a;
}
break;
default:
// do something else
}
Это делает его хорошо, разрушение a
теперь четко определено.
Существует конфликт здесь между синтаксисом языка и здравым смыслом. Для нас люди похоже, что этот код (взятый с 1800 ответ ИНФОРМАЦИИ) должен хорошо работать:
class A
{
// has some non-trivial constructor and destructor
};
switch (x)
{
case 1:
A a;
break;
default:
// do something else
}
В конце концов, фигурные скобки определяют объем для a; это только создается, если мы вводим случай 1, это сразу уничтожается после отъезда случая 1 блок, и это никогда не будет использоваться, если мы не введем случай 1. На самом деле маркировки случая и инструкция по повреждению не разделяют объемы, таким образом, существование во всем блоке впоследствии, даже при том, что это логически недостижимо. И уверенный, нет такой вещи как случай 1 блока с синтаксической точки зрения.
При размышлении об операторе переключения как о наборе (структурированных) goto скрытых инструкций проблема объема становится более очевидной:
{
if (x == 1)
goto 1;
else
goto default;
1:
A a;
goto end;
default:
// do something else
end:
}