hadoop2.5.2通过sqoop将数据从HDFS导入导出到oracle数据库——sqoop的安装和配置


  要想通过sqoop将数据同hadoop2.5.2的HDFS上导入导出到oracle数据库中,需要明白的是有两件事:1、sqoop可以跟oracle相互之间可以连接connection的通。2、sqoop跟hadoop之间可以相互访问。其中最重要的就是第一件事情。下面我们主要讲讲第一件事情怎么实现:

第一件事情的实现:

   它的实现主要是在linux上安装oracle的客户端,能够实现远程访问服务器的oracle数据库即可。这一块的内容主要可以参考:http://www.cnblogs.com/ljy2013/articles/4386530.html 这篇文章。

第二件事情跟hadoop之间的交互,由于sqoop是hadoop的一个组件,因此它们之间只需要配置一下即可。下面主要记载一下sqoop的安装配置问题:

  sqoop采用的是sqoop1,其版本是1.4.5.首先从官网上下载sqoop:sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar

  sqoop2系列是:sqoop-1.99.X-bin-hadoop200.tar系列。这里sqoop1和sqoop2之间的区别有待进一步查询。

安装配置sqoop1的步骤:

  (1)解压缩sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar文件

      mv  sqoop-1.4.5.bin__hadoop-2.0.4-alpha   sqoop-1.4.5

  (2)添加环境变量 vi  .bash_profile     (由于我的用grid用户来操作hadoop的,因此将sqoop的环境变量配置到用户的.bash_profile的环境变量文件当中)

      export SQOOP_HOME=$HOME/sqoop-1.4.5

      export LOGDIR=$SQOOP_HOME/logs

      export PATH=$PATH:$SQOOP_HOME/bin

  (3)配置文件

      进入到sqoop的解压缩目录/home/grid/sqoop-1.4.5/下:进入conf目录下,执行:

        cp sqoop-env-template.sh sqoop-env.sh
        cp sqoop-site-template.xml sqoop-site.xml

    vi sqoop-env.sh,在sqoop-env.sh中添加如下代码:

#Set path to where bin/hadoop is available  
export HADOOP_COMMON_HOME=/home/grid/hadoop-2.5.2   //这里是hadoop的安装主目录  
#Set path to where hadoop-*-core.jar is available  
export HADOOP_MAPRED_HOME=/home/grid/hadoop-2.5.2   //这里是hadoop的安装主目录 

#set the path to where bin/hbase is available //下面三项由于暂时没有涉及,因此暂时不配置

#export HBASE_HOME=
#Set the path to where bin/hive is available 

#export HIVE_HOME=
#Set the path for where zookeper config dir is
#export ZOOCFGDIR=

   (4)复制相应的jar包

     1) 将/home/grid/hadoop-2.5.2/share/hadoop 文件夹下以及子目录下所有各部分中的jar包都复制到/home/grid/sqoop-1.4.5/lib/下。主要包括:

        /home/grid/hadoop-2.5.2/share/hadoop/common/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/common/lib/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/hdfs/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/hdfs/lib/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/httpfs/tomcat/lib/*.jar, 

        /home/grid/hadoop-2.5.2/share/hadoop/mapreduce/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/mapreduce/lib/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/tools/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/tools/lib/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/yarn/*.jar,

        /home/grid/hadoop-2.5.2/share/hadoop/yarn/lib/*.jar.

     将这些jar包都复制到/home/grid/sqoop-1.4.5/lib/下。    

    2)将sqoop-1.4.5.jar和oracle驱动包ojdbc6.jar,该包在oracle的安装目录下D:\app\liujiyu\product\11.2.0\dbhome_1\jdbc\lib\目录下。

  (5)此时,安装配置工作已经完毕,下面就是测试是否能连上oracle数据库:

    1)测试是否能远程连接oracle数据库,执行下面的代码:

        sqoop list-databases --connect jdbc:oracle:thin:@//192.168.27.235:1521/ORCL --username DATACENTER -P      (oracle)

        sqoop list-databases  --connect jdbc:mysql://192.168.27.236:3306 --username liujiyu -P                  (mariadb)

        sqoop list-databases  --connect jdbc:mysql://192.168.19.88:3306 --username clear -P                      (mysql)

    2)将oracle数据库导入到hdfs中

    注意:默认情况下会使用4个map任务,每个任务都会将其所导入的数据写到一个单独的文件中,4个文件位于同一目录,本例中 -m 1表示只使用一个map任务。

      文本文件不能保存为二进制字段,并且不能区分null值和字符串值"null"。  

      执行下面的命令后会生成一个ENTERPRISE.java文件,可以通过ls ENTERPRISE.java查看,代码生成是sqoop导入过程的必要部分,

      sqoop在将源数据库中的数据写到HDFS前,首先会用生成的代码将其进行反序列化 

    sqoop import --connect jdbc:oracle:thin:@//192.168.27.235:1521/ORCL --username scott --password liujiyu  --table EMP  -m 1 --target-dir /user/sqoop/test 

           

 

    若出现上图的信息,则表明执行成功。通过查看内容来验证:

    hadoop fs -cat  /user/sqoop/test/part-m-00000

 

    3)将HDFS中的数据导入到oracle,上面是将oracle的表导入到hdfs中,下面就可以将刚刚导入到hdfs中的表反向导入到oracle的一个新的空表中。首先必须要在oracle中创建一个空表empty。下面将hdfs中的表导入到oracle中的empty表中。

    sqoop export --connect jdbc:oracle:thin:@//192.168.27.235:1521/ORCL --username scott --password liujiyu --table empty --export-dir '/liujiyu/nihao/part-m-00000' --fields-terminated-by ':' -m  1

    执行的结果跟上面类似。

 

 

      

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM