Hadoop入门之Sqoop的安装和数据导入导出

来源:互联网 发布:三国群英传ol 知乎 编辑:程序博客网 时间:2024/05/17 15:19
sqoop安装

1、下载并解压

最新版下载地址http://ftp.wayne.edu/apache/sqoop/1.4.6/


2、修改配置文件

$ cd $SQOOP_HOME/conf

$ mv sqoop-env-template.sh sqoop-env.sh

打开sqoop-env.sh并编辑下面几行:

export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop-2.6.1/

export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop-2.6.1/

export HIVE_HOME=/home/hadoop/app/hive


3、加入mysqljdbc驱动包

cp  ~/app/hive/lib/mysql-connector-java-5.1.28.jar   $SQOOP_HOME/lib/


验证启动

$ cd $SQOOP_HOME/bin

$ sqoop-version

预期的输出:

15/12/17 14:52:32 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6

Sqoop 1.4.6 git commit id 5b34accaca7de251fc91161733f906af2eddbe83

Compiled by abe on Fri Aug 1 11:19:26 PDT 2015

到这里,整个Sqoop安装工作完成。


Sqoop的使用:数据的导入和导出

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


语法

下面的语法用于将数据导入HDFS


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

示例

表数据

这里直接用上次搭建的azkaban任务产出的数据表吧:


导入表表数据到HDFS

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


$bin/sqoop import   \

--connect jdbc:mysql://localhost:3306/azkaban \

--username root  \

--password gome_search   \

--table project_flows \

--m 1 

验证在HDFS导入的数据是否成功


hadoop  fs -cat /user/hadoop/project_flows/part-m-00000



导入关系表到HIVE

bin/sqoop \
 import --connect jdbc:mysql://localhost:3306/azkaban \
--username root \
--password gome_search \
--table project_permissions \
--hive-import \
--m 1


导入到HDFS指定目录

在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。

以下是指定目标目录选项的Sqoop导入命令的语法。


--target-dir <new or exist directory in HDFS>

下面的命令是用来导入project_permissions  表数据到'/queryresult'目录。


bin/sqoop import \
--connect jdbc:mysql://localhost:3306/azkaban \
--username root \
--password gome_search \
--target-dir /queryresult \
--table project_permissions  --m 1


导入表数据子集

我们可以导入表的使用Sqoop导入工具,"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

where子句的语法如下。


--where <condition>

下面的命令用来导入project_permissions 表数据的子集。子集查询检索员工ID和地址,居住城市为:

bin/sqoop import \
--connect jdbc:mysql://localhost:3306/azkaban \
--username root \
--password gome_search \
--where "project_id > 2" \
--target-dir /queryresult3 \
--table project_permissions --m 1




 Sqoop的数据导出

将数据从HDFS导出到RDBMS数据库

导出前,目标表必须存在于目标数据库中。

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


语法

以下是export命令语法


$ sqoop export (generic-args) (export-args)


示例

数据是在HDFS /azkaban_demo/”目录的emp_data文件中。所述emp_data如下:


1201, gopal,manager, 50000, TP

1202, manisha,preader, 50000, TP

1203, kalil,php dev, 30000, AC

1204, prasanth,php dev, 30000, AC

1205, kranthi,admin,20000, TP

1206, satish p,  grp des, 20000, GR


1、首先需要手动创建mysql中的目标表


CREATE TABLE employee (

   id INT NOT NULL PRIMARY KEY,

   name VARCHAR(20),

   deg VARCHAR(20),

   salary INT,

   dept VARCHAR(10));


2、然后执行导出命令


bin/sqoop export \
--connect jdbc:mysql://10.115.1.68:3306/sqoop \
--username root \
--password gome_search \
--table employee \
--export-dir /azkaban_demo/


3、验证表mysql命令行

select * from employee;







阅读全文
0 0