Hello World on Impala

Cloudera Impala 官方教程 《Impala
Tutorial
》,讲解了Impala一些基本操作,但操作步骤前后缺少连贯性,本文节W选《Impala Tutorial》中的部分示例,从零开始讲解了一个完整示例:创建表、加载数据、查询数据。提供了一个入门级教程,通过本文的操作,向Impala说“Hello World”。

本文假设你已经具备了安装好的Impala环境,环境搭建可以参考: CDH5上安装Hive,HBase,Impala,Spark等服务

创建cloudera用户和组

Impala Tutorial中示例的登录用户名为cloudera,但Cloudera Manager 5.0.2 安装时并没有自动在主机节点(例如:h1.worker.com)上创建cloudera用户,为了和Impala Tutorial 中示例一致, 需要手工创建cloudera用户和组。

以root用户身份登录主机节点(例如:h1.worker.com),先检查下是否存在cloudera用户,执行如下的命令:

[[email protected] home]# cat /etc/passwd | grep cloudera
cloudera-scm:x:496:493:Cloudera Manager:/var/run/cloudera-scm-server:/sbin/nologin

上面显示不存在cloudera用户。如果存在,则不需要进行下面的创建用户步骤了。

创建cloudera用户和组,并设置密码为cloudera:

[[email protected] home]# groupadd cloudera
[[email protected] home]# useradd -g cloud era cloudera
[[email protected] home]# passwd cloudera
Changing password for user cloudera.an
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.

在HDFS上创建/user/cloudera文件夹

我们需要在HDFS上新建/user/cloudera文件夹,并将这个文件夹的所有者修改为cloudera,这需要HDFS的超级用户才有权限执行这些操作。HDFS的超级用户即运行name node进程的用户。宽泛的讲,如果你启动了name node,你就是超级用户。通过Cloudera Manager 5安装环境的超级用户名为:hdfs

切换到HDFS的超级用户,先检查是否存在 /user/cloudera 文件夹,如果不存在则创建。

[[email protected] home]# su - hdfs
-bash-4.1$ hdfs dfs -ls /user
Found 7 items
drwx------   - hdfs   supergroup          0 2014-06-26 08:44 /user/hdfs
drwxrwxrwx   - mapred hadoop              0 2014-06-20 10:10 /user/history
drwxrwxr-t   - hive   hive                0 2014-06-20 10:13 /user/hive
drwxrwxr-x   - impala impala              0 2014-06-20 10:18 /user/impala
drwxrwxr-x   - oozie  oozie               0 2014-06-20 10:15 /user/oozie
drwxr-x--x   - spark  spark               0 2014-06-20 10:08 /user/spark
drwxrwxr-x   - sqoop2 sqoop               0 2014-06-20 10:16 /user/sqoop2

在HDFS上创建 /user/cloudera 目录,设置目录的所有者和组为cloudera

-bash-4.1$ hdfs dfs -mkdir -p /user/cloudera
-bash-4.1$ hdfs dfs -chown cloudera:cloudera /user/cloudera
-bash-4.1$ hdfs dfs -ls /user
Found 8 items
drwxr-xr-x   - cloudera cloudera            0 2014-06-26 09:05 /user/cloudera
drwx------   - hdfs     supergroup          0 2014-06-26 08:44 /user/hdfs
drwxrwxrwx   - mapred   hadoop              0 2014-06-20 10:10 /user/history
drwxrwxr-t   - hive     hive                0 2014-06-20 10:13 /user/hive
drwxrwxr-x   - impala   impala              0 2014-06-20 10:18 /user/impala
drwxrwxr-x   - oozie    oozie               0 2014-06-20 10:15 /user/oozie
drwxr-x--x   - spark    spark               0 2014-06-20 10:08 /user/spark
drwxrwxr-x   - sqoop2   sqoop               0 2014-06-20 10:16 /user/sqoop2

经过以上的操作已经具备了运行 Impala Tutorial中示例的条件。

