什么是Sqoop?
Sqoop是一个用于在Hadoop和关系数据库,或商业服务器之间的数据传输的工具
从RDB导入数据到HDFS)
导出数据从HDFS到RDB
Sqoop使用MapReduce导入和导出数据,提供并行操作和容错
Sqoop使用者有哪些?
- application programmers (应用开发人员)
- System administrators (系统管理员)
- Database administrators (数据库管理员)
- Sqoop底层就是mapreduce任务,但是只有map,没有reduce
Sqoop安装
第一步:准备安装包:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
安装Sqoop的前提是已经具备Java和Hadoop的环境
第二步:解压安装到安装目录
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ../install/
第三步:修改配置文件sqoop-env.sh
进入conf文件夹 cp sqoop-env-template.sh sqoop-env.sh
修改sqoop-env.sh
配置hadoop,hbase,hive,zookeeper等的安装位置
export HADOOP_COMMON_HOME=/root/install/hadoop-2.7.7
export HADOOP_MAPRED_HOME=/root/install/hadoop-2.7.7
export HADOOP_CONF_DIR=/root/install/hadoop-2.7.7/etc/hadoop
export HIVE_CONF_DIR=/root/install/apache-hive-2.3.6-bin/conf
export HIVE_HOME=/root/install/apache-hive-2.3.6-bin
export HBASE_HOME=/root/install/hbase-1.2.12
export ZOOCFGDIR=/root/install/zookeeper-3.4.14/conf
export ZOOKEEPER_HOME=/root/install/zookeeper-3.4.14
第四步:加入mysql驱动包到sqoop-1.4.7/lib目录下
第五步:配置环境变量
第六步:验证sqoop是否安装成功
sqoop version
列出MySQL数据有哪些数据库:
sqoop list-databases \
--connect jdbc:mysql://hadoop5:3306/ \
--username root \
--password hadoop
列出MySQL中的某个数据库有哪些数据表:
sqoop list-tables \
--connect jdbc:mysql://hadoop5:3306/shopping_db \
--username root \
--password hadoop
Sqoop 增量导入
- 追加所有匹配的记录(可能 在目标中创建重复记录)
- 在源表中有数据更新的时候使用,检查列就必须是一个时间戳或日期类型的字段,更新完之后, last-value会被设置为执行增量导入时的当前系统时间)
//结合hive的分区理解,比如说hive表是分区表,按照day分区,那么每天都要新增一个分区并且导入数据,
这种情况下需要使用sqoop的增量导入,增量导入就是导入一个分区的数据。
//全量导入:就是一次性导入所有数据
sqoop import \
--connect jdbc:mysql://localhost/sqoop_db \
--driver com.mysql.jdbc.Driver \
--table departments \
--username root \
--password hadoop \
--incremental append \
--check-column department_id \
--last-value '3' \
--target-dir /sqoop/db/departments \
--m 1
MySQL -> HBase数据迁移
#创建hbase的table
create 'products','data','category'
#sqoop import shell
sqoop import \
--connect jdbc:mysql://localhost/sqoop_db \
--username root \
--password hadoop \
--driver com.mysql.jdbc.Driver \
--table products \
--columns
"product_id,product_name,product_description,product_price,product_image" \
--hbase-table products \
--column-family data \
--hbase-row-key product_id \
--m 1
count 'products'
scan 'products' , { LIMIT => 10 }
#插入category 数据
sqoop import \
--connect jdbc:mysql://localhost/sqoop_db \
--username root \
--password hadoop \
--driver com.mysql.jdbc.Driver \
--query "select p.product_id,c.category_name from products p inner join categories
c on p.product_category_id = c.category_id and \$CONDITIONS" \
--split-by product_id \
--hbase-table products \
--column-family category \
--hbase-row-key product_id \
--m 1
count 'products'
scan 'products' , { LIMIT => 10 }