【转载】sqoop导入导出到mysql,hbase,hive,hdfs系统,多表关联倒出例子

转载文章 https://www.cnblogs.com/zdy0521/p/11850315.html 张先森

Sqoop工具

1…协助RDBMS与Hadoop之间进行高效的大数据交流

把关系型数据库的数据导入Hadoop与其相关的系统(HBASE,HIVE)

同时也可以把数据从Hadoop系统抽取并导出到关系型数据库中。

Sqoop中一大亮点是可以通过Hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS

Sqoop就是一个转换工具,用于在关系型数据库与HDFS之间进行数据转换

项目使用场景:

1.业务场景存放在关系型数据库中,如果数据达到一定规模后,需要对其进行分析或统计,单纯使用关系型数据库可能会有瓶颈,这时可将数据从业务数据库导入import到Hadoop平台进行离线分析

2.对大规模的数据在Hadoop平台上分析后,肯恩恶搞需要将结果同步到关系型数据库中作为业务辅助数据,这时候需要将Hadoop平台分析后的数据导出export到关系型数据库。

一、sqoop与mysql

1.列出musql数据库中的所有数据库

sqoop list-databases -connect jdbc:mysql://hdp-qm-01:3306\

-username hadoop -password hadoop

2.列出数据库hivedb1711中的所有数据表

sqoop list-tables -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop

3.通过sqoop执行SQL语句

sqoop eval -connect jdbc:mysql://hdp-qm-01:3306/jivedb1711\

-username hadoop -password hadoop -query ‘select * from EMP’

二,sqoop与hdfs(mysql数据库与hdfs)

1.将hivedb1711.EMP表中的数据导入HDFS的/sqfs目录下

sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop -table EMP -m 1 -target-dir /sqfs/emp1

解释

(1)-table EMP表示导出的表

(2)-m 1 表示使用一个maptask操作

(3)-target-dir /sqfs/emp1数据导到/sqfs/emp1位置

注意:执行过程走MapReduce,所以要保证每一个集群节点能访问hivedb1711数据库

grant all privileges on hivedb1711.* to ‘hadoop@’%'identified by ‘hadoop’;

使用SQL语句过滤满足条件的数据,将其导入hdfs系统(注意:and $CONDITIONS)

sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \

-username hadoop -password hadoop -query ‘select * from EMP where emgr=10 and $CONDITIONS’\ -m 2 --split-by eNo -target-dir /sqfs/emp3;

没有过滤,使用SQL语句导入所有数据到hdfs(注意:where$CONDITION)

sqoop import -connect jdbc:mysql://hdp-qm-01:3306/jivedb1711\

-username hadoop -password hadoop -query ‘select * from EMP where $CONDITIONS’\

-m 2 --split-by eNo -target-dir /sqfs/emp4;

注意:这种方式和1里面的操作是一个效果

2.将HDFS上/sqfs目录下的数据导入hivedb1711.emp2表中

(1).hivedb1711.emp2表结构必须存在

create table if not exists emp2(

eno int(25)not null primary key,

ename varchar(45),

ejob varchar(45),

emgr int(25),

ehiredate date,

esal int(45),

ecomm int(45),

dp_no int(25));

(2)导出数据到emp2表的命令

sqoop export -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop -table emp2\

-m 1 -export-dir /sqfs/emp3

三,sqoop与hive

1.将关系型数据的表emp表结构复制到hive中

sqoop create-hive-table -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop -table emp2 -hive-table demo_log.emp\

-fields-terminated-by “|” -lines-terminated-by “\n”

2.将关系型数据库中的emp表的数据导入文件到hive1表中

sqoop inport -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop -table emp2 -hive-table demo_log.emp -m 3\

-fields-terminated-by “|” -hive-import

3.将hive中的表demo_log.emp数据导入到mysql数据库emp3表中

(1)先在mysql数据库中简历表的结构

create table if not exists emp3(

eno int(25) not null primary key,

ename varchar(45),

emgr int(25),

ehiredate date,

esal int(45),

ecomm int(45),

dp_no int(25));

(2)导出数据到emp3

sqoop export -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop -table emp3\

-export-dir /user/hive/warehouse/demo_log.db/emp/* \

-input-fields-terminated-by ‘|’

说明:-input-fields-terminated-by ‘|’ 分隔符是根据export-dir 指定目录下文件内容的分隔符来确定的

四,sqoop与Hbase

1.mysql中的EMP表中的数据导入数据到HBASE的qm170701:mysql_emp表中

(1)先在hbase表中创建HBASE表:

create ‘qm170701:mysql_emp’,‘cf’

(2)导入数据到Hbase的全貌70701:mysql_emp表

sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop\

-table EMP\

-hbase-table qm170701:mysql_emp\

-column-family ‘cf’\

-hbase-row-key eno -m 1

2.将mysql数据库emp表不同列的数据添加到emp3表中不同列族中

(1)先在hbase表中创建hbase表:

create ‘qm170701:mysql_emp2’,‘cf1’,‘cf2’

(2)导入数据到Hbase的qm170701:mysql_emp2表

A.先将emp表的eName,eJob列中的数据到cf1列族中

sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop\

-table EMP\

-hbase-table qm170701:mysql_emp2\

-column-family ‘cf1’\

-hbase-row-key eno -m 1 -columns eno,ename,ejob

B.将EMP表的emgr,ehiredate,esal,ecomm,dp_no列中的数据到cf2列族中

sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711\

-username hadoop -password hadoop\

-table EMP

-hbase-table qm170701:mysql_emp2\

-column-family ‘cf2’\

-hbase-row-key eno -m 1 -colimns eno,emgr,ehiredate,esal,ecomm,dp_no

例子:

各个部门中工资大于1500员工数及部门名称

sqoop import -connect jdbc:mysql://hdp-qm-01:3306/hivedb1711 \

-username hadoop -password hadoop \

-query ‘select d1.dp_name as dname,e2.nums as nums from(select e1.dp_no,count(e1.eno) as nums from EMP e1 where e1.esal>1500 group by dp_no)e2 left join dept d1 on d1.dp_no = e2.dp_no where $CONDITIONS’ \

-m 1 --split-by e2.dname -target-dir /sqfs/emp122

你可能感兴趣的:(MySQL那些事儿,hive,mysql,hdfs)