Kudu 入门指南

原文链接 : http://kudu.apache.org/docs/quickstart.html

译文链接 : http://cwiki.apachecn.org/pages/viewpage.action?pageId=10813610

贡献者 : 小瑶 ApacheCN Apache中文网

Apache Kudu 快速开始

按照这些说明设置和运行 Kudu VM ,并在几分钟之内从 KuduKudu_ImpalaCDH 开始。

获得 Kudu 快速开始 VM

先决条件

  1. 安装 Oracle VirtualboxVM 已经通过测试,可以在 Ubuntu 14.04 上使用 VirtualBox 4.3 版本,并在 OSX 10.9 上使用 VirtualBox 5 的版本。VirtualBox 也包含在大多数软件包管理器中:apt-getbrew 等。
  2. 安装完成后,使用 which VBoxManage 命令确保 VBoxManage 在您的 PATH 中。

安装

要下载并启动 VM ,请在终端窗口中执行以下命令。

  1. $ curl -s https://raw.githubusercontent.com/cloudera/kudu-examples/master/demo-vm-setup/bootstrap.sh | bash

此命令下载一个 shell 脚本,这个脚本克隆了 kudu-example Git 仓库,然后将大约 1.2 GB 大小的 VM 映像下载到当前的工作目录中。您可以在此脚本下载下来之后检查这个脚本通过删除上面脚本的 | bash 部分。安装完成之后,您可以通过 SSH 连接到 guest 虚拟机来验证一切是否正常:

  1. $ ssh demo@quickstart.cloudera

上面的 usernamepassword 都是演示。此外,演示用户具有无密码的 sudo 权限,以便您可以安装其他软件和管理 guest OS 。您还可以访问 kudu-examples 作为 /home/demo/kudu-examples/ 中的共享文件夹,或者在 host 上的 VirtualBox 共享文件夹位置。这是使脚本或数据对 guest 可见的一种快捷方式。

你可以通过执行以下命令快速验证 KuduImpala 是否正在运行:

  1. $ ps aux | grep kudu
  2. $ ps aux | grep impalad

如果连接到 VM 或其中一个进程没有运行时出现问题,请务必参阅 “疑难解答” 部分。

加载数据

要使用 Kudu 和 Impala 进行一些典型的操作,我们将使用 San Francisco MTA GPS dataset 。该数据集包含从 SF MTA车队的总线上安装的传感器周期性传输的原始位置数据。

  1. 下载示例数据并将其加载到 HDFS 中 首先我们将下载示例数据集,准备并将其上传到 HDFS 集群中。 SF MTA 的站点通常有点慢,所以我们从数据集中镜像了一个 CSV 文件样本,网址为 http://kudu-sample-data.s3.amazonaws.com/sfmtaAVLRawData01012013.csv.gz 原始数据集使用 DOS 类型的行结尾,因此我们将在上传过程中使用 tr 将其转换为 UNIX 风格。

    1. $ wget http://kudu-sample-data.s3.amazonaws.com/sfmtaAVLRawData01012013.csv.gz
    2. $ hdfs dfs -mkdir /sfmta
    3. $ zcat sfmtaAVLRawData01012013.csv.gz | tr -d '\r' | hadoop fs -put - /sfmta/data.csv
  2. 创建一个新的外部 Impala 表以访问纯文本数据。要在虚拟机中连接到 Impala ,请执行以下命令:

    1. ssh demo@quickstart.cloudera -t impala-shell

    现在,您可以执行以下命令:

    1. CREATE EXTERNAL TABLE sfmta_raw (
    2. revision int,
    3. report_time string,
    4. vehicle_tag int,
    5. longitude float,
    6. latitude float,
    7. speed float,
    8. heading float
    9. )
    10. ROW FORMAT DELIMITED
    11. FIELDS TERMINATED BY ','
    12. LOCATION '/sfmta/'
    13. TBLPROPERTIES ('skip.header.line.count'='1');
  3. 验证数据是否实际加载运行以下命令:

    1. SELECT count(*) FROM sfmta_raw;
    2. +----------+
    3. | count(*) |
    4. +----------+
    5. | 859086 |
    6. +----------+
  4. 接下来,我们将创建一个 Kudu 表并加载数据。请注意,我们将字符串 report_time 字段转换为 unix 风格的时间戳,以便更有效的存储。

    1. CREATE TABLE sfmta
    2. PRIMARY KEY (report_time, vehicle_tag)
    3. PARTITION BY HASH(report_time) PARTITIONS 8
    4. STORED AS KUDU
    5. AS SELECT
    6. UNIX_TIMESTAMP(report_time, 'MM/dd/yyyy HH:mm:ss') AS report_time,
    7. vehicle_tag,
    8. longitude,
    9. latitude,
    10. speed,
    11. heading
    12. FROM sfmta_raw;
    13. +------------------------+
    14. | summary |
    15. +------------------------+
    16. | Inserted 859086 row(s) |
    17. +------------------------+
    18. Fetched 1 row(s) in 5.75s

    创建的表使用复合主键。有关 Impala 的扩展 SQL 语法的更详细的介绍,请参阅 Kudu Impala 集成

