./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正在运行,并且我遵循了累积的自述文件中的说明。
我不知道如何启动平板电脑服务器。自述文件中对此没有任何解释,有人可以帮助我吗。

最佳答案

这是两个问题的融合。

首先,您的Accumulo找不到用于将内存中映射进行实时编辑的本地库。了解Accumulo的版本,如何部署accumulo以及查看accumulo-env.sh可能需要诊断它为什么会失败。 (最好向user mailing list提问)在“建筑”部分的“本地 map 支持”下查看适用于您版本的自述文件。

例如,passage for version 1.6.1提供以下建议,以在没有完整的源代码树的情况下自行构建它们:



通常,没有可用的本机库是软故障。 Accumulo将愉快地发出WARN,然后依靠纯Java实现。

您的第二个问题是由错误的内存配置引起的。 Accumulo依靠单个配置参数来调整本机内存映射和Java内存使用。用于本机实现的内存分配在JVM堆之外,并且可能很大(取决于目标工作负载,内存在1-16GB范围内)。使用Java实现运行时,该相同的配置值会占用最大堆大小中占用的空间。

根据日志输出,您为平板电脑服务器配置的最大总堆容量约为46MB。您已经为块缓存分配了27MB的空间,为内存中映射分配了80MB的空间。您看到的错误是因为这两个值将导致OOM。

您可以在accumulo-env.sh中增加Java Heap的总数:

# 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上至少要写入/读取当前单元的一个副本)。

关于hadoop - Accumulo:没有平板电脑服务器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28519958/

10-16 01:14