首页 > SAP > HANA > SAP Sybase IQ15.4 connect to Apache Hadoop
2019
08-27

SAP Sybase IQ15.4 connect to Apache Hadoop

展颜小盆友离开我已经一个礼拜了,今天晚上就要回来了。在这漫长的、无聊的等待中,研究了一下SAP Sybase
IQ15.4如何连接Apache Hadoop的问题。

1.SAP
Sybase IQ15.x对大数据的支持

Hadoop在大数据领域很火。它是Apache的一个开源项目,主要由MepReduce
framework与分布式文件系统(HDFS)组成。利用Hadoop提供的MepReduce
Framework以及HDFS,使用廉价的硬件堆积起来就可以处理海量的非结构化数据。但Hadoop与传统的RDBMS相比,Hadoop更适合批量处理非结构化数据,而在事务处理方面存在短板。因此Hadoop是传统RDBMS的一个补充,并不会取代传统RDBMS。

SAP Sybase
IQ15.x以来加入了许多对大数据的支持,例如IQ15.0支持VLDB分区;IQ15.1新增了数据库内分析(In-Database
Analytics);IQ15.2增加了Text index,可以对非结构化数据进行分词,进行高效检索;IQ15.3支持PlexQ
MPP架构,一个查询负载可以分担到多个IQ节点上去。到了Sybase
IQ15.4,IQ则可以对接Hadoop,并且支持native的MapReduce API。IQ
15.4对接Hadoop的方法有如下几种:

Client Side Federation:使用客户端工具,例如Quest Toad
for Cloud,可以同时查询Sybase IQ15.4和Hadoop,并且两者数据可以做关联查询
Load Hadoop Data into Sybase IQ column store:
Apache的ETL工具SQOOP已经得到Sybase认证,使用它可以将Hadoop中的数据加载到Sybase IQ中
Join HDFS data with Sybase IQ data on the
fly
:使用Sybase IQ15.4的新功能Table
UDF,可以获取HDFS中的数据,并且可以像其普通数据表一样进行SQL查询,这些数据可以与IQ中的其他数据作Join
Combine results of Hadoop MR jobs with Sybase IQ data
on the fly
:使用Sybase IQ15.4的新功能Table UDF触发Hadoop的MapReduce
Job,并且获取其结果集,这些结果集可以与IQ中的数据作Join。

本例使用上述的第三种方法做测试。

2.Hadoop的安装

Hadoop安装方式有单节点模式、Pseudo-Distributed Operation、Cluster
Setup。本次安装使用Cluster Setup。Hadoop由若干节点组成,其中一个NameNode(Master),
若干DataNode(Slave)。在这些节点上会执行MapReduce
Jobs,Jobs包括一个JobTracker和若干TaskTracker,Jobs的协调分配是由JobTracker来完成的。本次测试用两台Linux主机:

10.129.97.110,shx64a,
作为NameNode,DataNode,以及跑JobTracker,TaskTracker,既做Master又做Slave
10.129.97.109, shx64b, 作为DataNode,
以及跑TaskTracker,作为Slave
安装过程很简单:

两台机器上分别增加hadoop用户
从Apache网站上获取最新的Hadoop版本,使用hadoop用户分别在两台主机上安装,安装目录保持一致

Hadoop在发起Job的时候,会使用ssh调用其它节点的java进程。因此需要配置ssh,使得master在不使用密码的情况下远程调用各个slave节点的命令。Master节点使用hadoop账号:

ssh-keygen -t dsa -P ” -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >>
~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
copy
id_dsa.pub文件到各个slave节点的hadoop账号的~/.ssh/下,重命名为master.pub,在各个slave节点使用hadoop账号:

cat ~/.ssh/master.pub >>
~/.ssh/authorized_keys
chmod go-w $HOME $HOME/.ssh
chmod 600 $HOME/.ssh/authorized_keys
chown whoami $HOME/.ssh/authorized_keys

测试在master节点上使用ssh执行远程slave节点的命令,确保能够成功

修改master节点的hadoop配置文件,内容如下:
[hadoop@shx64a hadoop-1.0.2]$ cat conf/core-site.xml
<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl”
href=”configuration.xsl”?>

<!– Put site-specific property overrides in this
file. –>

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://shx64a:9000</value>

</property>

</configuration>

[hadoop@shx64a hadoop-1.0.2]$ cat conf/hdfs-site.xml

<?xml version=”1.0″?>

<?xml-stylesheet type=”text/xsl”
href=”configuration.xsl”?>

<!– Put site-specific property overrides in this
file. –>

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

[hadoop@shx64a hadoop-1.0.2]$ cat conf/mapred-site.xml

<?xml version=”1.0″?>

<?xml-stylesheet type=”text/xsl”
href=”configuration.xsl”?>

<!– Put site-specific property overrides in this
file. –>

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>shx64a:9001</value>

</property>

</configuration>

修改conf/master和conf/slaves文件如下:

[hadoop@shx64a conf]$ cat masters

shx64a

[hadoop@shx64a conf]$ cat slaves
shx64b

shx64a

将上述修改复制到所有Slave节点
scp -r ./conf 10.129.97.109:/home/hadoop/hadoop-1.0.2/
启动Hadoop

bin/hadoop namenode -format

bin/start-dfs.sh

bin/start-mapred.sh

一切顺利的话,将成功启动Hadoop。

状态检查
使用
<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124524-15.jpg" alt="SAPSybaseIQ15.4connecttoApacheHadoop” />

有两个TaskTrackers节点:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124524-91.jpg" alt="SAPSybaseIQ15.4connecttoApacheHadoop” />

HDFS中的目录内容:

<img src="/oldimg/50/https://www.ut163.com/wp-content/uploads/2019/08/20190827124524-32.jpg" alt="SAPSybaseIQ15.4connecttoApacheHadoop” />

使用自带的2个MapReduce例子作测试:
bin/hadoop fs -put conf input
bin/hadoop jar hadoop-examples-*.jar grep input output
‘dfs[a-z.]+’
bin/hadoop fs -cat output/*
1
dfs.replication
1
dfs.server.namenode.
1
dfsadmin

bin/hadoop fs -put test.txt input/test.txt

bin/hadoop jar hadoop-examples-1.0.2.jar wordcount input/test.txt
output2

bin/hadoop fs -cat output2/*

输出省略。
两个MapReduce例子都比较简单,源码见Hadoop示例。
下面的目标是能够从SybaseIQ中读取第一个MapReduce例子的输出结果。

3.在SAP Sybase
IQ15.x中访问Hadoop中的数据


在SybaseIQ15.4中如此操作:

START EXTERNAL ENVIRONMENT JAVA;


INSTALL JAVA NEW JAR ‘commons-configuration-1.6’ FROM FILE
‘/home/hadoop/hadoop-1.0.2/lib/commons-configuration-1.6.jar’;


INSTALL JAVA NEW JAR ‘commons-lang-2.4’ FROM FILE
‘/home/hadoop/hadoop-1.0.2/lib/commons-lang-2.4.jar’;


INSTALL JAVA NEW JAR ‘commons-logging-1.1.1’ FROM FILE
‘/home/hadoop/hadoop-1.0.2/lib/commons-logging-1.1.1.jar’;


INSTALL JAVA NEW JAR ‘hadoop-core-1.0.2’ FROM FILE
‘/home/hadoop/hadoop-1.0.2/hadoop-core-1.0.2.jar’;


INSTALL JAVA NEW JAR ‘udf’ FROM FILE
‘/home/hadoop/hadoop-1.0.2/lib/udf.jar’;

CREATE or REPLACE PROCEDURE hadoop()RESULT ( c1
INTEGER , c2 VARCHAR(255) ) EXTERNAL NAME
‘example.RowGenerator.rowGenerator2([Ljava/sql/ResultSet;)V’LANGUAGE
JAVA;

上述除了udf.jar以外都是hadoop自带的jar包,需要导入到IQ的运行环境中。udf.jar是访问Hadoop
HDFS的java程序编译后的class文件.源代码参见:

https://skydrive.live.com/redir.aspx?cid=cec8f5c16b84b612&resid=CEC8F5C16B84B612!151&parid=CEC8F5C16B84B612!141

上述代码中访问HDFS部分借鉴了网络上共享的某些代码。
在IQ中访问Hadoop中的数据,需要使用IQ15.4的一个New Feature——Table UDF。上面的

CREATE or REPLACE PROCEDURE hadoop()RESULT ( c1 INTEGER , c2
VARCHAR(255) ) EXTERNAL NAME
‘example.RowGenerator.rowGenerator2([Ljava/sql/ResultSet;)V’LANGUAGE
JAVA;


使用Java语言创建了一个Table
UDF,访问Hadoop数据的过程封装在外部example.RowGenerator.rowGenerator2中。

如此以来,我们就可以在SybaseIQ中访问Hadoop中的数据了:
(DBA)> select * from hadoop() where
c2=’dfsadmin’
c1
c2

———————————————————————————————-

1dfsadmin

(1 rows)

Execution
time: 0.082 seconds

4
结语

SybaseIQ15.4到Hadoop,虽然走通了,但该方法适用于访问Hadoop中较小数据量的场景。如果要访问的HDFS中的数据量较大时,采用该方法未必效率最高。可以使用第一节介绍的四种方法中的第二种,使用ETL工具将Hadoop的MapReduce的结果数据加载到IQ中,这样既可以利用Hadoop海量非结构化处理的优势,也利用了SybaseIQ15.4列数数库的加载速度快、压缩比高、OLAP分析速度快的优势。

最后编辑:
作者:yangsen
有需要可在文章留言或者邮件yan252@163.com给我。

留下一个回复

你的email不会被公开。

five × three =