Accumulo安装部署

Accumulo依赖Zookeeper:需首先安装Zookeeper

Ps:对Accumulo应用开发感兴趣的小伙伴请加wx:lovebyz99

简介

Accumulo是一款开源分布式NoSQL数据库,基于谷歌的BigTable构建而成。其能够非常高效地对超大规模数据集(通常即指大数据)执行CRUD(即创建、读取、更新与删除)操作。相较于其它类似的分布式数据库选项(例如HBase或者CouchDB),Accumulo的优势在于能够立足单元级访问控制层面提供细粒度安全性控制。

Accumulo构建于其它Apache软件的基础之上。Accumulo以键-值对形式表现其数据,并将这些数据作为文件存储在HDFS上。其同时利用 ZooKeeper对不同进程之间的设置进行同步。

  • 在Accumulo启动之前HDFS与ZooKeeper必须已经处于活动状态

Accumulo 的工作原理

基于 JDK 通过 Zookeeper 进行集群调度,并将自己的数据保存到 HDFS 中,就像普通的数据库数据保存在文件系统中,Accumulo 将数据保存到 HDFS 中,这样就实现了分布式数据库。

 

单机环境部署

安装Accumulo

  1. 下载Accumulo

  2. tar xzf /path/to/accumulo-1.9.2-bin.tar.gz

  3. raini@biyuzhe:~/app$ ln -s app_root/accumulo-1.9.2/ ./accumulo

  4. cd accumulo

  5. 获取配置文件conf/

Accumulo有一些可选的本机代码,可以提高其性能和稳定性。在配置Accumulo之前尝试使用以下命令构建:

./bin/build_native_library.sh

如果命令失败,则可以继续进行设置并稍后解决问题。

 

获取配置文件填充到conf/下:

$ ./bin/bootstrap_config.sh

该脚本将提示内存使用情况。请注意,该脚本仅适用于Accumulo系统进程,因此应为其他进程留出足够的空间,例如hadoop,zookeeper和accumulo客户端代码等。如果Accumulo工作进程被换出并且没有响应,它们可能会被杀死。

 

为方便起见,添加accumulo/bin/path路径中:

# ACCUMULO
export ACCUMULO_HOME=/home/raini/app/accumulo
export PATH=$ACCUMULO_HOME/bin:$PATH

 

配置Accumulo

Accumulo依赖ZookeeperHDFS实例运行,这些实例应在配置Accumulo之前设置

Accumulo的主要配置文件accumulo-site.xml,accumulo-env.sh,位于conf/目录中。hadoop的配置hdfs-site.xml

可选)默认情况下,Accumulo master配置垃圾收集器使用512MB和monitor配置为使用256MB。可以在`JAVA_OPTS`部分更改这些设置

