irpas技术客

sqoop导入数据_筝湘湘_sqoop导入数据

未知 7903

文章目录 1. Sqoop简介2. Sqoop原理3. Sqoop的简单实用案例3.1 导入数据3.1.1 RDBMS 到 HDFS3.1.1.1 Mysql准备数据3.1.1.2 全部导入HDFS3.1.1.3 查询导入HDFS(用的多)3.1.1.4 导入指定列3.1.1.5 Sqoop关键字筛选查询导入HDFS 3.1.2 导入数据到Hive3.1.3 导入数据到HBase3.1.4 死锁问题 程序媛叽叽歪歪

1. Sqoop简介 Sqoop:是一款开源的工具,其实就是 SQL to Hadoop,主要用于在Hadoop(Hive) 与传统的数据库(MySQL,postgresql...)之间进行数据的传递,实现关系型数据库与HDFS数据的转换。 sqoop原先是Hadoop的一个组件。 sqoop1与sqoop2是两个版本,推荐使用一版本,因为2版本仅仅是测试,不投入生产环境中。 2. Sqoop原理 将导入或者导出命令翻译成MapReduce程序来实现。 在翻译出来的MapReduce中,主要是对inputformat 以及 outputformat 进行定制。 3. Sqoop的简单实用案例 3.1 导入数据 在 sqoop中,导入是指:从非大数据集群(RDBMS) 向大数据集群(HDFS,HIVE,HBASE)中传输数据 与参数位置没有关系 使用关键字 import 3.1.1 RDBMS 到 HDFS 3.1.1.1 Mysql准备数据 (1)开启MySQL服务,登录mysql,在mysql准备数据, sudo systemctl start mysqld

(2)创建数据库company create database company; show databases;

(3)创建数据表staff use company ; //使用数据库company create table company.staff(id int(4) primary key not null auto_increment,name varchar(255),sex varchar(255)); //创建表staff show tables; //查看company数据库中的全部表

(4) 向数据表是staff插入数据 insert into staff(name,sex) values('Thomas','Male'); insert into staff(name,sex) values('Mary','Female'); SELECT *FROM staff; //查看数据表staff

3.1.1.2 全部导入HDFS 先测试JDBC连接是否成功 ------------------------ bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password xxxxx (1)执行import命令 bin/sqoop import \ > --connect jdbc:mysql://hadoop102:3306/company \ > --username root \ > --password xxxxxx \ > --table staff \ > --target-dir /user/company \ > --delete-target-dir \ > --num-mappers 1 \ > --fields-terminated-by "\t"

遇到错误:NameNode处于safeMode安全模式

解决方法: 退出安全模式 hadoop dfsadmin -safemode leave 重新执行sqoop import 操作

提交到ResourceManager,需要等待片刻

(2) Web端口查看 进入NameNode 点击Utilities ->点击Browse the file system 搜索 文件夹/user/company 点击part-m-000000 点击download 可以看到我们插入在staff中的两条数据 说明导入数据成功啦!!!!!!!!!!!!!!

3.1.1.3 查询导入HDFS(用的多) 查询导入指定表中数据 select 语句,where过滤条件中必须加上$CONDITIONS 因为正常业务中,有多个map读取数据,数据是有序导入HDFS,$CONDITIONS用来传递参数,保证写入HDFS的数据顺序和Mysql中顺序一致。 (1) 执行sqoop import命令 ----------------------------------------- //第一种 bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password xxxxxx \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select name,sex from staff where id <=1 and $CONDITIONS;' ----------------------------------------- 第二种 bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password xxxxxx \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select name,sex from staff where id <=1 and $CONDITIONS;' -------------------------------------------------------------------------- 两种效果一致,区别在于,如果select语句使用双引号,则必须在$CONDITIONS前面加上 斜杠转移符,防止shell识别为自己的变量,否则执行的时候依旧会报错提示需要加$CONDITIONS。

(2) Web端查看结果,完美!!!!!!!!!!!!

