在EC2上运行带容错机制的Alluxio

Slack Docker Pulls GitHub edit source

使用Alluxio自带的Vagrant脚本可以将带 容错机制的Alluxio部署在Amazon EC2上。该脚本允许你创建,配置以及撤销集群,该集群自动配置了HDFS相关项。

前期准备

安装Vagrant和AWS插件

下载Vagrant

安装AWS Vagrant插件:

  1. $ vagrant plugin install vagrant-aws
  2. $ vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box

安装Alluxio

下载Alluxio到本地,并解压。

安装python库依赖

安装python>=2.7,注意不是python3。

进入deploy/vagrant目录下,运行:

  1. $ sudo bash bin/install.sh

另外,你可以选择手动安装pip,之后进入deploy/vagrant目录,运行:

  1. $ sudo pip install -r pip-req.txt

启动集群

要在EC2上运行Alluxio集群,首先在Amazon Web Services site注册一个Amazon EC2帐号。

接着创建access keys并且设置AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY环境变量:

  1. $ export AWS_ACCESS_KEY_ID=<your access key>
  2. $ export AWS_SECRET_ACCESS_KEY=<your secret access key>

接着生成EC2 Key Pairs。确保将私钥文件的 权限设置成只对你可读。

  1. $ chmod 400 <your key pair>.pem

复制deploy/vagrant/conf/ec2.yml.templatedeploy/vagrant/conf/ec2.yml

  1. $ cp deploy/vagrant/conf/ec2.yml.template deploy/vagrant/conf/ec2.yml

deploy/vagrant/conf/ec2.yml配置文件中,将Keypair设置为你的keypair名,Key_Path设置成pem key路径。

deploy/vagrant/conf/ufs.yml配置文件中,将Type的值设置为hadoop2,或者指定一个S3 bucketBucket字段。

deploy/vagrant/conf/alluxio.yml配置文件中,将Masters设置为你想要的AlluxioMasters的数量,在容错 模式下,Masters的值应该大于1。

Vagrant脚本默认会在该区域(us-east-1)和可用区域(us-east-1b)中创建一个名为alluxio-vagrant-test安全组。 该安全组会在区域中自动建立,并且所有inbound及outbound网络流量都将打开。你可以在ec2.yml配置文件中设置security groupregion以及availability zone的值。

现在你可以以Hadoop2.4.1为底层文件系统,在us-east-1b下启动Alluxio集群了,在deploy/vagrant目录下运行:

  1. $ ./create <number of machines> aws

注意<number of machines>的值应该大于等于deploy/vagrant/conf/alluxio.yml配置文件中设置的Masters的值。

集群中每个节点都运行一个Alluxio worker,每个master节点都运行一个Alluxio master,而leader为这些master节 点中的其中之一。

访问集群

通过Web UI访问

命令./create <number of machines> aws运行成功后,在shell中会输出类似下面的三条语句:

  1. >>> Master public IP for Alluxio is xxx, visit xxx:19999 for Alluxio web UI<<<
  2. >>> Master public IP for other softwares is xxx <<<
  3. >>> visit default port of the web UI of what you deployed <<<

第一行为Alluxio master leader的公共IP。

第二行为其他软件如Hadoop的master的公共IP。

Alluxio Web UI的默认端口为19999

Hadoop Web UI的默认端口为50070

在浏览器中输入http://{MASTER_IP}:{PORT}地址访问Web UI。

也能通过AWS web console监视其状态。

通过ssh访问

所有创建的节点分为两类。

一类包含AlluxioMasterAlluxioMaster2等等,即所有的Alluxio master,其中之一为leader,其余为备用节 点。AlluxioMaster也是其他软件如Hadoop的master节点。这些节点同时也运行着Alluxio以及其他软件如Hadoop的 worker进程。

另一类包含AlluxioWorker1AlluxioWorker2等等,这些节点运行着Alluxio以及其他软件如Hadoop的worker进程。

通过ssh登陆一个节点,运行:

  1. $ vagrant ssh <node name>

例如,通过以下命令可以登陆AlluxioMaster节点:

  1. $ vagrant ssh AlluxioMaster

所有的软件都安装在根目录下,例如Alluxio安装在/alluxio,Hadoop安装在/hadoop,Zookeeper安装在/zookeeper

在leader节点上,可以对Alluxio运行测试检测其健康状态:

  1. $ /alluxio/bin/alluxio runTests

在所有测试完成后,再次访问Alluxio的web UI http://{MASTER_IP}:19999,在导航栏中点击 Browse,你应该能看到测试过程中写入到Alluxio的文件。

通过ssh可以登陆到当前Alluxio master leader,并查找AlluxioMaster进程的进程ID:

  1. $ jps | grep AlluxioMaster

然后将该leader进程终止掉:

  1. $ kill -9 <leader pid found via the above command>

接着,为了找到新的leader,通过ssh登陆到AlluxioMaster节点,该节点上运行着 zookeeper,然后运行zookeeper client:

  1. $ ${ZOOKEEPER_HOME}/bin/zkCli.sh

在zookeeper client终端中,运行以下命令查看当前leader:

  1. ls /alluxio/leader

该命令的输出结果应当包含了当前的leader,由于新的leader要通过选举确定,可能要等待一会。你可以在 AWS web console中通过该leader的名称 查询其公共IP。

在浏览器中输入http://{NEW_LEADER_MASTER_IP}:19999地址访问Alluxio web UI,在选项卡中点击 Browse,可以看到所有文件依然存在。

在集群中的某个节点上,可以通过ssh免密码登陆到集群中的其他节点:

  1. $ ssh AlluxioWorker1

撤销集群

deploy/vagrant目录下运行:

  1. $ ./destroy

从而撤销之前创建的集群。一次只能创建一个集群。当该命令成功执行后,EC2实例将终止运行。