Sqoop安装,将Mysql数据导入HDFS,Hive

6 篇文章 0 订阅
3 篇文章 0 订阅

sqoop安装

sqoop安装:安装在一台节点上就可以了。
我下的Sqoop版本是:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
1. 解压: tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ~/software/sqoop
2. 添加sqoop的环境变量: sudo gedit /etc/profile

 export SQOOP_HOME=/home/hadoop/software/sqoop
 export PATH="$PATH:$SQOOP_HOME/bin/:"

使其环境变量生效: source /etc/profile
3 修改sqoop-env.sh 文件
进入到 conf 文件夹,找到 sqoop-env-template.sh,修改其名称为 sqoop-env.sh

 cd sqoop/conf/
 mv sqoop-env-template.sh sqoop-env.sh

修改: vi sqoop-env.sh

export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop

当然里面还有HBASE_HOME、HIVE_HOME、ZOOCFGDIR的目录可以填写
4. 将 mysql 驱动包到 sqoop/lib 目录下

 cp  mysql-connector-java-5.1.46-bin.jar  sqoop/lib

5 验证安装是否成功

sqoop version

Sqoop的基础应用

export : 将 HDFS 目录文件传给一个数据库
import : 将 数据库中的一个表格传给 HDFS

1.  列出MySQL数据有哪些数据库
sqoop list-databases \
--connect jdbc:mysql://Master:3306/ \
--username hadoop \
--password 000000fzx
2   列出MySQL中的某个数据库有哪些数据表
sqoop list-tables --connect jdbc:mysql://Master:3306/mysql --username hadoop --password 000000fzx
3   创建一张跟mysql中的help_keyword表一样的hive表htable: create-hive-table
sqoop create-hive-table \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop  \
--password 000000fzx \
--table help_keyword  \
--hive-table htable
4   将mysql库中的help_keyword表中的数据导入到HDFS上
sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop  \
--password 000000fzx \
--table help_keyword  \
-m 1

-m : 指定Map数量
导入后的表格在HDFS中的/user/hadoop/help_keyword目录中

hadoop fs -cat /user/hadoop/help_keyword/part-m-00000

导入时,指定分隔符, 导入路径:

--fields-terminated-by '\t'
--target-dir  /user/hadoop11/my_help_keyword1
5   将mysql库中的help_keyword表中的数据导入到HDFS上,并查询

增加where条件, 注意:条件必须用引号引起来

sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop  \
--password 000000fzx  \
--table help_keyword \
--target-dir /sqoop/hadoop_1/out_1 \
--where "name='STRING'"  \
-m 1

  增加query语句, SQL查询语句

–split-by :    数据切片字段(int类型,m>1时必须指定)

sqoop import  \
--connect jdbc:mysql://Master:3306/mysql  \
--username hadoop   \
--password 000000fzx  \
--target-dir /sqoop/hadoop_1/out_2   \
--fields-terminated-by '\t'  \
--query 'SELECT help_keyword_id,name FROM help_keyword where $CONDITIONS and name="STRING"'  \
--split-by help_word  \
-m 1 

自定义SQL语句导出数据到HDFS的情况下:
1、引号问题,要么外层使用单引号,内层使用双引号, CONDITIONS C O N D I T I O N S 的 符号不用转义,
      要么外层使用双引号,那么内层使用单引号,然后 CONDITIONS C O N D I T I O N S 的 符号需要转义;
2、自定义的SQL语句中必须带有WHERE $CONDITIONS

6   将HDFS上的数据导出到数据库中
sqoop export \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop  \
--password 000000fzx \
--export-dir '/sqoop/hadoop_1/out_1/part-m-00000'  \
--table help_keyword \
--fields-terminated-by '\t'  \
 -m 1

把MySQL数据库中的表数据导入到Hive中

Sqoop 导入关系型数据到 hive 的过程是先导入到 hdfs,然后再 load 进入 hive

1 普通导入:数据存储在默认的default hive库中,表名就是对应的mysql的表名:
sqoop import  \
--connect jdbc:mysql://Master:3306/mysql  \
--username hadoop  \
--password 000000fzx  \
--table help_keyword  \
--hive-import  \
-m 1

第一步:导入mysql.help_keyword的数据到hdfs的默认路径
第二步:自动仿造mysql.help_keyword去创建一张hive表, 创建在默认的default库中
第三步:把临时目录中的数据导入到hive表中

2 指定行分隔符和列分隔符、hive-import、覆盖导入、自动创建hive表、表名、删除中间结果数据目录

保证Hive之前就有srt数据库

sqoop import  \
--connect jdbc:mysql://Master:3306/mysql  \
--username root  \
--password root  \
--table help_keyword  \
--fields-terminated-by "\t"  \
--lines-terminated-by "\n"  \
--hive-import  \
--hive-overwrite  \
--create-hive-table  \
--delete-target-dir \
--hive-database  srt \
--hive-table new_help_keyword

其中最后两个语句–hive-database srt       –hive-table new_help_keyword ,
可以写成一句:   –hive-table srt.new_help_keyword

3. mysql——> 增量导入——> Hive

增量数据导入分两种,一是基于递增列的增量数据导入(Append方式)。二是基于时间列的增量数据导入(LastModified方式)。

执行增量导入之前,先清空hive数据库中的help_keyword表中的数据:
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a WHERE clause), 用 delete.

sqoop import  \
--connect jdbc:mysql://Master:3306/mysql   \
--username hadoop   \
--password  000000fzx   \
--table help_keyword    \
--target-dir  /sqoop/hadoop_1/out_3    \
--incremental append  \
--check-column  help_keyword_id  \
--last-value  100   \
-m 1

–incremental append :     基于递增列的增量导入(将递增列值大于阈值的所有数据增量导入Hadoop)
–check-column :     递增列(int)
–last-value :     阈值(int)

把MySQL数据库中的表数据 ——> 导入到HBase

需要先创建Hbase里面的表,再执行导入的语句

sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--table help_keyword \
--hbase-table new_help_keyword \
--column-family person \
--hbase-row-key help_keyword_id

参考博客: https://www.cnblogs.com/qingyunzong/p/8807252.html
感谢这位大佬~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值