Accumulo: планшетных серверов нет

./bin/accumulo shell -u root
Password: ******

2015-02-14 15:18:28,503 [impl.ServerClient] WARN : There are no tablet servers: check that zookeeper and accumulo are running.

2015-02-14 13:58:52,878 [tserver.NativeMap] ERROR: Tried and failed to load native map library from /home/hduser/hadoop/lib/native::/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
java.lang.UnsatisfiedLinkError: no accumulo in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at org.apache.accumulo.tserver.NativeMap.<clinit>(NativeMap.java:80)
at org.apache.accumulo.tserver.TabletServerResourceManager.<init>(TabletServerResourceManager.java:155)
at org.apache.accumulo.tserver.TabletServer.config(TabletServer.java:3560)
at org.apache.accumulo.tserver.TabletServer.main(TabletServer.java:3671)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.accumulo.start.Main$1.run(Main.java:141)
at java.lang.Thread.run(Thread.java:745)
2015-02-14 13:58:52,915 [tserver.TabletServer] ERROR: Uncaught exception in TabletServer.main, exiting
java.lang.IllegalArgumentException: Maximum tablet server map memory 83,886,080 and block cache sizes 28,311,552 is too large for this JVM configuration 48,693,248
at org.apache.accumulo.tserver.TabletServerResourceManager.<init>(TabletServerResourceManager.java:166)
at org.apache.accumulo.tserver.TabletServer.config(TabletServer.java:3560)
at org.apache.accumulo.tserver.TabletServer.main(TabletServer.java:3671)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.accumulo.start.Main$1.run(Main.java:141)
at java.lang.Thread.run(Thread.java:745)

Вышеупомянутая ошибка показана в tserver_localhost.log. может ли кто-нибудь помочь мне с этой проблемой. У меня был запущен hadoop в одноузловом режиме, запущен zookeeper, и я следовал инструкциям в файле Readme accumulo. Я не знаю, как запустить планшетный сервер. В файле readme не было пояснений по этому поводу, может ли кто-нибудь помочь мне с этим.


person chandra    schedule 14.02.2015    source источник


Ответы (2)


Это слияние двух проблем.

Во-первых, ваш Accumulo не может найти нативные библиотеки, которые он использовал бы для извлечения карты в памяти для редактирования в реальном времени. Знание вашей версии Accumulo, того, как вы развернули accumulo, и просмотр вашего accumulo-env.sh потребуется, чтобы диагностировать, почему он мог выйти из строя. (лучше всего задать вопрос в списке рассылки пользователей) Ознакомьтесь с файлом README для вашей версии в разделе "Создание" для " встроенная поддержка карт».

Например, отрывок для версии 1.6.1 дает следующие советы по созданию их самостоятельно без полного исходного кода. дерево:

Кроме того, вы можете вручную распаковать накопительный tar-архив в каталог $ACCUMULO_HOME/lib. Перейдите в накопительно-родной каталог в текущем каталоге и введите make. Затем скопируйте полученную библиотеку libaccumulo в $ACCUMULO_HOME/lib/native/map.

$ mkdir -p $ACCUMULO_HOME/lib/native/map $ cp libaccumulo.* $ACCUMULO_HOME/lib/native/map

Обычно отсутствие доступных собственных библиотек является мягким сбоем; Accumulo с радостью выдаст WARN, а затем положится на реализацию на чистой Java.

Ваша вторая проблема вызвана неправильной конфигурацией памяти. Accumulo полагается на один параметр конфигурации для настройки использования памяти как для встроенной карты памяти, так и для карты Java. Память для нативной реализации выделяется за пределами кучи JVM и может быть значительной (в диапазоне от 1 до 16 ГБ в зависимости от целевой рабочей нагрузки). При работе с реализацией Java это же значение конфигурации забирает пространство, вырезанное из максимального размера кучи.

Основываясь на выводе вашего журнала, вы настроили общую максимальную кучу для планшетных серверов ~ 46 МБ. Вы выделили 27 МБ для кеша блоков и 80 МБ для карты в памяти. Ошибка, которую вы видите, связана с тем, что эти два значения приведут к OOM.

Вы можете увеличить общую кучу Java в accumulo-env.sh:

# Probably looks like this
test -z "$ACCUMULO_TSERVER_OPTS" && export ACCUMULO_TSERVER_OPTS="${POLICY} -Xmx48m -Xms48m "
#                                 change this part to give it more memory --^^^^^^

И/или вы можете указать, сколько места должно использоваться для собственных карт, кеша блоков и кеша индекса в accumulo-site.xml.

  <!-- Amount of space to hold incoming random writes -->
  <property>
    <name>tserver.memory.maps.max</name>
    <value>80M</value>
  </property>

  <!-- Amount of space for holding blocks of data read out of HDFS -->
  <property>
    <name>tserver.cache.data.size</name>
    <value>7M</value>
  </property>

  <!-- Amount of space for holding indexes read out of HDFS -->
  <property>
    <name>tserver.cache.index.size</name>
    <value>20M</value>
  </property>

То, как вы должны сбалансировать эти три, будет зависеть от того, сколько у вас памяти и как выглядит ваша рабочая нагрузка. Имейте в виду, что в вашей общей куче Java должно быть больше, чем просто эти две вещи (например, по крайней мере одна копия текущей ячейки, которая записывается/читается на каждом RPC).

person Sean Busbey    schedule 14.02.2015
comment
Спасибо, Шон, за ответ. После внесения следующих изменений я получил следующее предупреждение. Я изменил файл accumulo-env.sh и увеличил кучу до 64. и изменил accumulo-site.xml, уменьшил размер индекса до 10m и перезапустил accumulo. После этого, если я попытаюсь открыть оболочку, я увижу следующее предупреждение, и после этого ничего не произойдет. - person chandra; 16.02.2015
comment
Планшет-серверов нет: проверьте, работают ли zookeeper и accumulo. Параметр системной подкачки больше десяти (60), что может привести к задержке операций, чувствительных ко времени. Accumulo чувствителен ко времени, поскольку ему необходимо поддерживать соглашение о распределенной блокировке. - person chandra; 16.02.2015
comment
Похоже, вам нужно снова проверить журналы tserver, чтобы увидеть, что не удалось на этот раз. Вы только что изменили размер кеша индекса? Ваша большая проблема в настоящее время заключается в том, что карта в памяти использует 80M. Увеличения общей кучи до 64 МБ будет недостаточно, чтобы преодолеть это. - person Sean Busbey; 17.02.2015

Я нашел решение этой проблемы. Я удалил все файлы конфигурации из папки конфигурации в accumulo и использовал файл bootstrap_config.sh в папке bin, который создал файлы конфигурации на основе данных, которые я дал, и после этого я снова инициализировал accumulo, и я смог откройте оболочку, и ошибка исчезла.

Спасибо за помощь.

person chandra    schedule 26.02.2015