大数据这股旋风越刮越猛烈,HADOOP家族有这股东风做助力更是如虎添翼,传统的软件厂商,比如像ORACLE这类本身就标榜着数据处理专业户的也不甘落后,提供了专门的连接器,用于处理大数据。不仅仅是努力提高自身能力,而且还可以通过配置,读取HADOOP中HDFS保存的数据。今天,咱们尝试两种读取HADOOP中数据的方案。

1、准备工作

要读取HADOOP中的数据,就需要节点能够连接HADOOP。HADOOP环境中的namenode和datanode天生就拥有这个能力,因此网上有不少文章,在配置ORACLE读取HADOOP数据时,都是选择在HADOOP节点中安装ORACLE数据库。我个人觉着这样有些不妥,因为数据节点即承担计算和存储,又提供ORACLE服务,相互之间肯定还是会有影响。最好还是ORACLE服务器提供ORACLE服务,HADOOP集群提供HDFS/M-R能力。

HADOOP家族目前已经发展到很庞大,但我觉着HADOOP的体系还是挺简单,若想让一个节点拥有访问HADOOP的能力其实很简单。安装好JAVA JDK,解压缩hadoop,配置好用户,它就能向hdfs中读写数据,或者提交M-R任务。

因此,我们只需要在某个安装了ORACLE的数据库服务器上,配置hadoop软件就行了。

设定环境如下:

  • Hadoop集群:
    • 节点:192.168.30.203/204/205/206/207
    • 版本:0.20.2
  • Oracle数据库:
    • IP:192.168.30.244
    • 版本:11gR2
    • SID:jssdb

在本例中,我们使用Oracle11gR2版本数据库,安装步骤略,如有不明白的可以参考:三思笔记RHEL5下安装Oracle11gR2(http://www.5ienet.com/note/html/st11g/index.shtml)。假设目前ORACLE数据库软件已经安装好,数据库服务已经启动。如何使其能够连接HADOOP呢,往下看。

创建用户,用户名与HADOOP节点中的用户名相同,这里为grid:

    [root@ora11g ~]# useradd grid

    [root@ora11g ~]# passwd grid

从当前任意hadoop节点复制hadoop目录到oracle服务器(jdk可以同样方式处理):

    [root@hdnode3 ~]# tar cvfz /tmp/hadoop-0.20.2.tar.gz hadoop-0.20.2

    [root@hdnode3 ~]# scp /tmp/hadoop-0.20.2.tar.gz grid@192.168.30.244:/data/software/

以下操作则是在ORACLE节点中执行:

    [root@ora11g ~]# tar xvfz hadoop-0.20.2.tar.gz -C /usr/local/

    [root@ora11g ~]# chown -R grid:grid /usr/local/hadoop-0.20.2

    [root@ora11g ~]# tar xvfz jdk1.7.tar.gz -C /usr/local/

    [root@ora11g ~]# chown -R grid:grid /usr/local/jdk1.7.0_09

复制jdbc链接库文件到hadoop lib目录:

    [root@ora11g ~]# cp /data/ora11g/product/11.2.0/db_1/jdbc/lib/ojdbc6.jar /usr/local/hadoop-0.20.2/lib/

编辑grid用户环境变量,加入与HADOOP相关的环境变量:

    [grid@ora11g ~]$ vi /home/grid/.bash_profile

增加下列内容:

    export JAVA_HOME=/usr/local/jdk1.7.0_09

    export HADOOP_HOME=/usr/local/hadoop-0.20.2

    export HADOOP_CONF_DIR=${HADOOP_HOME}/conf

配置完成之后,可以执行hadoop命令,看看是否能够连接HADOOP集群,读取HDFS中的文件:

    [grid@localhost ~]$ hadoop dfs -ls

    Found 9 items

    drwxrwxrwx   - grid supergroup          0 2013-05-16 13:11 /user/grid/.Trash

    drwxrwxrwx   - grid supergroup          0 2013-04-22 11:43 /user/grid/jss

    drwxr-xr-x   - grid supergroup          0 2013-02-17 20:08 /user/grid/jsscount

    drwxrwxrwx   - grid supergroup          0 2013-03-05 15:39 /user/grid/jssout

    drwxrwxrwx   - grid supergroup          0 2013-05-15 11:59 /user/grid/ld_sql

    drwxr-xr-x   - grid supergroup          0 2013-03-14 17:18 /user/grid/smssend

    drwxr-xr-x   - grid supergroup          0 2013-03-15 10:23 /user/grid/web

    drwxrwxrwx   - grid supergroup          0 2013-03-15 10:36 /user/grid/webout-m

    drwxrwxrwx   - grid supergroup          0 2013-03-15 10:36 /user/grid/webout-s

这样新节点连接HADOOP配置好了,接下来的重心,就是如何通过ORACLE读取HADOOP中的数据了。