Accumulo为服务器提供多种示例配置方案,其内存容量设置分别为512 MB、1 GB、2 GB与3 GB。在这里我们使用1G内存配置。如果大家的服务器资源比较充裕,也可以选择其它配置方案

 

  1. accumulo-site.xml (accumulo.properties

配置Accumulo服务器进程(主从服务器,监视器等)。

一些说明:instance.volumes 指定了 HDFS 节点,使得 Accumulo 能够正常访问 HDFS;instance.zookeeper.host 指定了 zookeeper 集群的路径,使得 zookeeper 能够管理 accumulo;general.classpaths 指定了 Accumulo 工作的 jar 包。

 

请按照以下步骤进行设置:

  • 构建本机代码,请通过将tserver.memory.maps.native.enabled设置为true(默认),则Accumulo将使用本机库。在JVM Maps上使用原生地图可以明显改善摄取率; 但是,在增加本机映射的大小时,某些配置变量对于修改很重要。
//512M大小的可以是false,内存大的可以配成true(内存需要分配给maps.native一部分)
,运行时内存不足都会导致仅群崩溃,所以确保机器有剩余空间>配置的大小

   <property>

     <name>tserver.memory.maps.native.enabled</name>
     <value>true</value> 

   </property>

Ps: 默认情况下,Accumulo tserver配置为使用1GB内存(768MB分配给JVM,256MB分配给naitve映射)。为本地映射分配的内存等于tserver JVM堆的33%。如果您想更改accumulo-env.sh JAVA_OPTS部分中的服务器内存使用情况,可以参考

  •  将instance.volumes设置为Accumulo将存储数据的HDFS位置。如果您的namenode运行在192.168.1.9:8020并且您想要将数据存储/accumulo在HDFS中,则将instance.volumes设置 为hdfs://192.168.1.9:8020/accumulo
   <property>

     <name>instance.volumes</name>

     <value>hdfs://biyuzhe:9000/accumulo</value>   <------(使用localhost连接不上hdfs

   </property>
  • instance.zookeeper.host设置为Zookeepers的位置(单机zoo,集群请添加多个ip:2181,以逗号分割)
   <property>

     <name>instance.zookeeper.host</name>

     <value>localhost:2181</value>

   </property>
  • (可选)更改instance.secret默认值DEFAULT。此值应在所有服务器上匹配。Accumulo的各工作程序进程利用密钥进行相互通信。我们需要将其替换为一条安全字符串。
<property>

     <name>instance.secret</name>

     <value>www.thutmose.cn</value>

 </property>
  • (可选)更改这个密码在accumulo初始化的时候会使用
  <property>

    <name>trace.token.property.password</name>

    <!-- 默认[secret],修改为自己想要的密码。这个密码在accumulo初始化的时候会使用.change this to the root user's password, and/or change the user below -->

    <value>2599</value>

  </property>

(2)accumulo-env.sh

该文件设置由Accumulo需要的环境变量:

  • Setting ZOOKEEPER_HOME and HADOOP_PREFIX in conf/accumulo-env.sh。Accumulo将使用这些位置查找Hadoop和Zookeeper jar并将它们添加到您的CLASSPATH变量中。如果您运行的是特定于供应商的Hadoop或Zookeeper版本,则可能需要CLASSPATHaccumulo-env.sh中修改变量的构建 方式。如果Accumulo在启动时加载类有问题,请运行 accumulo classpath以打印Accumulo的类路径。
# 在前面添加

export ACCUMULO_HOME=/home/raini/app/accumulo
export JAVA_HOME=/home/raini/app/jdk
export ZOOKEEPER_HOME=/home/raini/app/zookeeper
export HADOOP_PREFIX=/home/raini/app/hadoop
export HADOOP_HOME=/home/raini/app/hadoop
export HADOOP_CONF_DIR=/home/raini/app/hadoop/etc/hadoop

 

  • 在默认情况下,Accumulo的HTTP监视器只绑定至本地网络接口。为了能够通过互联网进行访问,我们需要将ACCUMULO_MONITOR_BIND_ALL的值设置为true。找到以export ACCUMULO_MONITOR_BIND_ALL开头一行并取消其注释。具体内容如:
export ACCUMULO_MONITOR_BIND_ALL="true"
  • 可在accumulo-env.sh JAVA_OPTS中查看 Accumulo master, garbage collector, and monitor的内存设置。

(3)hadoop hdfs-size.xml

增加:

 <property>
      <name>dfs.support.append</name>
      <value>true</value>
  </property>
  <property>
      <name>dfs.data.synconclose</name>
      <value>true</value>
  </property>

  (4)accumulo/proxy/proxy.properties

useMockInstance=false
useMiniAccumulo=false
protocolFactory=org.apache.thrift.protocol.TCompactProtocol$Factory
tokenClass=org.apache.accumulo.core.client.security.tokens.PasswordToken
port=42424
maxFrameSize=16M

instance=accumuloInstance
zookeepers=localhost:2181

(5)accumulo/conf/client.conf

连接accumulo的配置, 比如 accumulo shell 、远程客户代码端

instance.zookeeper.host=localhost:2181
instance.rpc.ssl.enabled=false

instance.rcp.sasl.enabled=false
rpc.sasl.qop=auth

(6)初始化Accumulo

Accumulo需要初始化它在Zookeeper和HDFS中存储数据的位置。以下命令将执行此操作。

accumulo init

初始化命令将提示输入以下信息:

  • Instance name:Accumulo实例的名称,Accumulo clients需要知道它才能连接。
  • Root password:初始化设置初始的Accumulo root用户并提示输入密码。稍后连接到Accumulo需要此信息。

我的设置:

  • Instance name : accumuloInstance
  • Root password : ****

过程如下:

instance.dfs.dir of |/accumulo|

instance.volumes of |hdfs://biyuzhe:9000/accumulo|

 

启动Accumulo

关闭accumulo :./bin/stop-all.sh

Ps:看到几条与当前系统参数相关的提醒,建议我们将各项数值调高一些。由于我们在这里只需要创建一个小型实例,因此直接忽略即可。

重启完成后,大家即可以通过http://<your-server-ip>:50095在浏览器中访问Accumulo的Web界面了。

 

简单使用

(注意配置zookeeper集群在conf/client.conf)

raini@biyuzhe:~/app/accumulo$ accumulo shell -u root
2019-05-31 14:55:06,219 [client.ClientConfiguration] INFO : Loaded client configuration file /home/raini/app/accumulo/conf/client.conf

root@accumuloInstance> createtable test
root@accumuloInstance test> insert row1 cf cq value
root@accumuloInstance test> insert row2 cf cq value2
root@accumuloInstance test> insert row3 cf cq value3
root@accumuloInstance test> scan
row1 cf:cq []    value
row2 cf:cq []    value2
row3 cf:cq []    value3

网页监控

http://localhost:9995/

通过shell访问accumulo

raini@biyuzhe:~/app/accumulo$ ./bin/accumulo shell -u root
2019-05-28 11:20:30,475 [client.ClientConfiguration] INFO : Loaded client configuration file /home/raini/app/accumulo/conf/client.conf
2019-05-28 11:20:30,502 [client.ClientConfiguration] INFO : Loaded client configuration file /home/raini/app/accumulo/conf/client.conf
2019-05-28 11:20:31,118 [client.ClientConfiguration] INFO : Loaded client configuration file /home/raini/app/accumulo/conf/client.conf
Password: ****
2019-05-28 11:20:33,122 [trace.DistributedTrace] INFO : SpanReceiver org.apache.accumulo.tracer.ZooTraceClient was loaded successfully.

Shell - Apache Accumulo Interactive Shell
- 
- version: 1.9.3
- instance name: accumuloInstance
- instance id: f594f673-3bf1-45de-aa9c-9f15ee7f730f
- 
- type 'help' for a list of available commands
- 
root@accumuloInstance> 

:密码是accumulo-site.xml中配的<name>trace.token.property.password</name>,即初始化密码。

 

问题汇总-优先考虑集群规范

(1) There are no tablet servers: check that zookeeper and accumulo are running.

./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)

