# sqoop安装

1. 常规步骤(安装在一台节点上即可)

由于sqoop2配置相对比较麻烦,此次使用的是sqoop1进行演示。

上传sqoop-1.4.4.bin_hadoop-2.0.4-alpha.tar.gz文件至/hadoop目录下,解压并重命名为sqoop-1.4.4,配置/etc/profile文件并source刷新。

2. 配置驱动

将数据库连接驱动 mysql-connector-5.1.8.jar 拷贝到$SQOOP_HOME/lib里。

3. 一些解释

注意:如果是集群环境,则sqoop可以安装在任意一台节点上就可以。如果此节点已经指定了RM和NN的位置,则可以直接运行sqoop。

  • ## Name Node在文件 core-site.xml 和 hdfs-site.xml 中指定。
  • ## Resource Manage在文件 yarn-site.xml 中指定。

子节点为什么知道在上述三个文件中寻找NM和NN的位置?这是因为sqoop会读取 $HADOOP_HOME 的值。

  • sqoop也是将自己的指令转化成MR执行,不过它只有Mapper阶段。
  • sqoop执行结果产生的是part-m-00000文件,这是因为只有map阶段,生成的是map阶段的结果文件。
  • sqoop转换结果文件默认是以 ”,“ 作为分隔符。

# 导入到hdfs

sqoop import --connect jdbc:mysql://192.168.8.100:3306/test --username root --password 123  --table goods --target-dir '/sqoop' --fields-terminated-by '\t' –m 1

sqoop //sqoop命令
Import //表示导入
--connect jdbc:mysql://192.168.8.100:3306/test //告诉jdbc,连接MySQL的url,即test数据库。3306是MySQL默认监听端口,192.168.8.100是MySQL的IP --username root //连接root的用户名 --password 123 //连接root的密码 --table goods //从goods导出的表名称 --fields-terminated-by '\t' //指定输出文件中的行的字段分隔符 --null-string '**' //NULL值转化成”**”保存,默认是NULL -m 1 //使用1个map作业,则产生一个结果文件。默认是4个 --append //追加数据到hdfs源文件中 --target-dir '/sqoop' //结果保存在 “/sqoop/” 文件夹中,直接在文件夹下输出结果文件。如果不使用该选项,意味着复制到默认目录“/user/root/”文件夹下,并产生“/test/goods/”目录,并在此目录之下输出结果文件prat-m-00000

# 使用案例

导入指定的列 --column

sqoop import --connect jdbc:mysql://192.168.8.100:3306/test --username root --password 123  --table goods --columns 'id, account, income, expenses'

指定输出路径、指定数据分隔符

sqoop import --connect jdbc:mysql://192.168.8.100:3306/test --username root --password 123  --table goods --target-dir '/sqoop' --fields-terminated-by '\t'

指定Map数量 -m

sqoop import --connect jdbc:mysql://192.168.8.100:3306/test --username root --password 123  --table goods --target-dir '/sqoop' --fields-terminated-by '\t' -m 2

增加where条件, (条件必须用引号引起来)

sqoop import --connect jdbc:mysql://192.168.8.100:3306/test --username root --password 123  --table goods --where 'id>3' --target-dir '/sqoop' 

增加query语句, (使用 \ 将语句换行)

sqoop import --connect jdbc:mysql://192.168.8.100:3306/test --username root --password 123 \
--query 'SELECT * FROM goods where id > 2 AND $CONDITIONS' --split-by goods.id --target-dir '/sqoop'

注意:如果使用 --query 这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上,而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在 $CONDITIONS 前加上 \(转义符)  即  \$CONDITIONS。如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上【表示不同的mapper任务,分割整体数据的依据,此处为good.id来分割数据】

#导出数据(不要忘记指定分隔符)

