玩转企业云计算平台系列(十七):Openstack 大数据项目 Sahara

2024-01-18 15:45:44 浏览数 (3)

2013年4月,OpenStack社区知名厂商Mirantis正式宣布了基于OpenStack的开源BDaaS(BigData-as-a-Service)项目——Sahara(原名Savanna),正式开始了在OpenStack上构建大数据服务能力的努力。

Sahara 介绍

Apache Hadoop是目前被广泛使用的主流大数据处理计算框架,Sahara项目旨在使用用户能够在Openstack平台上便于创建和管理Hadoop以及其他计算框架集群,实现类似AWS的EMR(Amazon Elastic MapReduce service)服务。

用户只需要提供简单的参数,如版本信息、集群拓扑、节点硬件信息等,利用Sahara服务能够在数分钟时间内快速地部署Hadoop、Spark、Storm集群。Sahara 还支持节点的弹性扩展,能够方便地按需增加或者减少计算节点,实现弹性数据计算服务。它特别适合开发人员或者QA在Openstack平台上快速部署大数据处理计算集群。

特性包括:
  • Openstack的标准组件之一;
  • 通过REST API和Dashboard UI界面管理集群;
  • 支持多种数据处理计算框架,包括:
  • 多种Hadoop厂商发行版,比如CDH等;
  • Apache Spark和Storm;
  • 可插除的Hadoop安装引擎;
  • 集成厂商的特定管理工具,如Apache Ambari and Cloudera Management Console。
  • 支持配置模板。

Sahara 与 OpenStack的Horizon(提供GUI)、Keystone(提供鉴权功能)、Nova(为了创建Hadoop集群虚拟机)、Heat(Sahara可以配置成使用Heat来协调Hadoop集群所需要的服务)、Glance(存放Hadoop虚拟机镜像)、Swift(可以用于存放Hadoop任务处理的数据)、Cinder(用于提供块存储)、Neutron(提供网络服务)、Ceilometer(用于收集集群的信息来达到计量和监控的目的)有交互。

它和其他Openstack组件交互,如图:

Sahara 架构

主要包括以下几个组件:

  • Auth component(认证组件) - 负责和认证服务交互完成客户认证。
  • DAL - 数据访问层, 负责为持久化数据提供数据库访问接口。
  • Secure Storage Access Layer(安全存储访问层) - 保存用户认证信息,比如用户、密钥等。
  • Provisioning Engine - 该组件负责和Openstack其他组件交互,比如Nova组件、Heat组件、Cinder组件以及Glance组件等。
  • Vendor Plugins(厂商插件) - 负责配置和启动计算框架,不同的计算框架启动方式和配置都不一样,因此提供插件机制,使sahara同时可支持多种计算框架。已经完成集成的插件包括Apache Ambari和Cloudera Management Console等。
  • EDP - Elastic Data Processing,负责调度和管理任务。
  • REST API - 通过REST HTTP API接口暴露sahara管理功能。
  • Python Sahara Client - sahara命令行管理工具。
  • Sahara pages - Openstack Dashboard显示页面。

Sahara 工作流程

sahara提供两个层次的API,分别为集群管理(cluster provisioning)和任务管理(analytics as a service)。

集群管理工作流
  • 选择Hadoop发行版本;
  • 选择base镜像,base镜像用于生成工作节点,base镜像或者已经预先安装了Hadoop的必要组件,或者提供可插除的可自动快速部署Hadoop的工具。base镜像可以自己制作,也可以直接下载: http://sahara-files.mirantis.com/images/upstream/liberty/
  • 集群配置,包括集群大小、集群拓扑(配置组件角色)和一些附加参数(如堆大小、HDFS冗余份数等);
  • 创建集群,sahara将自动创建虚拟机、部署和配置数据分析计算框架集群;
  • 集群管理,如增加或者删除节点;
  • 集群销毁,用户不需要时,可以删除集群,释放所有的资源。
