如何在Ubuntu14.04上安装大数据友好的ApacheAccumuloNoSQL数据库

来自菜鸟教程
跳转至:导航、​搜索

介绍

Apache Accumulo 是一个基于 Google 的 BigTable 的开源分布式 NoSQL 数据库。 它用于在超大型数据集(通常称为大数据)上高效地执行 CRUD(创建读取更新删除)操作。 如果项目需要单元级访问控制形式的细粒度安全性,则 Accumulo 优于其他类似的分布式数据库(例如 HBase 或 CouchDB)。

Accumulo 建立在其他 Apache 软件之上。 Accumulo 以键值对的形式表示其数据,并将该数据作为文件存储在 HDFS(Apache 的 Hadoop 分布式文件系统)上。 它还使用 Apache ZooKeeper 在其所有进程之间同步设置。

在本教程中,您将学习如何:

  • 安装和配置 Apache HDFS 和 ZooKeeper:这些系统必须在 Accumulo 启动之前处于活动状态
  • 安装和配置 Accumulo 的独立实例

先决条件

您将需要以下内容:

  • Ubuntu 14.04 服务器(最好是 32 位)
  • 一个 sudo 用户
  • 至少 2 GB 的 交换空间

第 1 步 — 安装和配置 JDK 7

Accumulo、HDFS 和 ZooKeeper 都是用 Java 编写的,需要 JVM(Java 虚拟机)才能运行。 因此,让我们从安装 JDK 开始。

更新包列表索引。

sudo apt-get update

使用 apt-get 安装 OpenJDK 7。

sudo apt-get install openjdk-7-jdk

使用 nano 编辑你的 shell 环境文件,.bashrc

nano ~/.bashrc

在文件末尾添加 JAVA_HOME 作为环境变量。

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

注意JAVA_HOME的值可以根据你的服务器架构不同。 例如,在 64 位服务器上,该值为 /usr/lib/jvm/java-7-openjdk-amd64。 您可以通过列出 /usr/lib/jvm/ 目录的内容来查看确切的路径。 如果您的路径与此处显示的不同,请确保在此处和其他地方进行适当的更改。

保存文件并退出nano。 通过键入以下内容更新当前会话的环境变量:

. ~/.bashrc

使用 nano 编辑 JVM 的 java.security 配置文件。

sudo nano $JAVA_HOME/jre/lib/security/java.security

搜索参数 securerandom.source 并更改该行,使其看起来像这样:

securerandom.source=file:/dev/./urandom

保存文件并退出nano。 此更改对于减少 JVM 的启动时间是必要的。 不进行此更改会导致大多数虚拟服务器的启动时间过长。

第 2 步 — 安装 SSH

Hadoop 需要 SSH 和 Rsync 来管理它的守护进程。 使用以下命令安装它们:

sudo apt-get install ssh rsync

第 3 步 — 启用无密码 SSH 连接

Hadoop 应该能够通过 SSH 连接到您的服务器而无需提示输入密码。

使用 ssh-keygen 生成 RSA 密钥。

ssh-keygen -P ''

出现提示时按 ENTER 选择默认值。

将生成的密钥添加到 authorized_keys 文件中。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

localhost0.0.0.0 应添加到已知主机列表中。 最简单的方法是运行 ssh 命令。

让我们先添加 localhost

ssh localhost

您将收到如下所示的消息提示:

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is bf:01:63:5b:91:aa:35:db:ee:f4:7e:2d:36:e7:de:42.
Are you sure you want to continue connecting (yes/no)?

输入 yes 并按 ENTER

登录完成后,输入以下内容退出子 SSH 会话:

exit

现在让我们添加 0.0.0.0

ssh 0.0.0.0

输入 yes 并在出现提示时按 ENTER

再次,通过输入以下内容退出子 SSH 会话:

exit

SSH 设置现已完成。

第 4 步 — 创建下载目录

您将为本教程下载几个文件。 虽然不是真的有必要,但最好将所有下载内容存储在单独的目录中。

mkdir -p ~/Downloads

输入目录。

cd ~/Downloads

第 5 步 — 下载 Apache Hadoop

在撰写本文时,Hadoop 的最新稳定版本是 2.6.0。 使用 wget 下载。

wget "http://www.eu.apache.org/dist/hadoop/common/stable/hadoop-2.6.0.tar.gz"

第 6 步 — 下载 Apache ZooKeeper

ZooKeeper 的最新稳定版本是 3.4.6。 使用 wget 下载。

wget "http://www.eu.apache.org/dist/zookeeper/stable/zookeeper-3.4.6.tar.gz"

第 7 步 — 下载 Apache Accumulo

Accumulo的最新稳定版本是1.6.1。 使用 wget 下载。

wget "http://www.eu.apache.org/dist/accumulo/1.6.1/accumulo-1.6.1-bin.tar.gz"

