• Sqoop的安装和使用


    一、概述

    sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。

    核心的功能有两个:

    导入、迁入

    导出、迁出

    导入数据:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统

    导出数据:从 Hadoop 的文件系统中导出数据到关系数据库 mysql 等 Sqoop 的本质还是一个命令行工具,和 HDFS,Hive 相比,并没有什么高深的理论。

    sqoop:

    工具:本质就是迁移数据, 迁移的方式:就是把sqoop的迁移命令转换成MR程序

    hive

    工具,本质就是执行计算,依赖于HDFS存储数据,把SQL转换成MR程序

    二、工作机制

    将导入或导出命令翻译成 MapReduce 程序来实现 在翻译出的 MapReduce 中主要是对 InputFormat 和 OutputFormat 进行定制

    三、安装

    1、前提概述

    将来sqoop在使用的时候有可能会跟那些系统或者组件打交道?

    HDFS, MapReduce, YARN, ZooKeeper, Hive, HBase, MySQL

    下载地址http://mirrors.hust.edu.cn/apache/sqoop

    (1)上传解压缩安装包到指定目录

    [hadoop@hadoop3 ~]$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C apps/

    (2)进入到 conf 文件夹,找到 sqoop-env-template.sh,修改其名称为 sqoop-env.sh cd conf

    复制代码
    [hadoop@hadoop3 ~]$ cd apps/
    [hadoop@hadoop3 apps]$ ls
    apache-hive-2.3.3-bin  hadoop-2.7.5  hbase-1.2.6  sqoop-1.4.6.bin__hadoop-2.0.4-alpha  zookeeper-3.4.10
    [hadoop@hadoop3 apps]$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop-1.4.6
    [hadoop@hadoop3 apps]$ cd sqoop-1.4.6/conf/
    [hadoop@hadoop3 conf]$ ls
    oraoop-site-template.xml  sqoop-env-template.sh    sqoop-site.xml
    sqoop-env-template.cmd    sqoop-site-template.xml
    [hadoop@hadoop3 conf]$ mv sqoop-env-template.sh sqoop-env.sh

    (3)修改 sqoop-env.sh

    [hadoop@hadoop3 conf]$ vi sqoop-env.sh

    (4)加入 mysql 驱动包到 sqoop1.4.6/lib 目录下

    [hadoop@hadoop3 ~]$ cp mysql-connector-java-5.1.40-bin.jar apps/sqoop-1.4.6/lib/

    5)配置系统环境变量

    [hadoop@hadoop3 ~]$ vi .bashrc 
    #Sqoop
    export SQOOP_HOME=/home/hadoop/apps/sqoop-1.4.6
    export PATH=$PATH:$SQOOP_HOME/bin
    [hadoop@hadoop3 ~]$ source .bashrc 

    (6)验证安装是否成功

     sqoop version

    (7)mysql连接权限配置修改

    当前mysql只允许localhost连接。

    需要在localhost的那台机器上登入mysql后,将 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改为"%"

    mysql>use mysql;

    mysql>update user set host = '%' where user = 'root';

    mysql>select host, user from user;

    mysql>flush privileges;

    四、Sqoop的基本命令

    基本操作

    列出MySQL数据有哪些数据库

    [hadoop@hadoop3 ~]$ sqoop list-databases 
    > --connect jdbc:mysql://hadoop1:3306/ 
    > --username root 
    > --password root

    列出MySQL中的某个数据库有哪些数据表:

    
    

    [hadoop@hadoop3 ~]$ sqoop list-tables
    --connect jdbc:mysql://hadoop1:3306/mysql
    --username root
    --password root

    根据MYSQL表创建HIVE前需先配置以下环境变量

    sqoop create-hive-table 
    --connect jdbc:mysql://hadoop1:3306/mysql 
    --username root 
    --password root 
    --table help_keyword 
    --hive-table hk

    五、Sqoop的数据导入

    “导入工具”导入单个表从 RDBMS 到 HDFS。表中的每一行被视为 HDFS 的记录。所有记录 都存储为文本文件的文本数据(或者 Avro、sequence 文件等二进制数据) 

    RDBMS的表必须有主键才可以导入,否则会报错

    1、从RDBMS导入到HDFS中

    语法格式

    sqoop import (generic-args) (import-args)
     

     

     使用sqoop从mysql导入数据到hive常见坑 及其解决方法

    导入: 指定分隔符和导入路径

    复制代码
    sqoop import   
    --connect jdbc:mysql://hadoop1:3306/mysql   
    --username root  
    --password root   
    --table help_keyword   
    --target-dir /user/hadoop11/my_help_keyword1  
    --fields-terminated-by '	'  
    -m 2
    复制代码

    导入数据:带where条件

    复制代码
    sqoop import   
    --connect jdbc:mysql://hadoop1:3306/mysql   
    --username root  
    --password root   
    --where "name='STRING' " 
    --table help_keyword   
    --target-dir /sqoop/hadoop11/myoutport1  
    -m 1
    复制代码

    查询指定列

    复制代码
    sqoop import   
    --connect jdbc:mysql://hadoop1:3306/mysql   
    --username root  
    --password root   
    --columns "name" 
    --where "name='STRING' " 
    --table help_keyword  
    --target-dir /sqoop/hadoop11/myoutport22  
    -m 1
    selct name from help_keyword where name = "string"
    复制代码

    导入:指定自定义查询SQL

    复制代码
    sqoop import   
    --connect jdbc:mysql://hadoop1:3306/  
    --username root  
    --password root   
    --target-dir /user/hadoop/myimport33_1  
    --query 'select help_keyword_id,name from mysql.help_keyword where $CONDITIONS and name = "STRING"' 
    --split-by  help_keyword_id 
    --fields-terminated-by '	'  
    -m 4
    复制代码

    在以上需要按照自定义SQL语句导出数据到HDFS的情况下:
    1、引号问题,要么外层使用单引号,内层使用双引号,$CONDITIONS的$符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS的$符号需要转义
    2、自定义的SQL语句中必须带有WHERE $CONDITIONS

    指定行分隔符和列分隔符,指定hive-import,指定覆盖导入,指定自动创建hive表,指定表名,指定删除中间结果数据目录

    复制代码
    sqoop import  
    --connect jdbc:mysql://hadoop1:3306/mysql  
    --username root  
    --password root  
    --table help_keyword  
    --fields-terminated-by "	"  
    --lines-terminated-by "
    "  
    --hive-import  
    --hive-overwrite  
    --create-hive-table  
    --delete-target-dir 
    --hive-database  mydb_test 
    --hive-table new_help_keyword
    复制代码

    增量导入

    执行增量导入之前,先清空hive数据库中的help_keyword表中的数据

    truncate table help_keyword;
    复制代码
    sqoop import   
    --connect jdbc:mysql://hadoop1:3306/mysql   
    --username root  
    --password root   
    --table help_keyword  
    --target-dir /user/hadoop/myimport_add  
    --incremental  append  
    --check-column  help_keyword_id 
    --last-value 500  
    -m 1
    复制代码















































     
  • 相关阅读:
    javascsript 去除数组重复数据
    javascript监听事件兼容
    javascript紧接上一张for循环的问题,我自己的理解
    javascript解决for循环中i取值的问题(转载)
    javascript 模仿 html5 placeholder
    javascript构造函数+原形继承+作用域扩充
    css画下图
    jquery商城类封装插件
    JEECG01-开发入门环境搭建成功
    Perl学习笔记(九)--文件(四)
  • 原文地址:https://www.cnblogs.com/dll102/p/12147229.html
Copyright © 2020-2023  润新知