1、主 编:李俊杰 谢志明副主编:肖政宏 石 慧 谢高辉 杨泽强出版社:人民邮电出版社*任务1 Sqoop安装及MySQL与HDFS数据迁移*任务2 MySQL与Hive/HBase数据转移【任务概述】【任务概述】本任务需要完成Sqoop的安装,使用Sqoop Import和Sqoop Export完成MySQL和HDFS之间数据的转移,并检查其结果。【支撑知识支撑知识】一、Sqoop简介二、Sqoop的基本命令【任务实施任务实施】一、客户端主机安装Sqoop软件二、安装MySQL-Client软件包三、MySQL与HDFS数据迁移一、Sqoop简介Sqoop是一个用来将Hadoop和关系型数据库
2、中的数据相互转移的工具,可以将一个关系型数据库(如:MySQL,Oracle,Postgres等)中的数据导入到HDFS中,也可以将HDFS的数据导出到关系型数据库中。二、Sqoop的基本命令Sqoop提供一系列命令,包括导入操作(import)、导出操作(export)、导入所有表(import-all-tables)、列出所有数据库实例(list-databases)和列出数据库实例中所有表(list-tables)等。下面列举一些Sqoop常用命令:(1)列出MySQL的所有数据库sqoop list-databases-connect jdbc:mysql:/IP:3306/-user
3、name 用户-password 密码(2)连接MySQL并列出数据库中的表sqoop list-tables-connect jdbc:mysql:/IP:3306/数据库-username 用户-password 密码(3)MySQL的表数据导入到HDFSsqoop import-connect jdbc:mysql:/IP:3306/数据库-username 用户-password 密码-table 表-num-mappers Map任务数-target-dir HDFS存放位置参数说明:-num-mappers或-m选项指定Map任务个数,-target-dir选项指定HDFS存放位置
4、。(4)HDFS导出到MySQL表中sqoop exprot-connect jdbc:mysql:/IP:3306/数据库-username 用户-password 密码-table 表-num-mappers Map任务数-export-dir HDFS存放位置(5)将MySQL的表结构复制到Hive中sqoop create-Hive-table-connect jdbc:mysql:/IP:3306/-username 用户-password 密码-table 表-hive-table hive表-fields-terminated-by 0001 -lines-terminated-
5、by n参数说明:-fields-terminated-by 0001是设置每列之间的分隔符,0001是ASCII码中的1,它也是hive的默认行内分隔符,而sqoop的默认行内分隔符为,,-lines-terminated-by n 设置的是每行之间的分隔符,此处为换行符,也是默认的分隔符。(6)将数据从MySQL导入文件到Hive表中sqoop import-connect jdbc:mysql:/IP:3306/-username 用户-password 密码-table 表-hive-import-hive-table hive表-num-mappers Map任务数-fields-t
6、erminated-by 0001;参数说明:-fields-terminated-by 0001 需同创建hive表时保持一致。(7)将Hive中的表数据导入到MySQL表中sqoop export-connect jdbc:mysql:/IP:3306/数据库-username 用户-password 密码-table 表-export-dir HDFS文件-input-fields-terminated-by 0001(8)使用-query语句将数据从MySQL导入文件到Hive表中sqoop import-append-connect jdbc:mysql:/IP:3306/数据库-u
7、sername 用户-password 密码-query select from -num-mappers Map任务数-target-dir HDFS存放位置-fields-terminated-by,(9)使用-columns-where 语句将数据从MySQL导入到Hive表中sqoop import-append-connect jdbc:mysql:/IP:3306/数据库-username-用户-password 密码-table 表-columns 列名 -where 条件-num-mappers Map任务数 -target-dir HDFS存放位置-fields-termin
8、ated-by,【任务实施】【任务实施】n一、客户端主机安装Sqoop软件(1)下载Sqoop软件包到/home/hadoop目录下,网址如下:https:/ tar xvzf/home/hadoop/sqoop-1.4.6.bin_hadoop-2.0.4-alpha.tar.gzhadoop.$sudo chown-R hadoop:hadoop sqoop-1.4.6.bin_hadoop-2.0.4-alpha【任务实施】【任务实施】(3)修改Sqoop配置参数hadoop.$cd/opt/sqoop-1.4.6.bin_hadoop-2.0.4-alpha/confhadoop.$v
9、i sqoop-env.sh添加如下内容:export HADOOP_COMMON_HOME=/opt/hadoop-2.7.3export HADOOP_MAPRED_HOME=/opt/hadoop-2.7.3export HBASE_HOME=/opt/hbase-1.2.4export HIVE_HOME=/opt/apache-hive-2.1.1-binexport HCAT_HOME=/opt/apache-hive-2.1.1-bin/hcatalogexport ZOOCFGDIR=/opt/zookeeper-3.4.9【任务实施】【任务实施】(4)修改环境变量hadoop
10、.$vi/home/hadoop/.profile添加如下内容:export SQOOP_HOME=/opt/sqoop-1.4.6.bin_hadoop-2.0.4-alphaexport PATH=$PATH:$SQOOP_HOME/bin(5)环境变量生效hadoop.$source/home/hadoop/.profile6、复制mysql-connector-java-5.1.40.jarhadoop.$cp/home/hadoop/mysql-connector-java-5.1.40.jar /opt/sqoop-1.4.6.bin_hadoop-2.0.4-alpha/lib【
11、任务实施】【任务实施】n二、安装MySQL-Client软件包(1)在客户端主机安装MySQL-Clienthadoopsw-desktop:$sudo apt-get install mysql-client(2)MySQL用户授权hadoopmaster:$mysql-uroot-p123456mysql GRANT ALL PRIVILEGES ON*.*TO sqoop%IDENTIFIED BY 123456;mysql GRANT ALL PRIVILEGES ON*.*TO sqooplocalhost IDENTIFIED BY 123456;(3)创建数据hadoopsw-d
12、esktop:$mysql-hmaster-usqoop-p123456mysql create database sqoop;mysql use sqoop;mysql create table dept(id int,name varchar(20),primary key(id);mysql insert into dept values(610213,云计算技术与应用);mysql insert into dept values(610215,大数据技术与应用);mysql insert into dept values(590108,软件技术);【任务实施】【任务实施】n三、MySQ
13、L与HDFS数据迁移(1)查看MySQL数据库hadoopsw-desktop:$sqoop list-databases-connect jdbc:mysql:/master:3306/-username sqoop-password 123456(2)查看MySQL表hadoopsw-desktop:$sqoop list-tables-connect jdbc:mysql:/master:3306/sqoop -username sqoop-password 123456(3)MySQL表导入到HDFShadoopsw-desktop:$sqoop import-connect jdbc
14、:mysql:/master:3306/sqoop -username sqoop-password 123456-table dept-m 1-target-dir/user/dept(4)查看HDFShadoopsw-desktop:$hdfs dfs-ls/user/depthadoopsw-desktop:$hdfs dfs-cat/user/dept/part-m-00000【任务实施】【任务实施】(5)清空MySQL的dept表mysql use sqoop;mysql truncate dept;(6)数据从HDFS导出到MySQL表hadoopsw-desktop:$sqoop
15、 export-connect jdbc:mysql:/master:3306/sqoop -username sqoop-password 123456-table dept-m 1-export-dir/user/dept(7)查询dept表mysql select*from dept;(8)Sqoop Import增量导入到HDFS上mysql insert into dept values(590101,计算机应用技术);hadoopsw-desktop:$sqoop import-connect jdbc:mysql:/master:3306/sqoop -username sqoo
16、p-password 123456-table dept-m 1-target-dir/user/dept-incremental append-check-column idhadoopsw-desktop:$hdfs dfs-ls/user/depthadoopsw-desktop:$hdfs dfs-cat/user/dept/part-m-00001【任务概述】【任务概述】Hive和HBase运行在Hadoop非常重要的组件,Hive是数据仓库,HBase是分布式数据库,本任务主要完成MySQL和Hive之间以及MySQl和HBase之间数据转移。【任务实施任务实施】一、MySQL与H
17、ive之间数据转移二、MySQL与HBase之间数据转移任务实施任务实施一、MySQL与Hive之间数据转移(1)MySQL的dept表导入Hivehadoopsw-desktop:$sqoop import-connect jdbc:mysql:/master:3306/sqoop -username sqoop-password 123456-table dept-m 1-hive-import 参数说明:-hive-import指定导入Hive,-hive-table指定Hive表名,-hive-overwrite可以覆盖原Hive表,-create-hive-table可以将原来MyS
18、QL表结构复制到Hive表中。(2)查看Hive表数据hive show tables;hive select*from dept;任务实施任务实施(3)清空MySQL的dept表mysql use sqoop;mysql truncate dept;(4)Hive表数据导出到MySQLhadoopsw-desktop:$sqoop export-connect jdbc:mysql:/master:3306/sqoop -username sqoop-password 123456-table dept-m 1-export-dir/hive/warehouse/dept-input-fie
19、lds-terminated-by 0001 任务实施任务实施(5)查询dept表mysql select*from dept;任务实施任务实施二、MySQL与HBase之间数据转移(1)创建HBase表hbase(main):001:0 create hbase_dept,col_family(2)MySQL的dept表导入Hbasehadoopsw-desktop:$sqoop import-connect jdbc:mysql:/master:3306/sqoop -username sqoop-password 123456-table dept-hbase-create-table-hbase-table hbase_dept-column-family col_family-hbase-row-key id(3)查看HBase的dept记录hbase(main):003:0 scan hbase_dept任务实施任务实施查看HBase的dept记录注:由于HBase编码问题,汉字无法直接显示,汉字为解码结果。【同步训练】【同步训练】p一、简答题(1)Sqoop是什么?(2)Sqoop支持的功能有哪些?p二、操作题(1)安装MySQL客户端。(2)安装Sqoop工具。(3)创建MySQL表并输入数据,使用Sqoop工具把该数据导入到HDFS。