专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

11——26Sqoop 11/16-24

ins518 2024-11-04 13:56:47 技术文章 10 ℃ 0 评论

订单管理

架构:

sqoop

Sqoop(发音:skup)是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

配置:

1、hadoop的必须有系统配置

2、放驱动到lib目录下

3、建立选项文件

DBMS to HDFS

eg/user.conf

执行:

启动hdfs start-dfs.sh

导入命令:

cd /usr/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/

bin/sqoop --options-file eg/user.conf

DBMS to HIVE

eg/test2

# target-dir可以看做一个临时目录,先导入hdfs的文件中临时文件,再导入hive

目录名和--hive-table要不一样

执行:

注意:hive所在的机器和sqoop必须在同一台机器

启动hive start-hive.sh 启动hive之前记得启动与之关联的数据库

cd /usr/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/

bin/sqoop --options-file eg/test2.conf

DBMS to Hbase

hdfs to DBMS

注意:导出只能从hdfs到关系型数据库

hive和hbase同步

帮助文档:

1、 把hive-hbase-handler-1.2.1.jar cp到hbase/lib 下

有hbase配置的集群都需要复制

cp/usr/apache-hive-1.2.1-bin/lib/hive-hbase-handler-1.2.1.jar /usr/hbase-0.98.12.1-hadoop2/lib/

scp/usr/apache-hive-1.2.1-bin/lib/hive-hbase-handler-1.2.1.jar root@node3:/usr/hbase-0.98.12.1-hadoop2/lib/

2、同时把hbase中的所有的jar,cp到hive/lib

注意:同名的jar包不要覆盖!

cp /usr/hbase-0.98.12.1-hadoop2/lib/* /usr/apache-hive-1.2.1-bin/lib/

3、 在hive的配置文件增加属性:

vi /usr/apache-hive-1.2.1-bin/conf/hive-site.xml

4、 在hive中创建临时表

--中间表第一个字段名字为key(必须)

CREATE TABLE tmp_order2 (key string,id string,user_id string,order_amount double,order_statusint,order_create_timetimestamp)STOREDBY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITHSERDEPROPERTIES("hbase.columns.mapping" ":key,order:order_id,order:user_id,order:order_amount,order:order_status,order:order_create_time")

TBLPROPERTIES ("hbase.table.name" = "t_order");

测试:在hbase中会自动创建t_order表,在表中已经建立了映射的列中插入数据,在hive中的tmp_order2中就可以查到(没有建立映射的列不能查到)

hive--- > hbase

将hive中其他表的数据导入到hive和hbase建立的映射的表中,就可以实现将hive中的数据导入到hbase中

ETL 数据仓库技术

涉及各种数据的导出和导入

不同的工具适合不同的项目

抽取----转换----导入

sqoop的使用

----sqoop是一个用来在hadoop体系和关系型数据库之间进行数据互导的工具

----实质就是将导入导出命令转换成mapreduce程序来实现

sqoop安装:安装在一台节点上就可以了。

1.上传sqoop

2.安装和配置

----修改配置文件 sqoop-env.sh

#Set path to where bin/hadoop is available

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

#Set path to where hadoop-*-core.jar is available

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

#set the path to where bin/hbase is available

export HBASE_HOME=/home/hadoop/app/hbase-0.96.2-hadoop2

#Set the path to where bin/hive is available

export HIVE_HOME=/home/hadoop/app/hive-0.12.0-bin

#Set the path for where zookeper config dir is

export ZOOCFGDIR=/home/hadoop/app/zookeeper-3.4.5/conf

再添加sqoop到环境变量

######将数据库连接驱动拷贝到$SQOOP_HOME/lib里

3.使用

第一类:数据库中的数据导入到HDFS上

sqoop import

--connect jdbc:mysql://192.168.1.10:3306/itcast

--username root --password 123

--table trade_detail

--columns 'id, account, income, expenses'

指定输出路径、指定数据分隔符

sqoop import

--connect jdbc:mysql://192.168.1.10:3306/itcast

--username root --password 123

##要导入数据的表

--table trade_detail

##数据导入hdfs后所存放的目录

--target-dir '/sqoop/td'

##导入的数据字段之间的分隔符

--fields-terminated-by '\t'

指定Map数量 -m

sqoop import

--connect jdbc:mysql://192.168.1.10:3306/itcast

--username root --password 123

--table trade_detail

--target-dir '/sqoop/td1'

--fields-terminated-by '\t'

##指定做导入处理时的map 任务数

-m 2

增加where条件, 注意:条件必须用引号引起来

sqoop import

--connect jdbc:mysql://192.168.1.10:3306/itcast

--username root --password 123

--table trade_detail

--where 'id>3'

--target-dir '/sqoop/td2'

增加query语句(使用 \ 将语句换行)

sqoop import

--connect jdbc:mysql://192.168.1.10:3306/itcast

--username root --password 123

--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS'

--split-by trade_detail.id

--target-dir '/sqoop/td3'

注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上

而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上\即\$CONDITIONS

如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上

第二类:将HDFS上的文件数据导出到数据库的表里面去

sqoop export

--connect jdbc:mysql://192.168.8.120:3306/itcast

--username root --password 123

##你要导出的数据所在的目录

--export-dir '/td3'

##你要导往的目标关系表

--table td_bak

-m 1

##你要导出的文件的字段分隔符

--fields-termianted-by '\t'

4.配置mysql远程连接

GRANT ALL PRIVILEGES ON itcast.* TO 'root'@'192.168.1.201' IDENTIFIED BY '123' WITH GRANT OPTION;

FLUSH PRIVILEGES;

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

FLUSH PRIVILEGES

例子:mysql--- >> hdfs

hdfs--- >>mysql

mysql-- >> hive

创建表

导入数据

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表