MHuiG

「看庭前花开花落,望天上云卷云舒」

安装部署

# 大数据处理技术 - sqoop 实战及原理

## 下载并解压

安装 sqoop 的前提是已经具备 java 和 hadoop 的环境

下载地址
http://archive.cloudera.com/cdh5/cdh/5/
sqoop1 版本详细下载地址
http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.14.0.tar.gz
sqoop2 版本详细下载地址
http://archive.cloudera.com/cdh5/cdh/5/sqoop2-1.99.5-cdh5.14.0.tar.gz

我们这里使用 sqoop1 的版本，下载之后上传到 /export/softwares 目录下，然后进行解压

    cd /export/softwares
    tar -zxvf sqoop-1.4.6-cdh5.14.0.tar.gz -C ../servers/

## 修改配置文件

    cd /export/servers/sqoop-1.4.6-cdh5.14.0/conf/
    cp sqoop-env-template.sh sqoop-env.sh
    vim sqoop-env.sh

sqoop-env.sh

    export HADOOP_COMMON_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
    export HADOOP_MAPRED_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
    export HIVE_HOME=/export/servers/hive-1.1.0-cdh5.14.0

## 加入额外的依赖包

sqoop 的使用需要添加两个额外的依赖包，一个是 mysql 的驱动包，一个是 java-json 的的依
赖包，不然就会报错

mysql-connector-java-5.1.40.jar
java-json.jar

## 验证启动

    cd /export/servers/sqoop-1.4.6-cdh5.14.0
    bin/sqoop-version

## Sqoop 的数据导入

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

列举出所有的数据库

命令行查看帮助

    bin/sqoop list-databases --help

列出 win10 主机所有的数据库:
开启本地数据库远程连接权限:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
    flush privileges;

    bin/sqoop list-databases --connect jdbc:mysql://192.168.52.120:3306/ --username root --password 123456

    bin/sqoop list-databases --connect jdbc:mysql://10.6.67.200:3306/ --username root --password 123

查看某一个数据库下面的所有数据表

    bin/sqoop list-tables --connect jdbc:mysql://10.6.67.200:3306/test00 --username root --password 123

## 导入数据库表数据到 HDFS

下面的命令用于从 MySQL 数据库服务器中的 emp 表导入 HDFS。

    bin/sqoop import --connect jdbc:mysql://10.6.67.200:3306/test00 --password 123 --username root --table emp --m 1

为了验证在 HDFS 导入的数据，请使用以下命令查看导入的数据

    hdfs dfs -ls /user/root/emp

## 导入到 HDFS 指定目录

在导入表数据到 HDFS 使用 Sqoop 导入工具，我们可以指定目标目录。
使用参数 –target-dir 来指定导出目的地，
使用参数 —delete-target-dir 来判断导出目录是否存在，如果存在就删掉

    bin/sqoop import --connect jdbc:mysql://10.6.67.200/test00 --username root --password 123 --delete-target-dir --table emp --target-dir /sqoop/emp --m 1

查看导出的数据

    hdfs dfs -text /sqoop/emp/part-m-00000

它会用逗号（，）分隔 emp_add 表的数据和字段。

## 导入到 hdfs 指定目录并指定字段之间的分隔符

    bin/sqoop import --connect jdbc:mysql://10.6.67.200:3306/test00 --username root --password 123 --delete-target-dir --table emp --target-dir /sqoop/emp3 --m 1 --fields-terminated-by '\t'

查看文件内容

    hdfs dfs -text /sqoop/emp3/part-m-00000

## Sqoop 的数据导出

将数据从 HDFS 把文件导出到 RDBMS 数据库
导出前，目标表必须存在于目标数据库中。

- 默认操作是从将文件中的数据使用 INSERT 语句插入到表中
- 更新模式下，是生成 UPDATE 语句更新表数据

## hdfs 导出到 mysql

数据是在 HDFS 当中的如下目录 /sqoop/emp，数据内容如下

第一步：创建 mysql 表

    CREATE TABLE emp_out(
      EMPNO int PRIMARY KEY, #员工编号
      ENAME VARCHAR(10), #员工姓名
      JOB VARCHAR(9), #员工工作
      MGR int, #员工直属领导编号
      HIREDATE DATE, #入职时间
      SAL double, #工资
      COMM double, #奖金
      DEPTNO int #对应 dept 表的外键
    );

第二步：执行导出命令

通过 export 来实现数据的导出，将 hdfs 的数据导出到 mysql 当中去

    bin/sqoop export \
    --connect jdbc:mysql://10.6.67.200:3306/test00 \
    --username root --password 123 \
    --table emp_out \
    --export-dir /sqoop/emp \
    --input-fields-terminated-by ","

第三步：验证 mysql 表数据

大数据处理技术-sqoop 数据迁移 概述

Overview 大数据处理技术 - sqoop 数据迁移 概述 sqoop 是 apache 旗下一款 Hadoop 和关系数据库服务器之间传送数据 的工具。 导入数据：MySQL，O...

留言区

Notes
Sqoop
本文目录
<pjax>
</pjax>
<pjax></pjax>
<pjax> Are you Robot?</pjax>