任务管理工作流
  • 选择预先定义的数据处理计算框架以及版本;
  • 任务配置:
    • 选择任务类型:pig,hive,java-jar等;
    • 提供任务脚本源或者jar包地址;
    • 选择输入、输出地址。
  • 限制集群大小;
  • 执行任务,注意所有底层的集群管理和任务执行流程对用户是完全透明的,当任务执行完后,集群将会自动移除提交的任务;
  • 获取处理结果(如Swift)。

通过sahara管理集群,用户主要需要操作以下三个实体对象:Node Group Templates, Cluster Templates and Clusters:

  • Node Group Templates:设置单一节点的模板,包括启动虚拟机的flavor、安全组、可用域、镜像等,以及配置Hadoop角色,比如namenode、secondarynamenode、resourcemanager。比如我们可以创建Master节点模板,flavor为m1.large,启动镜像为sahara-mitaka-vanilla-hadoop-2.7.1-ubuntu-14.04,配置namenode、resourcemanager、secondarynamenode角色,创建Slave节点模板,flavor为m1.large,镜像为sahara-mitaka-vanilla-hadoop-2.7.1-ubuntu-14.04,配置角色为datanode、nodemanager等。
  • Cluster Templates:即集群拓扑,包括节点数量(如Master数量、Slave数量)、Hadoop参数配置,比如HDFS配置、YARN配置等。
  • Clusters:集群管理,包括集群扩容、集群启动、集群删除等。

sahara允许用户自由组合节点角色,比如Job Tracker和NameNode可以运作在同一个虚拟机中,也可以分离在不同的虚拟机中。但是sahara会检查集群是否有效,比如不允许创建只有一系列DataNode节点但不存在NameNode节点的集群。

sahara遵从Openstack的通用访问策略,即支持租户、用户等权限管理。

安装 Sahara

代码语言:javascript复制
yum install openstack-sahara gcc python-setuptools python-devel

配置文件位于/etc/sahara/sahara.conf 中。有关详细信息,请参阅官方 Sahara 配置指南。

创建数据库架构

代码语言:javascript复制
sahara-db-manage --config-file /etc/sahara/sahara.conf upgrade head

创建keystone账号,并添加角色

代码语言:javascript复制
keystone user-password-update --pass openstack sahara
keystone user-role-list --user sahara --tenant service
keystone user-role-add --user sahara --tenant service --role admin

添加keystone的endpoint

代码语言:javascript复制
keystone service-create --name sahara --type data_processing 
    --description "Sahara Data Processing"

keystone endpoint-create --service sahara --region RegionOne 
    --publicurl "http://192.168.206.190:8386/v1.1/%(tenant_id)s" 
    --adminurl "http://192.168.206.190:8386/v1.1/%(tenant_id)s" 
    --internalurl "http://192.168.206.190:8386/v1.1/%(tenant_id)s"

修改mysql的配置

代码语言:javascript复制
vim /etc/mysql/my.cnf
max_allowed_packet = 256M

修改完重启数据库服务

代码语言:javascript复制
service mysql restart

登录数据库,创建sahara用户和sahara数据库,并添加权限

代码语言:javascript复制
create user sahara IDENTIFIED by 'openstack';
grant alert,select,insert,update,delete,create,drop on sahara.* to sahara identified by 'openstack';

创建sahara的数据库表

代码语言:javascript复制
sahara-db-manage --config-file  /etc/sahara.conf upgrade head

进行Shara的配置,配置模板在/usr/local/share/sahara/sahara.conf.sample-basic目录下

代码语言:javascript复制
cp /usr/local/share/sahara/sahara.conf.sample-basic /etc/sahara.conf

