用Sqoop2在Mysql和hadoop导入导出数据

时间:2022-06-03 07:49:51

        最近在做用户刷赞排除逻辑的时候,需要结合nginx的access.log日志和Mysql中的部分记录联合查询才能做到,之前的nginx日志一直存放在hadoop中,mysql的数据则没有导入到hadoop中去过,要搞定这事还得将Mysql中的一些表导入到HDFS中去才成。虽说Sqoop的大名早已经闻名遐迩了,但是到底没有在生产环境中试用过,这回倒是一个很好的实践机会。

        线上跑的Hadoop版本为社区版本的hadoop2.2.0,一看Sqoop2最新版本是sqoop-1.99.5-bin-hadoop200.tar.gz,但是它是依赖的hadoop2.6.0这个版本,下载下来后就心里打鼓,担心版本匹配不上,试了一把后果不其然,不行,遂下载Sqoop2的1.99.5源代码下来把依赖修改为Hadoop2.2.0,编译倒是能过,但是最终运行的时候还是在报sqlite相关的错误,一时没有解决不掉,就考虑用老的版本来试一试了,sqoop-1.99.3-bin-hadoop100.tar.gz这个版本我是试用过的,但是该版本功能过于简单了,而1.99.4这个版本的功能刚刚好满足我的要求了,就下载sqoop-1.99.4-bin-hadoop200.tar.gz 这个来试一试。

      (1)安装环境

         操作系统:Linux(centos6.5)

         JDK版本:1.7.0_45

         Hadoop版本:hadoop2.2.0

         Sqoop2版本:sqoop-1.99.4-bin-hadoop200

         hadoop安装目录:/home/hadoop/hadoop-2.2.0

         Sqoop2安装目录:/home/hadoop/sqoop-1.99.4-bin-hadoop200

         Hadoop和Sqoop都是同一个用户hadoop下面,hadoop用户的的家目录:/home/hadoop


       (2)修改Sqoop2的配置文件

          1、首先修改配置文件/home/hadoop/sqoop-1.99.4-bin-hadoop200/server/conf/sqoop.properties指定hadoop的配置文件所属路径。

          将原来的如下配置:

# Hadoop configuration directory
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/etc/hadoop/conf/
             修改为:

# Hadoop configuration directory
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/home/hadoop/hadoop-2.2.0/etc/hadoop/

               2、修改配置文件/home/hadoop/sqoop-1.99.4-bin-hadoop200/server/conf/catalina.properties。

              这里即时把/home/hadoop/hadoop-2.2.0/share/hadoop下全部的*.jar包加入到sqoop2的类路径中去。

          将原来的如下配置:

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/../lib/*.jar,/usr/lib/hadoop/*.jar,/usr/lib/hadoop/lib/*.jar,/usr/lib/hadoop-hdfs/*.jar,/usr/lib/hadoop-hdfs/lib/*.jar,/usr/lib/hadoop-mapreduce/*.jar,/usr/lib/hadoop-mapreduce/lib/*.jar,/usr/lib/hadoop-yarn/*.jar,/usr/lib/hadoop-yarn/lib/*.jar

             修改为:

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/../lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/common/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/common/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/hdfs/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/hdfs/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/mapreduce/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/mapreduce/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/tools/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/tools/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/yarn/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/yarn/lib/*.jar,/home/hadoop/hadoop-2.2.0/share/hadoop/httpfs/tomcat/lib/*.jar

       (3)修改环境变量

由于sqoop2和Hadoop的用户都为hadoop,并且hadoop用户的home目录为:/home/hadoop,所以直接修改/home/hadoop/.bash_profile在文件末尾追加如下内容即可:   

export SQOOP_HOME=/home/hadoop/sqoop-1.99.4-bin-hadoop200  
export PATH=$SQOOP_HOME/bin:$PATH
export CATALINA_HOME=$SQOOP_HOME/server
export LOGDIR=$SQOOP_HOME/logs

  当然完成上述修改后需要在hadoop用户下执行命令来让配置即可生效:

source  /home/hadoop/.bash_profile

       (4)小试sqoop2

     至此可以来试一试sqoop2可用不可用,进入目录/home/hadoop/sqoop-1.99.4-bin-hadoop200/bin下执行下述命令体验下。

     启动sqoop2的服务:./sqoop2-server start

    进入Client的shell环境:./sqoop2-shell

    Client连接到服务端:set server --host 127.0.0.1 --port 12000 --webapp sqoop

         

        其它建立link、job可以参考:

       http://sqoop.apache.org/docs/1.99.5/CommandLineClient.html


           SQOOP2不知道何故,我死活找不到从mysql导出数据到HDFS的时候,怎么去指定字段的分隔符号,求助百度、谷歌、官网都没有用!悲剧了,所以我不得不另谋出路,虽说此时此刻可以去看看Sqoop2的源代码,看看是否有地方设置分隔符号,但是最快速的办法莫过于试用另外的版本,比如1.4.5,肯定是可以的,否则SQOOP也不能这么有名了。

          且看我试用Sqoop1.4.5的经历,期间也不是一帆风顺的!