sqoop1.4.4从oracle导数据到hive中

系统 2033 0

sqoop从oracle定时增量导入数据到hive

感谢:

http://blog.sina.com.cn/s/blog_3fe961ae01019a4l.html
http://f.dataguru.cn/thread-94073-1-1.html sqoop.metastore.client.record.password
http://blog.csdn.net/ryantotti/article/details/14226635 开启sqoop metastore

step 1 创建sqoop job
a.配置sqoop metastore服务
修改sqoop/conf/sqoop-site.xml文件

相关属性:

sqoop.metastore.server.location
sqoop.metastore.server.port
sqoop.metastore.client.autoconnect.url

上面三个参数是为了实现共享(shared)metastore,"By default, job descriptions are saved to a private repository stored in  $HOME/.sqoop/ . You can configure Sqoop to instead use a shared  metastore , which makes saved jobs available to multiple users across a shared cluster. Starting the metastore is covered by the section on the  sqoop-metastore tool."这样在其他的cluster上就可以共享job并执行。

如果不需要共享job,只需要把上面三个属性在配置文件中用<!-- -->注释掉即可。

sqoop.metastore.client.enable.autoconnect
sqoop.metastore.client.record.password 这个属性是为了保存数据库密码的,默认情况下处于安全需要,不会将密码保存到metastore中,这样每次执行job时就需要重新输入数据库的密码。为了定时执行,我们修改这个属性,是他可以保存密码。

修改如下:

      
        <
      
      
        property
      
      
        >
      
      
        <
      
      
        name
      
      
        >
      
      sqoop.metastore.server.location
      
        </
      
      
        name
      
      
        >
      
      
        <
      
      
        value
      
      
        >
      
      /tmp/sqoop-metastore/shared.db
      
        </
      
      
        value
      
      
        >
      
      
        </
      
      
        property
      
      
        >
      
      
        <
      
      
        property
      
      
        >
      
      
        <
      
      
        name
      
      
        >
      
      sqoop.metastore.server.port
      
        </
      
      
        name
      
      
        >
      
      
        <
      
      
        value
      
      
        >
      
      16000
      
        </
      
      
        value
      
      
        >
      
      
        </
      
      
        property
      
      
        >
      
      
        <
      
      
        property
      
      
        >
      
      
        <
      
      
        name
      
      
        >
      
      sqoop.metastore.client.autoconnect.url
      
        </
      
      
        name
      
      
        >
      
      
        <
      
      
        value
      
      
        >
      
      jdbc:hsqldb:hsql://118.228.197.115:16000/sqoop
      
        </
      
      
        value
      
      
        >
      
      
        </
      
      
        property
      
      
        >
      
      
        <
      
      
        property
      
      
        >
      
      
        <
      
      
        name
      
      
        >
      
      sqoop.metastore.client.record.password
      
        </
      
      
        name
      
      
        >
      
      
        <
      
      
        value
      
      
        >
      
      true
      
        </
      
      
        value
      
      
        >
      
      
        </
      
      
        property
      
      
        >
      
      
        <!--
      
      
        注释掉这个属性

<property>

  <name>sqoop.metastore.client.enable.autoconnect</name>

  <value>false</value>

</property>


      
      
        -->
      
    

b.启动metasotre,控制台执行sqoop metastore命令 (如果没有配置前三个属性,请跳过此步骤 )
c.创建sqoop job

(为了方便执行,将下面的脚本写入到文件保存,然后用chmod u+x FILENAME修改权限后,通过 ./FILENAME执行文件,创建job)

      sqoop job --meta-connect jdbc:hsqldb:hsql:
      
        //
      
      
        hostIP:16000/sqoop --create JOBNAME -- import --hive-import --incremental append --connect jdbc:oracle:thin:@DatabaseIP:1521/INSTANCENAME --username USERNAME --password PASSWD --verbose -m 1 --bindir /opt/sqoop/lib --table TABLENAME --check-column COLUMNNAME --last-value VALUE
      
    


注意:

1) 如果前面没有配置共享metastore(即”sqoop.metastore.server.location" 、”sqoop.metastore.server.port“、”sqoop.metastore.client.autoconnect.url“三个属性在配置文件中已经注释了),那就需要将上面的脚本中 ”--meta-connect jdbc:hsqldb:hsql://hostIP:16000/sqoop“ 去掉。

2) "--create JOBNAME -- import"中”--“后面加一个空格再写import命令,否则执行出错
3) --check-column列不能是char varchar等,可以是date,int,
参考官网: http://sqoop.apache.org/docs/1.4.4/SqoopUserGuide.html  在官网页面查找 check-column字段,快速定位到相关解释

 

step 2 执行sqoop job看是否可以顺利进行

      <!--查看job列表,看是否成功创建-->
      
        

sqoop job 
      
      --
      
        list


      
      <!--执行job,测试能否正常执行,此处如果导入的数据量大,会很耗费时间-->
      
        

sqoop job 
      
      --
      
        exec JOBNAME
        


step 3 确定sqoop job可以正常执行后,编写脚本定时执行

将下面的脚本写入一个文本文件,如 execJob,然后执行 chmod u+x execJob 命令添加可执行权限

      source /etc/
      
        profile


      
      
        rm
      
       TABLENAME.java -
      
        f

sqoop job 
      
      -exec JOBNAME
    

 

step 4 用crontab工具实现定时执行

 

执行crontab -e 命令,添加如下一行脚本,保存退出即可

      
        # 每天1点钟执行数据导入job


      
      
        0
      
      
        1
      
       * * * execJob 1>/root/execlogs 2>&1
    

注意:execJob就是step3创建的脚本文件,需要用具体的路径,如/root/execJob。“1>/root/execlogs 2>&1”这句是重定向stdout和stderr输出对象到指定文件,可以在文件中查看执行输出的信息。

crontab命令工具用法参考:

http://www.cnblogs.com/jiafan/articles/1153066.html

http://baike.baidu.com/view/1229061.htm

    
      
         
      
    
  

sqoop1.4.4从oracle导数据到hive中


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论