3.1.1.4 导入指定列 (1) 执行import 命令 bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password XXXxxxx \ --columns id,sex \ --table staff \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" ------------------------------------------------ --columns id,sex \ 是指定id和性别这两列 上面这些都是参数,位置是可以调整的,尽量把mysql参数放在一起,HDFS参数放在一起

(2) Web端查看结果

3.1.1.5 Sqoop关键字筛选查询导入HDFS (1) 执行import命令 ---------------------------------------------------------------- bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 666666 \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --table staff \ --where "id=1" ---------------------------------------------- where关键字查询还可以加上--columns id,sex 指定列 bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password xxxxxx \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --table staff \ --columns id,sex \ --where "id=1" 输出的是id为1的那条记录的id列以及性别列,没有name姓名列。

(2) Web端查看结果

3.1.2 导入数据到Hive (1)执行import命令 ------------------------------------------- bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password xxxxxx \ --table staff \ --num-mappers 1 \ --hive-import \ --fields-terminated-by "\t" \ --hive-overwrite \ --hive-table staff_hive -------------------------------------------- 当前hive没有这张表staff_hive 操作分为两步 一是把数据导入到HDFS,默认的临时目录是/user/atguigu/表名(因为我的HDFS是在atguigu用户) 二是从HDFS迁移到Hive hive有自己的import

出现错误: ERROR tool.BaseSqoopTool: Error parsing arguments for import:是因为有个空格没有出现,改正就好了,重新执行

出现错误: 解决:

(2)进入NameNode查看atguihu中有任务在执行 当执行结束后就消失了 证明sqoop导入数据到Hive中确实是分为两步,先导入到HDFS中在迁移到Hive中。要等很久,速度比较慢 Hive中查看数据表

里面有数据导入到了HDFS

开始导入数据到hive

出现错误: ERROR tool.ImportTool: Import failed: java.io.IOException: Hive exited with status 64 libthrift jar 包不兼容 解决办法: 将hive lib文件夹中的libthrift-0.9.2.jar 拷贝到sqoop的lib文件夹中 注意再次执行任务,需先把HDFS中已经存在的默认路径文件/user/atguigu/表名 删除 ------------------------ sudo cp /opt/module/hive/lib/libthrift-0.9.3.jar /opt/module/sqoop/lib/ hadoop fs -rm -r /user/atguigu

3.1.3 导入数据到HBase (1) 执行import命令 ---------------------------------------------- bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 666666 \ --table staff \ --columns "id,name,sex" \ --column-family "info" \ --hbase-create-table \ --hbase-row-key "id" \ --hbase-table "hbase_staff" \ --num-mappers 1 \ --split-by id --------------------------------------- 需要注意的是: 由于版本兼容问题,hbase无法自动创建表hbase_staff 需要我们手动在hbase中创建这个表,再执行import命令 ---------------------------- create 'hbase_staff','info'

(2) 进入Hbase查看表是否导入 scan 'hbase_staff' 3.1.4 死锁问题 kernel:BUG: soft lockup - CPU#1 stuck for 22s! [khugepaged:298]

查看了一些网友的经验,这是软死锁,系统会自动重启,影响还是挺大的,虽然我的进程还是完成了,不过是因为它比较小 解决办法: echo 30 > /proc/sys/kernel/watchdog_thresh sysctl -w kernel.watchdog_thresh=30 vi /etc/sysctl.conf kernel.watchdog_thresh=30

程序媛叽叽歪歪 呜呜呜,导入hive出现错误,还没有解决好,解决好再补充一下啦!写博客的目的其实就是在做笔记啦,方便拿出来看看背背 后面也不用sqoop,真的太慢了,超级超级慢,等的人向敲桌子,嘿嘿,回见!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #sqoop导入数据 #文章目录1 #Sqoop简介2 #Sqoop原理3 #Sqoop的简单实用案例31 #导入数据311 #RDBMS #