读取和修改数据

现在数据存储在 Kudu 中,您可以对其执行查询。以下查询查找包含最高记录车速的数据点。

  1. SELECT * FROM sfmta ORDER BY speed DESC LIMIT 1;
  2. +-------------+-------------+--------------------+-------------------+-------------------+---------+
  3. | report_time | vehicle_tag | longitude | latitude | speed | heading |
  4. +-------------+-------------+--------------------+-------------------+-------------------+---------+
  5. | 1357022342 | 5411 | -122.3968811035156 | 37.76665878295898 | 68.33300018310547 | 82 |
  6. +-------------+-------------+--------------------+-------------------+-------------------+---------+

通过快速的 Google 搜索,我们可以看到这辆公共汽车在 68MPH16 街上东行。乍一看,这似乎不太可能是真实的。也许我们做一些研究,发现这辆公共汽车的传感器设备被打破了,我们决定删除数据。使用 Kudu 和 标准 SQL 这是非常容易纠正的:

  1. DELETE FROM sfmta WHERE vehicle_tag = '5411';
  2. -- Modified 1169 row(s), 0 row error(s) in 0.25s

下一步

以上示例显示了如何使用 ImpalaKudu 加载,查询和变更静态数据集。然而, Kudu 的真正实力是以流媒体方式吸收和突变数据的能力。

作为学习 Kudu 编程 API 的练习,请尝试实现一个使用 SFMTA XML 数据 Feed 的程序,将该相同的数据集实时摄取到 Kudu 表中。

故障排除

通过 SSH 访问 VM 的问题

  • 确保主机已安装 SSH 客户端。
  • 确保 VM 正在运行,通过运行以下命令并检查名为 kudu-demo 的虚拟机:

    1. $ VBoxManage list runningvms
  • 验证 VMIP 地址是否包含在主机的 /etc/hosts 文件中。您应该看到一行包含一个 IP 地址,后跟主机名 quickstart.cloudera 。要检查正在运行的 VMIP 地址,请使用下面的 VBoxManage 命令。

    1. $ VBoxManage guestproperty get kudu-demo /VirtualBox/GuestInfo/Net/0/V4/IP
    2. Value: 192.168.56.100
  • 如果您以前使用过 Cloudera QuickStart VM ,则 .ssh/known_hosts 文件可能包含对先前 VMSSH 凭据的引用。从此文件删除对 quickstart.cloudera 的任何引用。

在 VirtualBox 中运行时缺少 SSE4.2 支持

  • 运行 Kudu 目前需要一个支持 SSE4.2 ( Nehalem 或者更高版本的 Intel ) 的 CPU 。要通过 SSE4.2 支持进入 guest 虚拟机,请参阅 VirtualBox 文档

下一步