Hive(十一)之SQOOP

SQOOP : SQL-TO-HADOOP
SQOOP可进行的操作:

  1. HDFS -> MySQL
  2. MySQL -> Hive

01. 配置SQOOP

  1. 开启Zookeeper
  2. 开启集群服务
  3. 配置 sqoop-env.sh文件:
#export HADOOP_COMMON_HOME=
export HADOOP_COMMON_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/
#Set path to where hadoop-*-core.jar is available
#export HADOOP_MAPRED_HOME=
export HADOOP_MAPRED_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/
#set the path to where bin/hbase is available
#export HBASE_HOME=
#Set the path to where bin/hive is available
#export HIVE_HOME=
export HIVE_HOME=/opt/modules/cdh/hive-0.13.1-cdh5.3.6/
#Set the path for where zookeper config dir is
#export ZOOCFGDIR=
export ZOOCFGDIR=/opt/modules/cdh/zookeeper-3.4.5-cdh5.3.6/
export ZOOKEEPER_HOME=/opt/modules/cdh/zookeeper-3.4.5-cdh5.3.6/
  1. 拷贝jdbc驱动到sqoop的lib目录下
cp -a mysql-connector-java-5.1.27-bin.jar /opt/modules/cdh/sqoop-1.4.5-cdh5.3.6/lib/
  1. 启动sqoop
$ bin/sqoop help  #查看帮助
  1. 测试Sqoop是否能够连接成功
$ bin/sqoop list-databases --connect jdbc:mysql://hadoop-senior01.darrenzhang.com:3306/metastore --username root --password 123456
测试成功

02. 案例

2.1 数据的准备

  1. 确定Mysql服务的正常开启
  2. 在Mysql中创建一张表
mysql> create database company;
mysql> create table staff(
     id int(4) primary key not null auto_increment, 
     name varchar(255) not null,   
     sex varchar(255) not null);
mysql> insert into staff(name, sex) values('Thomas', 'Male');  
  1. 对以上数据进行操作

2.2 使用sqoop将mysql中的数据导入到HDFS

  • RDBMS(MySQL) --> HDFS(使用Sqoop导入数据到HDFS)

1. 全部导入

$ bin/sqoop import \
--connect jdbc:mysql://hadoop-senior01.darrenzhang.com/company \
--username root \
--password 123456 \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

2. 将查询到的信息导入

$ bin/sqoop import \
--connect jdbc:mysql://hadoop-senior01.darrenzhang.com:3306/company \
--username root  \
--password 123456 \
--target-dir /user/company \  ## HDFS路径
--delete-target-dir \
--num-mappers 1  \
--fields-terminated-by "\t"  \
--query 'select name,sex from company.staff where id >= 2 and $CONDITIONS;'

3. 导入指定列

$ bin/sqoop import \
--connect jdbc:mysql://hadoop-senior01.darrenzhang.com:3306/company \
--username root \
--password 123456 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns id, sex \
--table company.staff

4. 使用sqoop关键字筛选查询导入数据

$ bin/sqoop import \
--connect jdbc:mysql://hadoop-senior01.darrenzhang.com:3306/company \
--username root \
--password 123456 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table staff \
--where "id=3"

2.3 RDBMS(MySQL) --> Hive

1. 在Hive中创建表(不需要提前创建表,会自动创建)

hive (company)> create table staff_hive(id int, name string, sex string) row format delimited fields terminated by '\t';

2. 向Hive中导入数据

$ bin/sqoop import \
--connect jdbc:mysql://hadoop-senior01.darrenzhang.com:3306/company \
--username root \
--password 123456 \
--table staff \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table company.staff_hive

2.4 Hive/HDFS --> MYSQL

1. 在Mysql中创建一张表

create table staff_mysql(id int(4) primary key not null auto_increment,name varchar(255) not null, sex varchar(255) not null);

2. 向MySQL中导入数据

$ bin/sqoop export \
--connect jdbc:mysql://hadoop-senior01.darrenzhang.com:3306/company \ # 由于已经连接到company库中了
--username root \
--password 123456 \
--table company.staff_mysql \# 这里就不需要再加库名了
--num-mappers 1 \
--export-dir /user/hive/warehouse/company.db/staff \
--input-fields-terminated-by "\t"

这样会报错,要将一个company去掉。

03. Sqoop 其他用法

类似hive,sqoop也可以将语句保存在文件中,然后执行这个文件。例如:

  1. 编写该文件
$ vi opt/job_temp.opt
  1. 执行该文件
$ bin/sqoop  --options-file opt/job_temp.opt

你可能感兴趣的:(Hive(十一)之SQOOP)