本文中的Sqoop使用v1.4.6版本
Sqoop官方檔:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html
Sqoop是一個(gè)數(shù)據(jù)同步工具,是apache基金會(huì)的頂級(jí)項(xiàng)目。
Sqoop可以實(shí)現(xiàn)數(shù)據(jù)在RDBMS和Hadoop的導(dǎo)入導(dǎo)出
Sqoop可以通過(guò)簡(jiǎn)單的配置實(shí)現(xiàn)同步功能,免去開發(fā)煩惱
本文參照Sqoop官方文檔指導(dǎo)完成宋距,由于Sqoop體量并不是很大并且配置相對(duì)比較簡(jiǎn)單,所以官方文檔也是很好看懂的琴锭,建議大家看一下叫乌。感謝A大給我們提供的優(yōu)秀開源組件 :)
Sqoop Logo
Sqoop
Sqoop基礎(chǔ)用法 Doc
使用方法: sqoop COMMAND [ARGS]
可用命令:
codegen 生成Sqoop操作數(shù)據(jù)功能的代碼娇未,Sqoop根據(jù)用戶指定的配置信息生成對(duì)應(yīng)的Java代碼责静,再使用腳本調(diào)用代碼實(shí)現(xiàn)同步功能
create-hive-table 導(dǎo)入表數(shù)據(jù)到Hive
eval 評(píng)估測(cè)試SQL語(yǔ)句并顯示執(zhí)行結(jié)果袁滥,可以是RDBMS的Sql或Hql
export 導(dǎo)出HDFS中的文件或目錄到RDBMS
help 顯示可用命令幫助信息
import 導(dǎo)入表或數(shù)據(jù)庫(kù)到HDFS
import-all-tables 導(dǎo)入指定數(shù)據(jù)庫(kù)所有表到HDFS
job 將配置保存為Sqoop任務(wù),通過(guò)job命令可方便控制
list-databases 列出某主機(jī)的所有可用數(shù)據(jù)庫(kù)
list-tables 列出某數(shù)據(jù)庫(kù)的所有可用表
version 顯示版本信息
Sqoop導(dǎo)入Mysql數(shù)據(jù)到HDFS Doc
- 在mysql中創(chuàng)建測(cè)試數(shù)據(jù)
DROP DATABASE IF EXISTS sqoop_import_test;
CREATE DATABASE sqoop_import_test DEFAULT CHARSET=utf8;
USE sqoop_import_test;
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `emp_test`;
CREATE TABLE `emp_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`emp_name` varchar(255) DEFAULT NULL,
`emp_age` int(3) DEFAULT NULL,
`last_login_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `emp_test` VALUES ('1', '簡(jiǎn)書', '1', '2017-06-09 14:36:54');
INSERT INTO `emp_test` VALUES ('2', '印象筆記', '2', '2017-06-09 14:37:14');
INSERT INTO `emp_test` VALUES ('3', 'OneNote', '3', '2017-06-09 14:37:31');
INSERT INTO `emp_test` VALUES ('4', '有道云筆記', '4', '2017-06-09 14:37:47');
- 將Mysql JDBC使用的jar包添加到Sqoop庫(kù)
- 準(zhǔn)備對(duì)應(yīng)版本的mysql連接JDBC jar如
mysql-connector-java-5.1.38.jar
- 將該jar拷貝到
${Sqoop_HOME}/lib
目錄下
- 執(zhí)行導(dǎo)入
我們的目的是將Mysql中的sqoop_import_test.emp_test
表導(dǎo)入HDFS灾螃,所以我們使用Sqoop的import
命令:
sqoop import \
--append \
--connect jdbc:mysql://master:3306/sqoop_import_test \
--username root \
--password root \
--target-dir /rdbms_2_hdfs \
--num-mappers 1 \
--table emp_test \
--fields-terminated-by '&'
- 查看結(jié)果
若正常執(zhí)行完成則會(huì)發(fā)現(xiàn)HDFS對(duì)應(yīng)目錄下會(huì)出現(xiàn)相應(yīng)的文件题翻,查看文件內(nèi)容與數(shù)據(jù)庫(kù)中的一致
HDFS結(jié)果查看
Sqoop導(dǎo)入Mysql數(shù)據(jù)到Hive Doc
準(zhǔn)備測(cè)試數(shù)據(jù)的過(guò)程同上,不再贅述
執(zhí)行導(dǎo)入到Hive命令:
sqoop import \
--hive-import \
--connect jdbc:mysql://master:3306/sqoop_import_test \
--username root \
--password root \
--hive-table rdmbs_2_hive \
--num-mappers 1 \
--table emp_test
成功執(zhí)行后查看Hive中結(jié)果:
Hive查詢結(jié)果
總結(jié)
文檔中演示的導(dǎo)入操作只是Sqoop提供的最基礎(chǔ)功能之一睦焕。Sqoop還有很多有趣的用法和有趣的導(dǎo)入配置項(xiàng)藐握,請(qǐng)大家查看官方文檔并進(jìn)行嘗試操作 :)