第 8 步 — 创建安装目录

创建一个目录来存储我们所有与 Accumulo 相关的安装。

mkdir -p ~/Installs

输入目录。

cd ~/Installs

第 9 步 — 安装和配置 Hadoop

使用 tar 命令提取 hadoop-2.6.0-src.tar.gz 的内容。

tar -xvzf ~/Downloads/hadoop-2.6.0.tar.gz

注意: 如果您安装了任何此软件的不同版本,请在文件名中使用适当的版本。

使用nano打开hadoop-env.sh

nano ~/Installs/hadoop-2.6.0/etc/hadoop/hadoop-env.sh

查找以 export JAVA_HOME 开头的行并将其更改为:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

确保该值与您在 .bashrc 中设置的值相同。

默认情况下,Hadoop 会生成大量调试日志。 要停止此行为,请查找以 export HADOOP_OPTS 开头的行并将其更改为:

export HADOOP_OPTS="$HADOOP_OPTS -XX:-PrintWarnings -Djava.net.preferIPv4Stack=true"

保存并退出。

使用nano打开core-site.xml

nano ~/Installs/hadoop-2.6.0/etc/hadoop/core-site.xml

添加一个名为 fs.defaultFS<property> 块。 它的值应该指向namenode的主机名和端口(在我们的例子中,它是localhost和默认端口9000)。 忽略评论,编辑您的文件,使其看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

保存并退出。

使用nano打开hdfs-site.xml

nano ~/Installs/hadoop-2.6.0/etc/hadoop/hdfs-site.xml

需要将以下属性添加到此文件中:

  • dfs.replication:此数字指定 Hadoop 复制块的次数。 默认情况下,Hadoop 为每个块创建 3 副本。 在本教程中,使用值 1,因为我们没有创建集群。
  • dfs.name.dir:这指向文件系统中namenode可以存储名称表的位置。 您需要更改此设置,因为 Hadoop 默认使用 /tmp。 让我们使用 hdfs_storage/name 来存储名称表。
  • dfs.data.dir:这指向文件系统中数据节点应该存储其块的位置。 您需要更改此设置,因为 Hadoop 默认使用 /tmp。 让我们使用 hdfs_storage/data 来存储数据块。

忽略注释,添加这些属性后,您的文件应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>hdfs_storage/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>hdfs_storage/data</value>
    </property>
</configuration>

使用 nano 创建一个名为 mapred-site.xml 的新文件。

nano ~/Installs/hadoop-2.6.0/etc/hadoop/mapred-site.xml

将名为 mapred.job.tracker 的属性添加到此文件。 此属性包含运行 MapReduce 作业跟踪器的主机名和端口号。 对于我们的设置,使用 localhost 和默认端口 9001

将以下内容添加到文件中:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
     <property>
         <name>mapred.job.tracker</name>
         <value>localhost:9001</value>
     </property>
</configuration>

进入 Hadoop 的基本目录(这很重要,因为 Hadoop 在当前目录中创建了 hdfs_storage 目录)。

cd ~/Installs/hadoop-2.6.0/

现在可以通过键入以下内容来初始化 NameNode:

~/Installs/hadoop-2.6.0/bin/hdfs namenode -format

你应该看到相当多的输出。

接下来,通过键入以下内容启动 NameNode:

~/Installs/hadoop-2.6.0/sbin/start-dfs.sh

等待一两分钟让它开始。 启动后,您可以使用浏览器访问 http://<your-ip>:50070/ 并通过 NameNode 的 Web 界面进行浏览。

故障排除

如果您无法访问 Web 界面,请使用以下命令检查 NameNode 是否处于活动状态:

jps

您的输出应包含以下三个进程以及 Jps 进程:

  • DataNode
  • NameNode
  • SecondaryNameNode

如果您看到输出中不存在 NameNode,请执行以下步骤。 如果它们不在一个块中执行,您可能必须单独运行它们。 注释被包含在行内。

cd ~/Installs/hadoop-2.6.0/
~/Installs/hadoop-2.6.0/sbin/stop-dfs.sh # Stop Hadoop's nodes
rm -rf hdfs_storage # Delete the namenode data
rm -rf /tmp/hadoop-* # Delete the temporary directories
~/Installs/hadoop-2.6.0/bin/hdfs namenode -format # Reformat the namenode

使用 start-dfs.sh 重启 Hadoop:

~/Installs/hadoop-2.6.0/sbin/start-dfs.sh

您现在应该可以访问 Web 界面了。

第 10 步 — 安装和配置 ZooKeeper

进入Installs目录。

cd ~/Installs

使用 tar 提取 zookeeper-3.4.6.tar.gz

tar -xvzf ~/Downloads/zookeeper-3.4.6.tar.gz

将示例文件 zoo_sample.cfg 复制到 zoo.cfg