修改sahara.conf的配置文件(配置的含义,在/usr/local/share/sahara/sahara.conf.sample-basic中有比较详细的描述,需要配置rabbit database keystone等配置。

代码语言:javascript复制
[DEFAULT]
use_neutron=true
use_floating_ips=false
debug=true
verbose=true
log_file=sahara.log
log_dir=/var/log
#plugins=vanilla,hdp,spark
rpc_backend = rabbit
rabbit_host=192.168.206.190
rabbit_port=5672
rabbit_hosts=$rabbit_host:$rabbit_port
rabbit_userid=guest
rabbit_password=openstack
rabbit_virtual_host=/

[database]
connection = mysql://sahara:openstack@192.168.206.190/sahara

[keystone_authtoken]
auth_uri = http://192.168.206.190:5000
identity_uri=http://192.168.206.190:35357/
admin_tenant_name = service
admin_user = sahara
admin_password = openstack

设置policy文件

在sahara配置文件的同一个目录(/etc/sahara)下,创建一个policy.json的文件,当然也可以在配置文件中指定policy_file 和 policy_dirs。

默认是运行所有用户访问所有的方法:

代码语言:javascript复制
{
    "default": ""
}

下面这个配置不允许非admin用户访问镜像的主要方法:

代码语言:javascript复制
{
    "default": "",
    "images:register": "role:admin",
    "images:unregister": "role:admin",
    "images:add_tags": "role:admin",
    "images:remove_tags": "role:admin"
}

启动 sahara-api 和 sahara-engine 服务

代码语言:javascript复制
# systemctl start openstack-sahara-api
# systemctl start openstack-sahara-engine

配置开机启动

代码语言:javascript复制
# systemctl enable openstack-sahara-api
# systemctl enable openstack-sahara-engine

使用 Sahara 部署 Hadoop 集群

身份服务配置

指定环境变量

代码语言:javascript复制
export OS_AUTH_URL=http://127.0.0.1:5000/v2.0/
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=nova
上传镜像

需要将虚拟机映像上传到 OpenStack 映像服务。您可以自己构建映像。本指南使用最新生成的 Ubuntu 原版镜像(称为 sahara-vanilla-latest-ubuntu.qcow2)和最新版本的 vanilla 插件作为示例。

将生成的镜像上传到 OpenStack Image 服务:

代码语言:javascript复制
$ openstack image create sahara-vanilla-latest-ubuntu --disk-format qcow2 
    --container-format bare --file sahara-vanilla-latest-ubuntu.qcow2
 ------------------ -------------------------------------- 
| Field            | Value                                |
 ------------------ -------------------------------------- 
| checksum         | 3da49911332fc46db0c5fb7c197e3a77     |
| container_format | bare                                 |
| created_at       | 2016-02-29T10:15:04.000000           |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | 71b9eeac-c904-4170-866a-1f833ea614f3 |
| is_public        | False                                |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | sahara-vanilla-latest-ubuntu         |
| owner            | 057d23cddb864759bfa61d730d444b1f     |
| properties       |                                      |
| protected        | False                                |
| size             | 1181876224                           |
| status           | active                               |
| updated_at       | 2016-02-29T10:15:41.000000           |
| virtual_size     | None                                 |
 ------------------ -------------------------------------- 

记住镜像名称或保存映像 ID。这将在Sahara 镜像注册期间使用。您可以使用 openstack 命令行工具获取映像 ID,如下所示:

代码语言:javascript复制
$ openstack image list --property name=sahara-vanilla-latest-ubuntu
 -------------------------------------- ------------------------------ 
| ID                                   | Name                         |
 -------------------------------------- ------------------------------ 
| 71b9eeac-c904-4170-866a-1f833ea614f3 | sahara-vanilla-latest-ubuntu |
 -------------------------------------- ------------------------------ 
注册镜像到Sahara
代码语言:javascript复制
openstack dataprocessing image register sahara-vanilla-latest-ubuntu 
    --username ubuntu

添加标签

代码语言:javascript复制
$ openstack dataprocessing image tags add sahara-vanilla-latest-ubuntu 
    --tags vanilla 1.2.1
 ------------- -------------------------------------- 
| Field       | Value                            |
 ------------- -------------------------------------- 
| Description | None                              |
| Id          | 71b9eeac-c904-4170-866a-1f833ea614f3 |
| Name        | sahara-vanilla-latest-ubuntu         |
| Status      | ACTIVE                             |
| Tags        | 1.2.1, vanilla                      |
| Username    | ubuntu                             |
 ------------- -------------------------------------- 
创建节点组模板

可以使用以下命令获取有关可用插件的信息:

代码语言:javascript复制
openstack dataprocessing plugin list

您还可以使用 plugin show 命令获取有关特定插件的可用服务的信息。例如:

代码语言:javascript复制
$ openstack dataprocessing plugin show vanilla --plugin-version <plugin_version>
 --------------------- ----------------------------------------------------------------------------------------------------------------------- 
| Field               | Value                                                                                                                 |
 --------------------- ----------------------------------------------------------------------------------------------------------------------- 
| Description         | The Apache Vanilla plugin provides the ability to launch upstream Vanilla Apache Hadoop cluster without any           |
|                     | management consoles. It can also deploy the Oozie component.                                                          |
| Name                | vanilla                                                                                                               |
| Required image tags | <plugin_version>, vanilla                                                                                             |
| Title               | Vanilla Apache Hadoop                                                                                                 |
|                     |                                                                                                                       |
| Service:            | Available processes:                                                                                                  |
|                     |                                                                                                                       |
| HDFS                | datanode, namenode, secondarynamenode                                                                                 |
| Hadoop              |                                                                                                                       |
| Hive                | hiveserver                                                                                                            |
| JobFlow             | oozie                                                                                                                 |
| Spark               | spark history server                                                                                                  |
| MapReduce           | historyserver                                                                                                         |
| YARN                | nodemanager, resourcemanager                                                                                          |
 --------------------- ----------------------------------------------------------------------------------------------------------------------- 

使用以下命令创建主节点组模板:

代码语言:javascript复制
$ openstack dataprocessing node group template create 
    --name vanilla-default-master --plugin vanilla 
    --plugin-version <plugin_version> --processes namenode resourcemanager 
    --flavor 2 --auto-security-group --floating-ip-pool <pool-id>
 --------------------- -------------------------------------- 
| Field               | Value                                |
 --------------------- -------------------------------------- 
| Auto security group | True                                 |
| Availability zone   | None                                 |
| Flavor id           | 2                                    |
| Floating ip pool    | dbd8d1aa-6e8e-4a35-a77b-966c901464d5 |
| Id                  | 0f066e14-9a73-4379-bbb4-9d9347633e31 |
| Is boot from volume | False                                |
| Is default          | False                                |
| Is protected        | False                                |
| Is proxy gateway    | False                                |
| Is public           | False                                |
| Name                | vanilla-default-master               |
| Node processes      | namenode, resourcemanager            |
| Plugin name         | vanilla                              |
| Security groups     | None                                 |
| Use autoconfig      | False                                |
| Version             | <plugin_version>                     |
| Volumes per node    | 0                                    |
 --------------------- -------------------------------------- 

使用以下命令创建工作线程节点组模板:

代码语言:javascript复制
$ openstack dataprocessing node group template create 
    --name vanilla-default-worker --plugin vanilla 
    --plugin-version <plugin_version> --processes datanode nodemanager 
    --flavor 2 --auto-security-group --floating-ip-pool <pool-id>
 --------------------- -------------------------------------- 
| Field               | Value                                |
 --------------------- -------------------------------------- 
| Auto security group | True                                 |
| Availability zone   | None                                 |
| Flavor id           | 2                                    |
| Floating ip pool    | dbd8d1aa-6e8e-4a35-a77b-966c901464d5 |
| Id                  | 6546bf44-0590-4539-bfcb-99f8e2c11efc |
| Is boot from volume | False                                |
| Is default          | False                                |
| Is protected        | False                                |
| Is proxy gateway    | False                                |
| Is public           | False                                |
| Name                | vanilla-default-worker               |
| Node processes      | datanode, nodemanager                |
| Plugin name         | vanilla                              |
| Security groups     | None                                 |
| Use autoconfig      | False                                |
| Version             | <plugin_version>                     |
| Volumes per node    | 0                                    |
 --------------------- -------------------------------------- 

您还可以创建节点组模板,设置标志-从卷引导。这将告知节点组从卷而不是映像启动其实例。此功能允许更轻松地进行实时迁移并提高性能。

代码语言:javascript复制
$ openstack dataprocessing node group template create 
    --name vanilla-default-worker --plugin vanilla 
    --plugin-version <plugin_version> --processes datanode nodemanager 
    --flavor 2 --auto-security-group --floating-ip-pool <pool-id> 
    --boot-from-volume
 --------------------- -------------------------------------- 
| Field               | Value                                |
 --------------------- -------------------------------------- 
| Auto security group | True                                 |
| Availability zone   | None                                 |
| Flavor id           | 2                                    |
| Floating ip pool    | dbd8d1aa-6e8e-4a35-a77b-966c901464d5 |
| Id                  | 6546bf44-0590-4539-bfcb-99f8e2c11efc |
| Is boot from volume | True                                 |
| Is default          | False                                |
| Is protected        | False                                |
| Is proxy gateway    | False                                |
| Is public           | False                                |
| Name                | vanilla-default-worker               |
| Node processes      | datanode, nodemanager                |
| Plugin name         | vanilla                              |
| Security groups     | None                                 |
| Use autoconfig      | False                                |
| Version             | <plugin_version>                     |
| Volumes per node    | 0                                    |
 --------------------- -------------------------------------- 

或者,您可以从 JSON 文件创建节点组模板。

示例如下

创建一个名为 my_master_template_create.json 的文件,其中包含以下内容:

代码语言:javascript复制
{
    "plugin_name": "vanilla",
    "hadoop_version": "<plugin_version>",
    "node_processes": [
        "namenode",
        "resourcemanager"
    ],
    "name": "vanilla-default-master",
    "floating_ip_pool": "<floating_ip_pool_id>",
    "flavor_id": "2",
    "auto_security_group": true
}

创建一个名为 my_worker_template_create.json 的文件,其中包含以下内容:

代码语言:javascript复制
{
    "plugin_name": "vanilla",
    "hadoop_version": "<plugin_version>",
    "node_processes": [
        "nodemanager",
        "datanode"
    ],
    "name": "vanilla-default-worker",
    "floating_ip_pool": "<floating_ip_pool_id>",
    "flavor_id": "2",
    "auto_security_group": true
}

使用 openstack 客户端上传节点组模板:

代码语言:javascript复制
openstack dataprocessing node group template create 
    --json my_master_template_create.json
openstack dataprocessing node group template create 
    --json my_worker_template_create.json

列出可用的节点组模板,以确保已正确添加它们:

代码语言:javascript复制
$ openstack dataprocessing node group template list --name vanilla-default
 ------------------------ -------------------------------------- ------------- -------------------- 
| Name                   | Id                             | Plugin name | Version            |
 ------------------------ -------------------------------------- ------------- -------------------- 
| vanilla-default-master | 0f066e14-9a73-4379-bbb4-9d9347633e31 | vanilla     | <plugin_version>   |
| vanilla-default-worker | 6546bf44-0590-4539-bfcb-99f8e2c11efc | vanilla     | <plugin_version>   |
 ------------------------ -------------------------------------- ------------- -------------------- 

记住主节点和工作节点组模板的名称或保存 ID,因为它们将在创建群集模板时使用。

创建集群模板

使用以下命令创建群集模板:

代码语言:javascript复制
$ openstack dataprocessing cluster template create 
    --name vanilla-default-cluster 
    --node-groups vanilla-default-master:1 vanilla-default-worker:3

 ---------------- ---------------------------------------------------- 
| Field          | Value                                              |
 ---------------- ---------------------------------------------------- 
| Anti affinity  |                                                    |
| Description    | None                                               |
| Id             | 9d871ebd-88a9-40af-ae3e-d8c8f292401c               |
| Is default     | False                                              |
| Is protected   | False                                              |
| Is public      | False                                              |
| Name           | vanilla-default-cluster                            |
| Node groups    | vanilla-default-master:1, vanilla-default-worker:3 |
| Plugin name    | vanilla                                            |
| Use autoconfig | False                                              |
| Version        | <plugin_version>                                   |
 ---------------- ---------------------------------------------------- 

或者,可以从 JSON 文件创建群集模板:

创建一个名为 my_cluster_template_create.json 的文件,其中包含以下内容:

代码语言:javascript复制
{
    "plugin_name": "vanilla",
    "hadoop_version": "<plugin_version>",
    "node_groups": [
        {
            "name": "worker",
            "count": 3,
            "node_group_template_id": "6546bf44-0590-4539-bfcb-99f8e2c11efc"
        },
        {
            "name": "master",
            "count": 1,
            "node_group_template_id": "0f066e14-9a73-4379-bbb4-9d9347633e31"
        }
    ],
    "name": "vanilla-default-cluster",
    "cluster_configs": {}
}

使用 openstack 命令行工具上传集群模板:

代码语言:javascript复制
openstack dataprocessing cluster template create --json my_cluster_template_create.json

记住群集模板名称或保存群集模板 ID,以便在集群配置中使用。可以在创建命令的输出中找到集群 ID,也可以通过列出集群模板找到,如下所示:

代码语言:javascript复制
$ openstack dataprocessing cluster template list --name vanilla-default
 ------------------------- -------------------------------------- ------------- -------------------- 
| Name                    | Id                                   | Plugin name | Version            |
 ------------------------- -------------------------------------- ------------- -------------------- 
| vanilla-default-cluster | 9d871ebd-88a9-40af-ae3e-d8c8f292401c | vanilla     | <plugin_version>   |
 ------------------------- -------------------------------------- ------------- -------------------- 
创建集群

使用以下命令创建集群:

代码语言:javascript复制
$ openstack dataprocessing cluster create --name my-cluster-1 
    --cluster-template vanilla-default-cluster --user-keypair my_stack 
    --neutron-network private --image sahara-vanilla-latest-ubuntu

 ---------------------------- ---------------------------------------------------- 
| Field                      | Value                                              |
 ---------------------------- ---------------------------------------------------- 
| Anti affinity              |                                                    |
| Cluster template id        | 9d871ebd-88a9-40af-ae3e-d8c8f292401c               |
| Description                |                                                    |
| Id                         | 1f0dc6f7-6600-495f-8f3a-8ac08cdb3afc               |
| Image                      | 71b9eeac-c904-4170-866a-1f833ea614f3               |
| Is protected               | False                                              |
| Is public                  | False                                              |
| Is transient               | False                                              |
| Name                       | my-cluster-1                                       |
| Neutron management network | fabe9dae-6fbd-47ca-9eb1-1543de325efc               |
| Node groups                | vanilla-default-master:1, vanilla-default-worker:3 |
| Plugin name                | vanilla                                            |
| Status                     | Validating                                         |
| Use autoconfig             | False                                              |
| User keypair id            | my_stack                                           |
| Version                    | <plugin_version>                                   |
 ---------------------------- ---------------------------------------------------- 

或者,您可以从 JSON 文件创建群集模板:

创建一个名为 my_cluster_create.json 的文件,其中包含以下内容:

代码语言:javascript复制
{
    "name": "my-cluster-1",
    "plugin_name": "vanilla",
    "hadoop_version": "<plugin_version>",
    "cluster_template_id" : "9d871ebd-88a9-40af-ae3e-d8c8f292401c",
    "user_keypair_id": "my_stack",
    "default_image_id": "71b9eeac-c904-4170-866a-1f833ea614f3",
    "neutron_management_network": "fabe9dae-6fbd-47ca-9eb1-1543de325efc"
}

具有值my_stack的参数user_keypair_id是通过创建密钥对生成的。您可以在 OpenStack 仪表板中或通过 openstack 命令行客户端创建自己的密钥对,如下所示:

代码语言:javascript复制
openstack keypair create my_stack --public-key $PATH_TO_PUBLIC_KEY

如果 sahara 配置为使用中子进行网络,则还需要在cluster create命令中包含 ----neutron-network 参数,或在 my_cluster_create.json 中包含 neutron_management_network 参数。如果您的环境不使用中子,则应省略这些参数。您可以使用以下命令确定中子网络 ID:

代码语言:javascript复制
openstack network list

创建并启动群集:

代码语言:javascript复制
openstack dataprocessing cluster create --json my_cluster_create.json

使用 openstack 命令行工具验证集群状态,如下所示:

代码语言:javascript复制
$ openstack dataprocessing cluster show my-cluster-1 -c Status
 -------- -------- 
| Field  | Value  |
 -------- -------- 
| Status | Active |
 -------- -------- 

群集创建操作可能需要几分钟才能完成。在此期间,从上一个命令返回的“状态”可能会显示Active以外的状态。还可以使用wait标志创建集群。在这种情况下,在将群集移动到Active”状态之前,群集创建命令将不会完成。

运行 MapReduce 检查 Hadoop 安装

检查 Hadoop 安装是否正常工作。使用上面使用的 ssh 密钥通过 ssh 登录到 NameNode(通常是主节点):

代码语言:javascript复制
ssh -i my_stack.pem ubuntu@<namenode_ip>

#切换到 hadoop 用户
sudo su hadoop

#转到共享的Hadoop目录并运行最简单的MapReduce示例
cd /opt/hadoop-<plugin_version>/share/hadoop/mapreduce
/opt/hadoop-<plugin_version>/bin/hadoop jar hadoop-mapreduce-examples-<plugin_version>.jar pi 10 100

祝贺!您的Hadoop集群已准备就绪,可以在OpenStack云上运行。

弹性数据处理 (EDP)

作业二进制文件是你为作业定义/上传源代码(主电源和库)的实体。首先,您需要将二进制文件或脚本下载到 swift 容器,并使用以下命令在Sahara中注册您的文件:

代码语言:javascript复制
(openstack) dataprocessing job binary create --url "swift://integration.sahara/hive.sql" 
  --username username --password password --description "My first job binary" hive-binary
数据来源

数据源是存放作业的输入和输出的实体。您可以创建与 Swift、manila或 HDFS 相关的数据源。您需要设置数据源的类型(swift,hdfs,manila,maprfs),名称和url。接下来的两个命令将在 swift 中创建输入和输出数据源。

代码语言:javascript复制
$ openstack dataprocessing data source create --type swift --username admin --password admin 
   --url "swift://integration.sahara/input.txt" input

$ openstack dataprocessing data source create --type swift --username admin --password admin 
   --url "swift://integration.sahara/output.txt" output

如果要在 hdfs 中创建数据源,请使用有效的 hdfs url:

代码语言:javascript复制
$ openstack dataprocessing data source create --type hdfs --url "hdfs://tmp/input.txt" input

$ openstack dataprocessing data source create --type hdfs --url "hdfs://tmp/output.txt" output
工作模板(API 中)

在此步骤中,您需要创建作业模板。您必须使用 type 参数设置作业模板的类型。使用在上一步中创建的作业二进制文件选择主库,并为作业模板设置名称。

命令示例:

代码语言:javascript复制
$ openstack dataprocessing job template create --type Hive 
   --name hive-job-template --main hive-binary
工作(API 中的执行)

要启动作业,需要传递以下参数:

  • 作业的输入/输出数据源的名称或 ID
  • 作业模板的名称或 ID
  • 要在其上运行作业的群集的名称或 ID

例如:

代码语言:javascript复制
$ openstack dataprocessing job execute --input input --output output 
  --job-template hive-job-template --cluster my-first-cluster

可以使用以下命令检查作业的状态:

代码语言:javascript复制
$ openstack dataprocessing job show <id_of_your_job>

如果有工作输出数据。祝贺你!

参考来源:https://docs.openstack.org/sahara/ latest/user/quickstart.html

0 人点赞