sqoop export --connect jdbc:mysql://192.168.8.101:3306/test --username root --password  --export-dir '/td3' --table td_bak -m  --fields-terminated-by ','
  • 注意:sqoop导出到mysql,源文件是文件夹,而不是文件。
  • 还有一点就是导出到mysql,这个指令可以重复执行,即,mysql数据重复增加。
  • 相对而言,导入hdfs操作则只能执行一次,不然会报错。

  • 如果在导入hdfs指令后面加上 –append 则会在同一目录下生成一相同文件,不能满足只导出增量部分的要求

# 增量导入

sqoop import -connect jdbc:mysql://192.168.8.100:3306/test --username root --password  --table goods -m --fields-terminated-by '\t' --target-dir '/sqoop' --append --check-column 'goods_id' --incremental append --last-value 

说明:
--append //表示追加写入hdfs。没有此命令,则报目录已存在的错误 --check-column ‘goods_id’ //表示判断依据为”goods_id”这一列 --incremental append //如果有增量则追加写入操作 --last-value 32 //判断依据为上一次的”goods_id”的值 32

如果mysql中的数据确实有增加,使用上述命令则会产生一个新的文件,文件中保存增加的数据。

# sqoop job

sqoop job --create myjob -- import -connect jdbc:mysql://192.168.8.100:3306/test --username root --password 123 --table goods -m 1 --fields-terminated-by '\t' --target-dir '/sqoop' --append --check-column 'goods_id' --incremental append --last-value 32

  • 使用命令sqoop job --list查看可使用的sqoop job.
  • 使用命令 sqoop job --exec myjob来执行job脚本

此处要输入一次mysql用户root的密码,然后就可以自动执行job脚本了。

现在配置如何不用输入密码,直接执行job脚本:

在”/hadoop/sqoop-1.4.4/conf/sqoop-site-xml”文件中,打开是否允许保存密码的属性,即去掉圈中的部分。

这样还是不可以自动执行的,必须得先把原有的job删掉,然后重新创建一个新的job,才能满足需求,然后就可以自动执行了。

# Sqoop 事务

sqoop导入导出的事务是以Mapper任务为单位。启动了4个Mapper任务,则就表示有4个事务。

# 导入到Hbase

sqoop import --connect jdbc:mysql://mysqlserver_IP/databaseName –table datatable --hbase-create-table --hbase-table hbase_tablename --column-family col_fam_name --hbase-row-key key_col_name

说明:
--hbase-create-table //导出到hbase上,如果没有目标表,则创建新表 --hbase-table hbase_tablename //指出要保存到hbase上的表名字 --column-family col_fam_name //col_fam_name是除rowkey之外的所有列的列族名 --hbase-row-key key_col_name //key_col_name指出datatable中哪一列作为hbase新表的Row Key

# 从Oracle导入数据

  1. sqoop从oracle导入,需要有ojdbc6.jar,放在$SQOOP_HOME/lib里,不用添加到classpath里,因为sqoop会自己遍历lib文件夹并添加里面的所有jar包
  2. --connect与mysql的不一样,如下(shell脚本中的主要部分)
  3. #Oracle的连接字符串,其中包含了Oracle的地址,SID,和端口:CONNECTURL=jdbc:oracle:thin:@172.7.10.16:1521:orcl
  4. #使用的用户名:ORACLENAME=scott
  5. #使用的密码:ORACLEPASSWORD=wang123456
  6. #需要从Oracle中导入的表名:oralceTableName=test
  7. #需要从Oracle中导入的表中的字段名:columns=ID,STATE
  8. #将Oracle中的数据导入到HDFS后的存放路径:hdfsPath=/tmp/
  9. #完整的命令:
sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD --m 1 --table $oralceTableName –columns $columns --hbase-create-table --hbase-table or1 --hbase-row-key STATE --column-family or1