问题:

Accumulo无法找到用于堆积内存映射以进行实时编辑的本机库。

解决:

1、手动解压缩$ ACCUMULO_HOME/lib目录中的accumulo-native.tar.gz。

2、cd ./accumulo-native

3、 make

4、将生成的“libaccumulo.so”复制到$ACCUMULO_HOME/lib/native/map中(新建这个目录)

 

(2)[tserver.TabletServer] ERROR: Uncaught exception in TabletServer.main, exiting

2019-01-18 14:15:02,328 [tserver.TabletServer] ERROR: Uncaught exception in TabletServer.main, exiting

java.lang.IllegalArgumentException: Maximum tablet server map memory 83,886,080 block cache sizes 24,117,248 and mutation queue size 52,428,800 is too large for this JVM configuration 129,761,280

at org.apache.accumulo.tserver.TabletServerResourceManager.<init>(TabletServerResourceManager.java:186)

at org.apache.accumulo.tserver.TabletServer.<init>(TabletServer.java:408)

at org.apache.accumulo.tserver.TabletServer.main(TabletServer.java:3206)

at org.apache.accumulo.tserver.TServerExecutable.execute(TServerExecutable.java:33)

at org.apache.accumulo.start.Main$1.run(Main.java:130)

at java.lang.Thread.run(Thread.java:748)

2019-01-18 14:15:02,342 [watcher.MonitorLog4jWatcher] INFO : Changing monitor log4j address to biyuzhe:4560

2019-01-18 14:15:02,342 [watcher.MonitorLog4jWatcher] INFO : Enabled log-forwarding

说明:

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

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

 

解决:

可以在accumulo-env.sh中增加总Java堆:

# Probably looks like this

# change this part to give it more memory --^^^^^^

修改:
test -z "$ACCUMULO_TSERVER_OPTS" && export ACCUMULO_TSERVER_OPTS="${POLICY} -Xmx128m -Xms128m"
成:
test -z "$ACCUMULO_TSERVER_OPTS" && export ACCUMULO_TSERVER_OPTS="${POLICY} -Xmx48m -Xms48m"

 

可以在accumulo-site.xml中增大为本机映射块缓存和索引缓存使用的内存空间(都增加些)

  <!-- Amount of space to hold incoming random writes -->

  <property>
    <name>tserver.memory.maps.max</name>
    <value>180M</value>    <----原本80M,增加100M(可以启动master和tracer)
  </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>

(3)还不能解决上述问题时。。。就要考虑。。。集群规范

在作为Accumulo Master 的机器上:

  1. 将Accumulo Master的IP地址或域名写入$ACCUMULO_HOME/conf/masters文件。

  2. 写入将成为TabletServer的计算机的IP地址或域名$ACCUMULO_HOME/conf/slaves,每行一个。

请注意,如果使用域名而不是IP地址,则必须为参与群集的所有计算机正确配置DNS。DNS可能是一个令人困惑的错误来源。

(单机部署情况下,将配置文件:masters、gc、monitor、slaves、tracers都改成ip 172.0.0.1)

问题解决(之前经常监控不到这些服务)

$accumulo shell 也能使用了:

 

(4)Accumulo-1.8.x初始化报错:

缺少jar依赖:

  1. commons-io
  2. commons-logging
  3. commons-configuration
  4. commons-lang
  5. htrace-core
  6. commons-codc

可从我的网盘下载如上jar包:链接  提取码: tuu2 

 

总结

如上我们了解了如何设置Apache Accumulo及其运行所必需的其它组件。我们还利用HDFS以伪分布模式创建出一套能够运行在单一小型服务器上的简单实例。当然,出于性能优化的考虑,大家应该在生产场景下确保HDFS以完全分布式模式运行。

在生产场景下,这里还强烈建议大家将各进程部署在至少拥有8 GB内存且处理器计算核心数量不少于4个的服务器之上,这意味着每个进程能够拥有2 GB内存与1个独立计算核心。另外,大家也可以将各个组件分别部署在不同的服务器上。

 

Apache Accumulo示例https://accumulo.apache.org/1.9/examples/

 

博主w~x:lovebyz99

(交流请备注,对创业有想法欢迎联系)

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页