引言
本系列上一篇文章以
Oracle
数据源为例介绍了如何在
SAP HANA
服务器端安装和配置
SDA
数据源驱动。
SDA
支持的大多数数据源都是数据库,所以安装与配置过程大致相同。但是,
Hadoop
数据源相对其他
SDA
数据源较为特殊,作为一个分布式数据处理平台,
Hadoop
的数据通常存储在分布式文件系统
HDFS
或
NoSQL
数据库
HBase
中,这二者都不直接支持
ODBC
协议。
Hadoop
家族的
Hive
和
Impala
等数据查询工具能够以
SQL
方式操作存储在
HDFS
或
HBase
中的数据,并支持通过
ODBC
访问数据。因此,
SDA
可以通过
Hive
或
Impala
访问
Hadoop
数据源。本文讲解
SDA
如何利用
Hive
访问存储在
HDFS
中的数据。
部署
Hadoop
和
Hive
SAP HANA
官方支持的
Hadoop
版本是
Intel Distribution for Apache Hadoop version 2.3(
包括
Apache Hadoop version 1.0.3
和
Apache Hive 0.9.0)
。虽然官方的支持列表中只有
Intel Distribution for Apache Hadoop(IDH)
,
但是通过实验验证得知,普通的
Apache
版
Hadoop
和
Hive
同样可以通过
SDA
进行访问。本文实验使用三个结点组成的
Hadoop
集群,
Hadoop
和
Hive
的版本是:
Apache Hadoop 1.1.1
和
Apache Hive 0.12.0
。
关于
Hadoop
和
Hive
的安装和配置在此就不多说了,有兴趣的读者请参考相关资料。
部署好
Hadoop
和
Hive
后,我们需要准备一些数据,实验使用的是一张用户信息表。先介绍一下表结构:
列名
|
数据类型
|
描述
|
USERID
|
VARCHAR(20)
|
ID
号
|
GENDER
|
VARCHAR(6)
|
性别
|
AGE
|
INTEGER
|
年龄
|
PROFESSION
|
VARCHAR(20)
|
职业
|
SALARY
|
INTEGER
|
工资收入
|
|
|
|
Hive
支持从文件导入数据,本文实验从
CSV(Comma Separated Value)
文件导入数据到表格中。我们先在
Hive Shell
中用以下语句创建一张表。
create table
users
(
USERID
string
,
GENDER
string
,
AGE
int
, PROFESSION string, SALARY int
)
row format delimited
fields terminated by '\t';
然后,将
CSV
中的数据导入
users
表中:
load data local inpath '/input/file/path'
overwrite into table
users
;
此处是从本地文件系统导入数据,
Hive
同样支持从
HDFS
导入数据。本文实验数据量为
1000000
行。导入完成之后,
select count(*) from users
查看记录数,结果如下图:
从上图可以看到,
Hive
调用了
MapReduce
框架进行数据查询,
count
一百万行数据用了
14.6
秒。再查询前
10
条记录:
查询
10
条语句用了
0.1
秒。
安装与配置
HiveODBC
驱动
和其他
SDA
数据源一样,安装
HiveODBC
驱动之前需要在
SAP HANA
服务器端安装
unixODBC
驱动管理器。
HiveODBC
需要
unixODBC-2.3.1
或以上版本。关于
unixODBC
的安装,详见参考文献
[2]
。
装好驱动管理器后再安装
HiveODBC
驱动程序。如文献
[2]
中介绍,
SAP
官方推荐使用
Simba Technologies
提供的
HiveODBC
驱动。
1. 下载
Simba HiveODBC
驱动包后将其解压至指定文件夹,
进入
/
driver_install_dir
/samba/hiveodbc/lib/64/(
如果是
32
位系
统则此处的
64
用
32
代替
)
文件夹,确认存在驱动文件
libsimbahiveodbc64.so
。
2. 以
<sid>adm
用户登陆
SAP HANA
服务器;
3. 用
HDB stop
命令停止
SAP HANA
;
4. 将文件
/
driver_install_dir
/simba/hiveodbc/Setup/simba.hiveodbc.ini
拷贝到
<sid>adm
的家目录下:
cp /
driver_install_dir
/simba/hiveodbc/Setup/simba.hiveodbc.ini ~/.simba.hiveodbc.ini
5. 用
vim
打开
~/.simba.hiveodbc.ini
文件;
6. 如果有一行是
DriverManagerEncoding=UTF-32
,将其改为
UTF-16
;
7. 确认
ErrorMessagePath=/driver_install_dir/simba/hiveodbc/ErrorMessages,
如果不对则更改过来;
8. 注释掉
ODBCInstLib=libiodbcint.so
这一行,再加上一行:
ODBCInstLib=libodbcinst.so
;
9. 编辑
<sid>adm
家目录下的
.odbc.ini
文件,加入
hive
的
DSN
,
hive
端口默认为
10000
,如:
[hive1]
Driver=
/
driver_install_dir
/simba/hiveodbc/lib/64/libsimbahiveodbc64.so
Host=
<IP>
Port=
10000
10. 在
$HOME/.customer.sh
下设置以下环境变量:
export LD_LIBRARY_PATH=
$LD_LIBRARY_PATH:
/
driver_install_dir
/simba/hiveodbc/lib/64/
export ODBCINI=$HOME/.odbc.ini
11. 用
isql
检查是否可成功连接到
Hadoop
:
isql –v hive1
12. 如果连接成功,启动
SAP HANA
。
创建
HIVE
数据源
在确认用
isql
能够成功连接
hive
后,用文献
[1]
中介绍的方法在
HANA Studio
中创建远程数据源。注意,使用
SQL
语句创建数据源时用
ADAPTER
关键字指定
HIVEODBC,图形化界面创建时,Adapter Name选择HADOOP(ODBC)。
Hive数据源创建成功后,
查看远程数据源中的表,如下图所示:
查询
Hive
虚表
使用文献
[1]
介绍的方法添加一张虚表
HiveUsers
对应
Hive
中的
users
表,在
SQL Editor
中
count
该虚表,结果如下:
以上结果显示,
count
表
HiveUsers
用了
14.1
秒,和在
Hive
端
count
相差无几。由此可以看出,对于网络数据传输较小的操作,用SDA操作远程数据源和远程数据源本地操作效率相当;同时,以上结果也说明
Hive
的数据查询效率是较低的,它适合批处理任务,而对实时性要求较高的应用不适合使用
Hive
。
总结
本文通过一个简单的数据查询示例讲解了
SDA
如何通过
Hive
访问存储在
Hadoop
中的数据。
Hive
是为
Hadoop
提供
SQL
接口的工具之一,从实验结果可看出,
Hive
的查询效率并不算高,后续文章将介绍
SDA
如何通过其他的
Hadoop
数据查询工具
(
如
Impala)
操作
Hadoop
数据。
想获取更多
SAP HANA
学习资料或有任何疑问,请关注新浪微博
@HANAGeek
!我们欢迎你的加入!
转载本文章请注明作者和出处
http://scn.sap.com/community/chinese/hana/blog/2014/03/17/sap-hana-smart-data-access-%E4%B8%89-%E5%A...
,请勿用于任何商业用途。
参考文献
-
“
SAP HANA Smart Data Access
(一)——初识
SDA
”
-
“
SAP HANA Smart Data Access
(二)——
SDA
数据源驱动的安装与配置”
-
SAP HANA Administrator Guide
6.1.1
章节。