Sqoop相关的更多相关文章

  1. hbase-hive整合及sqoop的安装配置使用

    从hbase中拿数据,然后整合到hbase中 上hive官网  -- 点击wiki--> hive hbase integation(整合) --> 注意整合的时候两个软件的版本要能进行整 ...

  2. Sqoop 组件安装与配置

    下载和解压 Sqoop Sqoop相关发行版本可以通过官网 https://mirror-hk.koddos.net/apache/sqoop/ 来获取 安装 Sqoop组件需要与 Hadoop环境适 ...

  3. 30种IT技能让你年薪过10万美元!

    科技行业的高薪岗位向来不少,但在不断变化的职场中,热门技能却随时在变:今天的热门技术,明天可能就会过时.美国求职网站 Dice.com 最近发布了 2015 年薪酬报告,通过对 23,470 位 IT ...

  4. Sqoop-1.4.5用户手册

    本文以Sqoop User Guide (v1.4.5)为主,对Sqoop-1.4.5的用户手册进行翻译,同时会结合一些实际操作中的注意事项一并写入.由于原文档很长,本文首先会以实际使用到的部分为主, ...

  5. Spark大数据针对性问题。

    1.海量日志数据,提取出某日访问百度次数最多的那个IP. 解决方案:首先是将这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中.注意到IP是32位的,最多有个2^32个IP.同样可以采 ...

  6. Oozie4.2 安装部署、以及example测试

    编译: 使用的环境是:Hadoop2.6.0.Spark1.4.0.Hive0.13.1.Sqoop1.4.4 编译Oozie的命令:./mkdistro.sh -Phadoop-2 -Dhadoop ...

  7. 2016年度,这40项IT技能年薪轻松超过10万美元

    众所周知,科技行业聚集了大批高薪职位,但这同样也是一个快速变化的市场.今天的热门技能明天就有可能惨遭淘汰. 求职网站Dice.com最近发布了<2016薪酬调查>, 列举了年薪最高的各种科 ...

  8. BigDATA面试题

    Big Data 面试题总结 JAVA相关 1-1)List 与set 的区别? 老掉牙的问题了,还在这里老生常谈:List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复 ...

  9. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

随机推荐

  1. PHP array_merge() 函数

    <?php $a1=array("a"=>"red","b"=>"green"); $a2=array ...

  2. node 同异步处理

    同步:序列执行,需等待 异步:非序列执行,无需等待 node同步处理:读取->输出->完毕(队列式执行) node异步处理:读取->完毕(回调输出)(后两步同时进行,谁先到谁先输出) ...

  3. Hadoop伪分布安装详解(五)

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  4. MySQL数据库(二)

    事务 数据库开启事务命令 #start transaction 开启事务 #Rollback 回滚事务,即撤销指定的sql语句(只能回退insert delete update语句),回滚到上一次co ...

  5. MapReduce辅助排序

    需求:订单数据 求出每个订单中最贵的商品? 订单id正序,成交金额倒序. 结果文件三个,每个结果文件只要一条数据. 1.Mapper类 package com.css.order.mr; import ...

  6. MapReduce分析流量汇总

    一.MapReduce编程规范 一.MapReduce编程规范 用户编写mr程序主要分为三个部分:Mapper,Reducer,Driver 1.Mapper阶段 (1)用户自定义Mapper类 要继 ...

  7. GraphicsMagick 1.3.25 Linux安装部署

    1.安装相关依赖包 yum install -y gcc libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-d ...

  8. Linux下的内核模块机制

    2017-06-20 Linux的内核模块机制允许开发者动态的向内核添加功能,我们常见的文件系统.驱动程序等都可以通过模块的方式添加到内核而无需对内核重新编译,这在很大程度上减少了操作的复杂度.模块机 ...

  9. print文档

    文档 def print(self, *args, sep=' ', end='\n', file=None): # known special case of print ""& ...

  10. 在setting中实现可拔插的插件功能实现

    1.setting配置信息 在配置文件中通过对插件进行注释来实现可拔插,例如在配置中将其注释,则在使用此功能不起作用,注释取消后则可正常使用 # 可拔插的插件(plugins) PLUGINS_DIC ...