cp ~/Installs/zookeeper-3.4.6/conf/zoo_sample.cfg ~/Installs/zookeeper-3.4.6/conf/zoo.cfg

ZooKeeper 的配置现已完成。 输入以下命令启动 ZooKeeper:

~/Installs/zookeeper-3.4.6/bin/zkServer.sh start

您应该看到如下所示的输出:

JMX enabled by default
Using config: ~/Installs/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

第 11 步 — 安装和配置 Accumulo

现在它的所有依赖项都已满足,是时候安装 Accumulo 本身了。

进入Installs目录。

cd ~/Installs

使用 tar 提取 accumulo-1.6.1-bin.tar.gz

tar -xvzf ~/Downloads/accumulo-1.6.1-bin.tar.gz

Accumulo 为具有各种内存大小的服务器提供了示例配置:512 MB、1 GB、2 GB 和 3 GB。 在本教程中,我将使用 512 MB 的配置。 如果您的服务器有更多内存,您可以选择其他配置。

将 512 MB 的配置文件复制到 conf 目录。

cp ~/Installs/accumulo-1.6.1/conf/examples/512MB/standalone/* ~/Installs/accumulo-1.6.1/conf/

使用 nano 再次使用 .bashrc 文件编辑您的 shell 环境。

nano ~/.bashrc

将以下环境变量添加到此文件:

  • HADOOP_HOME:Hadoop 安装路径
  • ZOOKEEPER_HOME:ZooKeeper 安装路径

将以下行添加到您的文件中:

export HADOOP_HOME=~/Installs/hadoop-2.6.0/
export ZOOKEEPER_HOME=~/Installs/zookeeper-3.4.6/

保存并退出。

更新环境,以便您添加到 .bashrc 的变量在当前会话中可用。

. ~/.bashrc

使用 nano 编辑 accumulo-env.sh

nano ~/Installs/accumulo-1.6.1/conf/accumulo-env.sh

默认情况下,Accumulo 的 HTTP 监视器只绑定到本地网络接口。 为了能够通过 Internet 访问它,您必须将 ACCUMULO_MONITOR_BIND_ALL 的值设置为 true

找到以 export ACCUMULO_MONITOR_BIND_ALL 开头的行并取消注释。 它应该如下所示:

export ACCUMULO_MONITOR_BIND_ALL="true"

保存并退出。

使用 nano 编辑 accumulo-site.xml

nano ~/Installs/accumulo-1.6.1/conf/accumulo-site.xml

Accumulo 的工作进程使用密钥相互通信。 这应该更改为安全的字符串。 搜索属性 instance.secret 并更改其值。 我将使用这个字符串:PASS1234。 该属性的 XML 应如下所示:

<property>
    <name>instance.secret</name>
    <value>PASS1234</value>
    <description>A secret unique to a given instance that all servers must know in order to communicate with one another.
      Change it before initialization. To
      change it later use ./bin/accumulo org.apache.accumulo.server.util.ChangeSecret --old [oldpasswd] --new [newpasswd],
      and then update this file.
    </description>
</property>

接下来,添加一个名为 instance.volumes 的新属性。 此属性的值指定 Accumulo 应将其数据存储在 HDFS 中的哪个位置。 让我们将数据存储在目录 /accumulo 中。

<property>
    <name>instance.volumes</name>
    <value>hdfs://localhost:9000/accumulo</value>
</property>

找到属性 trace.token.property.password,并将其值设置为安全的值。 请记住此值,因为您将在下一步中需要它。 我将把它设置为 mypassw

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

保存并退出。

初始化 Accumulo。

~/Installs/accumulo-1.6.1/bin/accumulo init

系统将提示您输入 实例名称 。 使用您选择的任何名称。 我选择DIGITAL_OCEAN

接下来,系统将提示您输入密码。 输入用于属性 trace.token.property.password 的相同密码。

命令完成后,您可以启动 Accumulo。

~/Installs/accumulo-1.6.1/bin/start-all.sh

您可能会看到一些警告,建议您为某些系统参数设置更高的值。 由于我们在本教程中创建了一个非常小的实例,您可以忽略这些警告。

启动完成后,您可以使用浏览器访问Accumulo的Web界面http://<your-server-ip>:50095

结论

在本教程中,您学习了如何设置 Apache Accumulo 以及它所依赖的所有其他组件。 我们今天创建了一个非常简单的设置,使用伪分布式模式下的 HDFS,可以在单个小型服务器上运行。 为了在生产场景中获得最佳性能,HDFS 应该在完全分布式模式下运行。

在生产场景中,也强烈建议将这些进程部署在至少有 8GB RAM 和 4 个或更多处理器内核的服务器上,以便每个进程可以使用超过 2GB 的内存和一个单独的内核。 或者,您可以将组件分别部署在不同的服务器上。

有关详细信息,请参阅 Apache Accumulo 的 用户手册