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>
    
  • 相关阅读:
    execvp
    Linux系统调用getrlimit()与setrlimit()函数详解
    Va_start及Vsprintf应用
    waitpid()
    sdut 2408 Pick apples 夜
    poj 1273 Drainage Ditches 夜
    poj 1408 Fishnet 夜
    poj 1113 Wall 夜
    poj 1584 A Round Peg in a Ground Hole 夜
    poj 3007 Organize Your Train part II 夜
  • 原文地址:https://www.cnblogs.com/0xcafedaddy/p/7573968.html
Copyright © 2011-2022 走看看