大数据入门第十二天——sqoop入门
一、概述
1.sqoop是什么
Apache Sqoop(TM) is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases
中文来说,就是:
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库
简而言之,sqoop是一个数据迁移工具!
2.主要原理
将导入或导出命令翻译成mapreduce程序来实现
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制
二、安装与配置
1.准备
本地具备java与hadoop环境,下载sqoop,下载地址:http://archive.apache.org/dist/sqoop/1.4.6/
// 这里的Alpha表示的是内测版
将下载的sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz上传到服务器
2.解压
[hadoop@mini1 ~]$ tar -zxvf sqoop-1.4..bin__hadoop-2.0.-alpha.tar.gz
// 位置可以按照自己的习惯进行定义
[hadoop@mini1 ~]$ mv sqoop-1.4..bin__hadoop-2.0.-alpha sqoop
3.修改配置文件
[hadoop@mini1 ~]$ cd sqoop/
[hadoop@mini1 sqoop]$ cd conf/
[hadoop@mini1 conf]$ mv sqoop-env-template.sh sqoop-env.sh
通过which/whereis 定位一下hadoop等目录
打开 sqoop-env.sh,修改以下几项(打开注释,添加相关值):
export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.4/
export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.4/
export HIVE_HOME=/home/hadoop/apps/hive-1.2.
4.加入Mysql的jdbc驱动包
由于我们是向MySQL导数据,所以需要的是对应的驱动包到Lib目录(这里就直接从hive里面拿了)
[hadoop@mini1 sqoop]$ cp ~/apps/hive-1.2./lib/mysql-connector-java-5.1..jar ./lib/
5.验证启动
[hadoop@mini1 sqoop]$ bin/sqoop
// 如果配置了环境变量,将可以直接通过sqoop启动
6.查看帮助
[hadoop@mini1 sqoop]$ bin/sqoop help
usage: sqoop COMMAND [ARGS] 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 See 'sqoop help COMMAND' for information on a specific command.
三、sqoop数据导入
“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据)
1.数据库导入HDFS
1.语法
$ sqoop import (generic-args) (import-args)
// 完整参数,参考:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_literal_sqoop_import_literal
2.示例
bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--table girl \
--m
-m,--num-mappers <n> Use n map tasks to import in parallel,其他完整参数,参考文档
未指定--target-dir /user/sqoop/test1 则默认为/user/hadoop/表名,这里可以进行在HDFS上的查看:
[hadoop@mini1 lib]$ hadoop fs -cat /user/hadoop/girl/part-m-
2.导入关系表到Hive
其实基本上是从数据库到hdfs,再Load到hive的表,不过这里可以一步到位了
bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--table girl \
--target-dir /user/hadoop/girl2 \
--hive-import \
--m
3.导入数据子集
有时候只想导入数据表中的一部分数据,可以通过where来进行过滤筛选:
bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--where "id > 5" \
--target-dir /user/hadoop/girl3 \
--table girl \
--m
当然,如果单纯where无法满足,可以使用自定义的query语句来筛选:——注意只要写了where则后面的 and \$CONDITIONS是死的,必须这么写!
bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--query "select * from girl where name='11' and id>6 and \$CONDITIONS" \
--target-dir /user/hadoop/girl3 \
--table girl \
--m
也可以使用split by来指定切片字段,这样就结合--m参数分配了
--split-by id \
--m
或者指定字段的分隔符,这样到HDFS就是这个分割符了。这样以后建表从hive映射就使用这个分隔符了:
--fields-terminated-by <char>
4.增量导入
增量导入( Incremental Imports)是仅导入新添加的表中的行的技术。
它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入
bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--table girl --m \
--target-dir /user/hadoop/girl4 \
--incremental append \
--check-column id \
--last-value
// 如果不想一直因为已经存在target-dir而新建,可以使用参数delete-target-dir,这样就会自动删除已经存在的目录了!请选择性使用
这样,targer-dir里面就是新增的数据了:
[hadoop@mini1 lib]$ hadoop fs -cat /user/hadoop/girl4/part-m-
,,aa
,,bb
四、sqoop数据导出
1.从HDFS中导出
将数据从HDFS导出到RDBMS数据库
导出前,目标表必须存在于目标数据库中。
默认操作是从将文件中的数据使用INSERT语句插入到表中
更新模式下,是生成UPDATE语句更新表数据
1.手动创建目标表
两种方法复制表结构:
1.create table B as select * from A where 1=2;
或者:
2.create table B like A;
这里就复制上面的girl的表结构了
2.执行导出命令
bin/sqoop export \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--table girl2 \
--export-dir /user/hadoop/girl/
如果文件不是默认的,分隔符,则添加指定参数:
--fields-terminated-by '\t'
2.sqoop作业
sqoop也支持作业的形式
--create创建
bin/sqoop job --create myimportjob -- import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --m 1
--list查看
$ sqoop job --list
--show查看
$ sqoop job --show myjob
--exec执行
$ sqoop job --exec myjob
它会显示下面的输出。
// :: INFO tool.CodeGenTool: Beginning code generation
...
但是我们可以用shell脚本的方式来运行调度,所以这个意义并不是很大.
大数据入门第十二天——sqoop入门的更多相关文章
- 大数据入门第十二天——azkaban入门
一.概述 1.azkaban是什么 通过官方文档:https://azkaban.github.io/ Azkaban is a batch workflow job scheduler create ...
- 大数据入门第十二天——flume入门
一.概述 1.什么是flume 官网的介绍:http://flume.apache.org/ Flume is a distributed, reliable, and available servi ...
- 大数据入门第二十天——scala入门(一)入门与配置
一.概述 1.什么是scala Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. ...
- 大数据入门第二十一天——scala入门(二)并发编程Akka
一.概述 1.什么是akka Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable).弹性的(Resilient).快速响应的(Responsive)应用程序的平台. 更多入门的基 ...
- 大数据入门第二十一天——scala入门(一)并发编程Actor
注:我们现在学的Scala Actor是scala 2.10.x版本及以前版本的Actor. Scala在2.11.x版本中将Akka加入其中,作为其默认的Actor,老版本的Actor已经废弃 一. ...
- 大数据入门第二十天——scala入门(二)scala基础01
一.基础语法 1.变量类型 // 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型.在scala是可以对数字等基础类型调用方法的. 2.变量声明——能用val的尽量使用val! ...
- 大数据入门第二十天——scala入门(二)scala基础02
一. 类.对象.继承.特质 1.类 Scala的类与Java.C++的类比起来更简洁 定义: package com.jiangbei //在Scala中,类并不用声明为public. //Scala ...
- 大数据入门第十九天——推荐系统与mahout(一)入门与概述
一.推荐系统概述 为了解决信息过载和用户无明确需求的问题,找到用户感兴趣的物品,才有了个性化推荐系统.其实,解决信息过载的问题,代表性的解决方案是分类目录和搜索引擎,如hao123,电商首页的分类目录 ...
- 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装
一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...
随机推荐
- JS---函数名和变量名重名
继续作用域的问题,今天上午看了一会,下午看又看到了一个类型的题,函数名和变量名相同的问题.之前还不会觉得函数名和变量名重名了会有什么冲突.也是没有去测试过..懒了.直接贴代码: 运行之后大家猜测结果是 ...
- Echarts图表常用功能配置,Demo示例
先看下效果图: 就如上图所示,都是些常用的基本配置. Legend分页,X轴设置,Y轴设置,底部缩放条设置, 数值显示样式设置,工具箱设置,自定义工具按钮, 绑定点击事件等等.这些配置代码中都做了简单 ...
- 七夕——来自google的一点轻松
今天google在其hk主页推出了七夕主题的小游戏 先看看这个logo: 一共三轮 我的记录是7分21秒,还真是不容易
- springcloud 入门 2 (Enreka的服务和注册)
spring cloud eureka: eureka 用以服务发现.服务注册,比较流行的有consul(后面再介绍) eureka介绍: eureka为netflix开源软件,分为三个部分: eur ...
- 用 React 整合 LogEntries JavaScript 库
[编者按]本文作者为 David Posin,主要介绍 React 与 LogEntries 间的相互操作.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 众所周知,React.js已经被证 ...
- Leetcode题解之Valid Palindrome II
1.题目描述 2.问题分析 使用两个下标,检测下标对应的字符是否相等,若不相等,则考察子串. 3.代码 bool validPalindrome(string s) { , j = s.size()- ...
- Python脚本性能分析
来自:http://www.cnblogs.com/btchenguang/archive/2012/02/03/2337112.html def foo(): sum = 0 for i in ra ...
- Python邮件发送源码
-- coding:utf-8 -- i = 0 while i < 10: #发送十次 import smtplib from email.mime.text import MIMEText ...
- Use Jupyter notebook on Fedora 28
生产环境使用 Fedora 28, 并且需要搭建一个 Jupyter 的notebook 方便使用,所搭建的Jupyter 支持单人远程 密码访问 1. 安装 安装 Jupyter , 出错 [roo ...
- 大数据开发实战:HDFS和MapReduce优缺点分析
一. HDFS和MapReduce优缺点 1.HDFS的优势 HDFS的英文全称是 Hadoop Distributed File System,即Hadoop分布式文件系统,它是Hadoop的核心子 ...