大数据框架开发基础之Sqoop(1) 入门
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
Sqoop的基本认知
原理
将导入或导出命令翻译成mapreduce程序来实现。
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。
安装
Sqoop的安装也很简单,首先我们需要有有一个Sqoop安装包,这个包老夫也提供了。
我们在如下目录中:
drwxr-xr-x 2 corp corp 4096 Dec 19 2017 bin -rw-rw-r-- 1 corp corp 55089 Dec 19 2017 build.xml -rw-rw-r-- 1 corp corp 47426 Dec 19 2017 CHANGELOG.txt -rw-rw-r-- 1 corp corp 9880 Dec 19 2017 COMPILING.txt drwxr-xr-x 2 corp corp 4096 Dec 19 2017 conf drwxr-xr-x 5 corp corp 4096 Dec 19 2017 docs drwxr-xr-x 2 corp corp 4096 Dec 19 2017 ivy -rw-rw-r-- 1 corp corp 11163 Dec 19 2017 ivy.xml drwxr-xr-x 2 corp corp 4096 Dec 19 2017 lib -rw-rw-r-- 1 corp corp 15419 Dec 19 2017 LICENSE.txt -rw-rw-r-- 1 corp corp 505 Dec 19 2017 NOTICE.txt -rw-rw-r-- 1 corp corp 18772 Dec 19 2017 pom-old.xml -rw-rw-r-- 1 corp corp 1096 Dec 19 2017 README.txt -rw-rw-r-- 1 corp corp 1108073 Dec 19 2017 sqoop-1.4.7.jar -rw-rw-r-- 1 corp corp 6554 Dec 19 2017 sqoop-patch-review.py -rw-rw-r-- 1 corp corp 765184 Dec 19 2017 sqoop-test-1.4.7.jar drwxr-xr-x 7 corp corp 4096 Dec 19 2017 src drwxr-xr-x 4 corp corp 4096 Dec 19 2017 testdata
我们进入到 conf/ 目录下,先修改文件 sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2 export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2 export HIVE_HOME=/opt/module/apache-hive-1.2.1 export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10 export ZOOCFGDIR=/opt/module/zookeeper-3.4.10 export HBASE_HOME=/opt/module/hbase-1.1.2
再将我们的JDBC的驱动拷贝到 sqoop的 lib/ 下
cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.7/lib/
我们可以通过某一个command来验证sqoop配置是否正确:
bin/sqoop help Available commands: codegen Generate code to interact with database records create-hive-table Import a table definition into Hive eval Evaluate a SQL statement and display the results export Export an HDFS directory to a database table help List available commands import Import a table from a database to HDFS import-all-tables Import tables from a database to HDFS import-mainframe Import datasets from a mainframe server to HDFS job Work with saved jobs list-databases List available databases on a server list-tables List available tables in a database merge Merge results of incremental imports metastore Run a standalone Sqoop metastore version Display version information
测试Sqoop能否连接到MySQL
bin/sqoop list-databases --connect jdbc:mysql://hadoop101:3306/ --username root --password 000000 # 出现下面的标识连接成功了 information_schema amon azkaban cm corp-ci hive hue metastore mysql oozie performance_schema telecom-customer-service test
Sqoop的连接案例
导入数据
Note: 在Sqoop中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做:导入,即使用import关键字。
RDBMS到HDFS
1) 确定Mysql服务开启正常
2) 在Mysql中新建一张表并插入一些数据
下面是老夫之前在数据库中就已经存在的数据,在140W+
全部导入
bin/sqoop import \ --connect jdbc:mysql://hadoop101:3306/sun-iot \ --username root \ --password 000000 \ --table telecom-customer-service \ --target-dir /user/telecom-customer-service \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t"
查询导入
bin/sqoop import \ --connect jdbc:mysql://hadoop101:3306/sun-iot \ --username root \ --password 000000 \ --target-dir /user/telecom-customer-service \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select call1,call2,date_time,duration from telecom-customer-service where id <=1 and $CONDITIONS;'
Note:
提示:must contain '$CONDITIONS' in WHERE clause.
如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。
导入指定列