HDFS上创建装载表数据的目录

本节演示如何创建一些非常小的表,适合初次使用的用户实验 Impala SQL 功能。 TAB1 和 TAB2 从 HDFS 文件中载入数据。可以把你想查询的数据放入 HDFS 中。想开始这一过程,先在你的 HDFS 用户目录下创建一个或多个子目录。每个表中的数据存放在单独的子目录里。这个例子使用 mkdir
中的 -p 选项,这样如果不存在的父目录中则自动创建。

[[email protected] ~]# su - cloudera
[[email protected] ~]$ whoami
cloudera
[[email protected] ~]$ hdfs dfs -ls /user
Found 8 items
drwxr-xr-x   - cloudera cloudera            0 2014-06-26 09:05 /user/cloudera
drwx------   - hdfs     supergroup          0 2014-06-26 08:44 /user/hdfs
drwxrwxrwx   - mapred   hadoop              0 2014-06-20 10:10 /user/history
drwxrwxr-t   - hive     hive                0 2014-06-20 10:13 /user/hive
drwxrwxr-x   - impala   impala              0 2014-06-20 10:18 /user/impala
drwxrwxr-x   - oozie    oozie               0 2014-06-20 10:15 /user/oozie
drwxr-x--x   - spark    spark               0 2014-06-20 10:08 /user/spark
drwxrwxr-x   - sqoop2   sqoop               0 2014-06-20 10:16 /user/sqoop2
[[email protected] ~]$ hdfs dfs -mkdir -p /user/cloudera/sample_data/tab1 /user/cloudera/sample_data/tab2
[[email protected] ~]$ 

通过以上的操作,就创建了存放TAB1 和 TAB2表数据的目录。

csv文件存放到HDFS目录

拷贝如下的两个.csv文件到本地的文件系统。

tab1.csv:

1,true,123.123,2012-10-24 08:55:00
2,false,1243.5,2012-10-25 13:40:00
3,false,24453.325,2008-08-22 09:33:21.123
4,false,243423.325,2007-05-12 22:32:21.33454
5,true,243.325,1953-04-22 09:11:33

tab2.csv:

1,true,12789.123
2,false,1243.5
3,false,24453.325
4,false,2423.3254
5,true,243.325
60,false,243565423.325
70,true,243.325
80,false,243423.325
90,true,243.325

执行下面的命令将两个 .csv 文件放入单独的 HDFS 目录:

[[email protected] testdata]$ pwd
/home/cloudera/testdata
[[email protected]h1 testdata]$ ll
total 8
-rw-rw-r--. 1 cloudera cloudera 193 Jun 27 08:33 tab1.csv
-rw-rw-r--. 1 cloudera cloudera 158 Jun 27 08:34 tab2.csv
[[email protected] testdata]$ hdfs dfs -put tab1.csv /user/cloudera/sample_data/tab1
[[email protected] testdata]$ hdfs dfs -ls /user/cloudera/sample_data/tab1
Found 1 items
-rw-r--r--   3 cloudera cloudera        193 2014-06-27 08:35 /user/cloudera/sample_data/tab1/tab1.csv
[[email protected] testdata]$ hdfs dfs -put tab2.csv /user/cloudera/sample_data/tab2
[[email protected] testdata]$ hdfs dfs -ls /user/cloudera/sample_data/tab2
Found 1 items
-rw-r--r--   3 cloudera cloudera        158 2014-06-27 08:36 /user/cloudera/sample_data/tab2/tab2.csv
[[email protected] testdata]$ 

每个数据文件的名称不重要。事实上,当 Impala 第一次检测数据目录的内容时,它认为目录下的所有文件都是表中的数据文件,无论目录下有多少文件,无论什么样的文件名。

要了解你的 HDFS 文件系统中什么目录可用,不同的目录和文件都有什么权限,执行 hdfs dfs -ls / 并沿着看到的目录树一直执行 -ls 操作。

