什么是sqoop
sqoop通俗讲就是支持将mysql,oracle等关系型数据库数据导入到hdfs中的工具。
用的是mapreduce这种计算模式,只要在一台服务器上安装,整个服务器集群都能开启服务。
我的项目中用到sqoop2
mysql中数据——>hdfs ——>hive
其中mysql数据到hdfs就是由sqoop完成,hdfs数据导入到hive则是通过在hive中建表,通过load....overwrite....hive命令导入建好的hive表。
如何使用sqoop2
我是在两台服务器上运行sqoop,一台作为服务端,一台作为客户端。 找到sqoop安装目录,进入bin目录,里面有一个sqoop2-server服务端脚本,启动服务端命令
./sqoop2-server start
在另一台服务器上打开bin目录,看到有sqoop2-shell客户端脚本,启动客户端命令
./sqoop2-shell
接着让客户端连接上服务端
set server --host 客户端服务器ip --port 12000 --webapp sqoop
到此,连接建立成功。
数据导入到hdfs
在客户端创建link,link是基于connector的,创建link的过程相当于是connector的实例化,将指定链接的地址、用户名密码等信息。有了link之后就可以创建job,job对应两个link,一个连接数据源一个连接数据目的地。job创建完成后并没有实际执行数据的传输,可以在任意时间启动创建成功的job。
创建link1,link1为hdfs的链接
create link -c hdfs-connector
创建link2,link2为关系型数据库的链接
create link -c generic-jdbc-connector
link创建好后,创建job,一个job对应mysql数据库的一张表
create job -f link2名称 -t link1名称
启动job,开启服务
start job --id job的id
hdfs数据到hive
hive建表,表结构与mysql数据库中表结构一样。
create table configure_detection_area(
id bigint,
cameraId bigint
) partitioned by(resource_scheme STRING)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties(
"separatorChar"=",",
"quoteChar"="'",
"escapeChar"="\\"
)stored as textfile;
导数据
load data inpath'hdfs中存mysql数据的目录' overwrite into table configure_detection_area
partition(resource_scheme='suidao');