zoukankan      html  css  js  c++  java
  • sqoop使用记录

    sqoop简介

    • Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错。

    • sqoop1的最新版本是1.4.5,sqoop2的最新版本是1.99.3;1.99.3和1.4.5是不兼容的,并且功能尚未开发完成,还不适合在生产环境部署。

    安装

    1. 下载1.4版本sqoop
    2. 解压
    3. 修改配置文件 & 拷贝MySQL驱动包至 /usr/local/sqoop/lib
    sqoop-env.sh
    
    #Set path to where bin/hadoop is available
    export HADOOP_COMMON_HOME=/usr/local/hadoop/hadoop-2.6.5
    
    #Set path to where hadoop-*-core.jar is available
    export HADOOP_MAPRED_HOME=/usr/local/hadoop/hadoop-2.6.5
    
    #set the path to where bin/hbase is available
    export HBASE_HOME=/usr/local/hbase
    
    #Set the path to where bin/hive is available
    export HIVE_HOME=/usr/local/hive/apache-hive-1.2.1-bin
    
    

    数据导入

    1. MySQL ----> HDFS
    • 使用--target-dir指定导入数据目录,默认导入目录:/user/hadoop/table_name/
    sqoop import 
    --connect jdbc:mysql://node-1:3006/info
    --username root 
    --password root 
    --target-dir /user 
    --table user --m 1
    
    
    如果出现如下错误,请更换mysql驱动jar包.实测mysql-connector-5.1.8.jar无效,mysql-connector-java-5.1.41-bin.jar正常
    ERROR manager.SqlManager: Error reading from database: java.sql.SQLException: Streaming result set com.mysql.jdbc.RowDataDynamic@192d43ce is still active. 
    No statements may be issued when any streaming result sets are open and in use on a given connection.
     Ensure that you have called .close() on any active streaming result sets before attempting more queries.
    
    1. MySQL ----> HIVE
    • 先将数据导入到HDFS上的 user_test_hive 目录,然后将此目录下的数据通过 load 命令导入到hive中,然后将对应的数据目录删除
    • 可以使用where语句,对导入的指定的数据进行导入
    ./sqoop import 
    --connect jdbc:mysql://node-1:3006/info 
    --username root 
    --password root 
    --table user_test 
    --where "city = 'bj'" 
    --target-dir /user_test_hive 
    --hive-table user_test 
    --hive-import --m 1
    
    
    --query 'select id,name,age,city from user where id > 1000 and $CONDITIONS '
    
    

    数据导出

    • 将数据从HDFS导出到MySQL中,导出前,目标表必须存在于目标数据库中
    • 默认操作是将文件中的数据使用insert语句插入到表中
    • 更新模式下,是生成update语句更新表

    1.创建MySQL表
    2.执行导出命令

    sqoop export 
    --connect jdbc:mysql://master:3006/testdb 
    --username root 
    --password root 
    --table user_from_hdfs 
    --export-dir /user/hadoop/user 
    --m 1
    

    sqoop作业

    1. 创建作业
    ./sqoop job --create myjob --(空格)import 
    --connect jdbc:mysql://node-1:3006/userdb 
    --username root 
    --password root 
    --table user_test 
    --target-dir /user_test_hfds 
    --m 1
    

    2.验证作业

    • --list此命令会列出已经保存的作业
    • --show jobname 此命令会列出改job的详细信息
    ./sqoop job --list
    ./sqoop job --show myjob
    

    3.执行作业

    ./sqoop job -exec myjob
    

    4.删除作业

    ./sqoop job --delete myjob
    

    5.执行person_job的时候,需要输入数据库的密码,怎么样能不输入密码呢?

    配置sqoop-site.xml
    
    <property>
    <name>sqoop.metastore.client.record.password</name>
    <value>true</value>
    <description>If true, allow saved passwords in the metastore.
    </description>
    </property>
    
  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/7573968.html
Copyright © 2011-2022 走看看