创建表,加载数据

使用 impala-shell 命令创建表,可以用交互式创建,也可以用 SQL 脚本。

下面的例子演示创建了三个表。每个表中的列都使用了不同的数据类型,如 Boolean 或 integer。 例子还包括了如何格式数据的命令,例如列以逗号分隔,这样从 .csv 文件导入数据。我们已经有了存放在 HDFS 目录树中的包含数据的 .csv 文件,我们给表指定了包含对应 .csv 文件的路径位置。Impala 认为这些目录下的所有文件里的所有数据都是表里的数据。

table_setup.sql 文件包含如下内容:

DROP TABLE IF EXISTS tab1;
-- The EXTERNAL clause means the data is located outside the central location for Impala data files
-- and is preserved when the associated Impala table is dropped. We expect the data to already
-- exist in the directory specified by the LOCATION clause.
CREATE EXTERNAL TABLE tab1
(
   id INT,
   col_1 BOOLEAN,
   col_2 DOUBLE,
   col_3 TIMESTAMP
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/cloudera/sample_data/tab1';

DROP TABLE IF EXISTS tab2;
-- TAB2 is an external table, similar to TAB1.
CREATE EXTERNAL TABLE tab2
(
   id INT,
   col_1 BOOLEAN,
   col_2 DOUBLE
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/cloudera/sample_data/tab2';

DROP TABLE IF EXISTS tab3;
-- Leaving out the EXTERNAL clause means the data will be managed
-- in the central Impala data directory tree. Rather than reading
-- existing data files when the table is created, we load the
-- data after creating the table.
CREATE TABLE tab3
(
   id INT,
   col_1 BOOLEAN,
   col_2 DOUBLE,
   month INT,
   day INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

执行 table_setup.sql 脚本,使用:

impala-shell -i 172.16.230.152 -f table_setup.sql

操作步骤如下:

[[email protected] testdata]$ pwd
/home/cloudera/testdata
[[email protected] testdata]$ ll
total 12
-rw-rw-r--. 1 cloudera cloudera  193 Jun 27 08:33 tab1.csv
-rw-rw-r--. 1 cloudera cloudera  158 Jun 27 08:34 tab2.csv
-rw-rw-r--. 1 cloudera cloudera 1106 Jun 27 08:49 table_setup.sql
[[email protected] testdata]$ impala-shell -i 172.16.230.152 -f table_setup.sql
Starting Impala Shell without Kerberos authentication
Connected to 172.16.230.152:21000
Server version: impalad version 1.3.1-cdh5 RELEASE (build )
...
...
Returned 0 row(s) in 0.28s
[[email protected] testdata]$ 

查看 Impala 表结构

登录impala-shell,执行下面的命令:

show tables;

describe tab1;

操作步骤如下:

[[email protected] testdata]$ impala-shell -i 172.16.230.152
Starting Impala Shell without Kerberos authentication
Connected to 172.16.230.152:21000
Server version: impalad version 1.3.1-cdh5 RELEASE (build )
Welcome to the Impala shell. Press TAB twice to see a list of available commands.

Copyright (c) 2012 Cloudera, Inc. All rights reserved.

(Shell build version: Impala Shell v1.3.1-cdh5 () built on Mon Jun  9 09:30:26 PDT 2014)
[172.16.230.152:21000] > show tables;
Query: show tables
+------+
| name |
+------+
| tab1 |
| tab2 |
| tab3 |
+------+
Returned 3 row(s) in 0.01s
[172.16.230.152:21000] > describe tab1;
Query: describe tab1
+-------+-----------+---------+
| name  | type      | comment |
+-------+-----------+---------+
| id    | int       |         |
| col_1 | boolean   |         |
| col_2 | double    |         |
| col_3 | timestamp |         |
+-------+-----------+---------+
Returned 4 row(s) in 6.85s
[172.16.230.152:21000] > quit;
Goodbye
[[email protected] testdata]$ 

查询 Impala 表

登录impala-shell,执行如下的sql语句:

SELECT * FROM tab1;

SELECT * FROM tab2 LIMIT 5;

SELECT tab2.*

FROM tab2,

(SELECT tab1.col_1, MAX(tab2.col_2) AS max_col2

FROM tab2, tab1

WHERE tab1.id = tab2.id

GROUP BY col_1) subquery1

WHERE subquery1.max_col2 = tab2.col_2;

操作步骤如下:

[[email protected] testdata]$ impala-shell -i 172.16.230.152
Starting Impala Shell without Kerberos authentication
Connected to 172.16.230.152:21000
Server version: impalad version 1.3.1-cdh5 RELEASE (build )
Welcome to the Impala shell. Press TAB twice to see a list of available commands.

Copyright (c) 2012 Cloudera, Inc. All rights reserved.

(Shell build version: Impala Shell v1.3.1-cdh5 () built on Mon Jun  9 09:30:26 PDT 2014)
[172.16.230.152:21000] > SELECT * FROM tab1;
Query: select * FROM tab1
+----+-------+------------+-------------------------------+
| id | col_1 | col_2      | col_3                         |
+----+-------+------------+-------------------------------+
| 1  | true  | 123.123    | 2012-10-24 08:55:00           |
| 2  | false | 1243.5     | 2012-10-25 13:40:00           |
| 3  | false | 24453.325  | 2008-08-22 09:33:21.123000000 |
| 4  | false | 243423.325 | 2007-05-12 22:32:21.334540000 |
| 5  | true  | 243.325    | 1953-04-22 09:11:33           |
+----+-------+------------+-------------------------------+
Returned 5 row(s) in 2.39s
[172.16.230.152:21000] > SELECT * FROM tab2 LIMIT 5;
Query: select * FROM tab2 LIMIT 5
+----+-------+-----------+
| id | col_1 | col_2     |
+----+-------+-----------+
| 1  | true  | 12789.123 |
| 2  | false | 1243.5    |
| 3  | false | 24453.325 |
| 4  | false | 2423.3254 |
| 5  | true  | 243.325   |
+----+-------+-----------+
Returned 5 row(s) in 1.30s
[172.16.230.152:21000] > SELECT tab2.*
                       > FROM tab2,
                       > (SELECT tab1.col_1, MAX(tab2.col_2) AS max_col2
                       >  FROM tab2, tab1
                       >  WHERE tab1.id = tab2.id
                       >  GROUP BY col_1) subquery1
                       > WHERE subquery1.max_col2 = tab2.col_2;
Query: select tab2.* FROM tab2, (SELECT tab1.col_1, MAX(tab2.col_2) AS max_col2 FROM tab2, tab1 WHERE tab1.id = tab2.id GROUP BY col_1) subquery1 WHERE subquery1.max_col2 = tab2.col_2
+----+-------+-----------+
| id | col_1 | col_2     |
+----+-------+-----------+
| 1  | true  | 12789.123 |
| 3  | false | 24453.325 |
+----+-------+-----------+
Returned 2 row(s) in 1.02s
[172.16.230.152:21000] > quit;
Goodbye
[[email protected] testdata]$ 

结束语:

本文讲解了一个Impala使用的基本示例,提供了一个入门指导,更多的示例参见:Impala Tutorial

本文使用了许多 impala-shell 命令的方法,具体参见 Using the Impala Shell (impala-shell Command)

原创作品,转载请注明出处 http://blog.csdn.net/yangzhaohui168/article/details/35340387

Hello World on Impala,布布扣,bubuko.com

时间: 2024-10-26 02:47:28

Hello World on Impala的相关文章

学习Hive和Impala必看经典解析

Hive和Impala作为数据查询工具,它们是怎样来查询数据的呢?与Impala和Hive进行交互,我们有哪些工具可以使用呢? 我们首先明确Hive和Impala分别提供了对应查询的接口: (1)命令行shell: 1. Impala:impala shell 2. Hive:beeline(早期hive的命令行版本是hive shell,现在基本不使用) (2)Hue Web UI: 1.Hue里面提供了 Hive查询编辑器 2.Hue里面提供了Impala查询编辑器 3.Hue里面提供了元数

impala基础

impala: 查询impala表时一定要加库名使用级联删除带有表的数据库:DROP database name cascade; insert插入的两种方式: 1. insert into employee (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Ramesh', 32, 'Ahmedabad', 20000 ); 2.不指定列值,注意顺序 insert into employee values (2, 'Khilan', 25,'Delhi', 150

Hive和Impala加载和存储数据功能曝光

Hive与Impala都是构建在Hadoop之上的数据查询工具,那么在实际的应用中,它们是如何加载和存储数据的呢? Hive和Impala存储和加载表,和所有的关系型数据库一样,有自己的数据管理结构,从它的Server到Database再到表和视图. 在其他的数据库中,表都是以自己特定的文件格式来存储的,比如Oracle有自己的存储格式,而对Hive而言,一个表就是包含一个或多个文件的HDFS目录,这个文件是属于表下面的内容,默认存储路径:/user/hive/warehouse/<table_

如何安装使用Impala

一.Impala简介 Cloudera Impala对你存储在Apache Hadoop在HDFS,HBase的数据提供直接查询互动的SQL.除了像Hive使用相同的统一存储平台,Impala也使用相同的元数据,SQL语法(Hive SQL),ODBC驱动程序和用户界面(Hue Beeswax).Impala还提供了一个熟悉的面向批量或实时查询和统一平台. 二.Impala安装1.安装要求(1)软件要求 Red Hat Enterprise Linux (RHEL)/CentOS 6.2 (64

Impala中的代码生成技术

Cloudera Impala是一种为Hadoop生态系统打造的开源MPP(massive parallel processing)数据库,它主要为分析型查询负载而设计,而非OLTP.Impala能最大限度地利用现代硬件和高效查询执行的最新技术.LLVM下的运行时代码生成就是用来提升执行性能的技术之一. LLVM简介 LLVM是一个编译器及相关工具的库(toolchain),它不同于独立应用式(stand-alone)的传统编译器,LLVM是模块化且可重用的.它允许Impala这样的应用在运行的

Impala ODBC 安装笔记

Impala在线文档介绍了 Impala ODBC接口安装和配置 http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH5/latest/Impala/Installing-and-Using-Impala/ciiu_impala_odbc.html Impala ODBC 驱动下载地址: http://www.cloudera.com/content/support/en/downloads/connectors.h

初识 Cloudera Impala

Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性.相比之下,Impala的最大特点也是最大卖点就是它的快速.Impala 为存储在 HDFS 和 HBase 中的数据提供了一个实时 SQL 查询接口. Impala优点 下图来自zdnet,描述了Impala的一些优点:

&lt;Impala&gt;&lt;Overview&gt;&lt;UDF&gt;

Overview Apache Impala (incubating) is the open source, native analytic database for apache Hadoop. Features Do BI-style Queries on Hadoop: low latency and high concurrency for BI/analytic queries on Hadoop(not delivered by batch frameworks such as A

SQL数据分析概览——Hive、Impala、Spark SQL、Drill、HAWQ 以及Presto+druid

转自infoQ! 根据 O'Reilly 2016年数据科学薪资调查显示,SQL 是数据科学领域使用最广泛的语言.大部分项目都需要一些SQL 操作,甚至有一些只需要SQL. 本文涵盖了6个开源领导者:Hive.Impala.Spark SQL.Drill.HAWQ 以及Presto,还加上Calcite.Kylin.Phoenix.Tajo 和Trafodion.以及2个商业化选择Oracle Big Data SQL 和IBM Big SQL,IBM 尚未将后者更名为"Watson SQL&q