热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqoop基本概念安装测试(2017)

Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql)间进行数据的传递,可以将一个关系型数据库(例

Sqoop(发音:skup)
是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
进行增量导入是与效率有关的最受关注的问题,因为Sqoop专门是为大数据集设计的。Sqoop支持增量更新,将新记录添加到最近一次的导出的数据源上,或者指定上次修改的时间戳。
由于Sqoop将数据移入和移出关系型数据库的能力,其对于Hive—Hadoop生态系统里的著名的类SQL数据仓库—有专门的支持不足为奇。命令“create-hive-table”可以用来将数据表定义导入到Hive。

简单的说:sqoop是一款数据迁移工具
工作机制:就是通过内置一些数据导入导出的MR 程序,来为我们的数据迁移需求提供便利
sqoop :内置了一下导入导出数据的mr程序

官方网址:http://sqoop.apache.org/
下载:http://archive.apache.org/dist/sqoop/

sqoop是一个工具,只要在一台机器上安装就可以了,要在hadoop环境中运行。
首先在官网上下载sqoop,然后上传到linux中
解压
tar -zxvf sqoop(压缩包) -C /usr/local/apps
然后进入到sqoop中进行配置修改
cd conf/
修改sqoop-env-template.sh
首先,我们要修改sqoop-env-template.sh他的名称
mv sqoop-env-template.sh sqoop-env.sh
然后我们编辑他
vi sqoop-env.sh

首先配置这个,也就是配置hadoop的安装目录

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/apps/hadoop-2.6.5

接下来配置mapreduce HOME 也就是hadoop的安装路径
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/apps/hadoop-2.6.5

接下来配置hbase的安装目录
#set the path to where bin/hbase is available
export HBASE_HOME=/usr/local/apps/hbase-0.98.24-hadoop2

配置hive的安装目录
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/apps/apache-hive-2.1.1-bin

最后配置zookeeper的conf目录
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/usr/local/apps/zookeeper-3.4.6/conf

保存退出
然后我们在把sqoop配置到我们系统的环境变量里面
vi /etc/profile
在最下面写
export SQOOP_HOME=/usr/local/apps/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
在PATH里面添加
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SQOOP_HOME/bin
保存退出
别忘了让系统的环境变量生效一下
source /etc/profile

接下来我们来调用一下sqoop看能不能正常运行

注意:我们所有的安装包和安装目录最好都安装在root下面,在root下面新建一个安装目录apps
要不然系统会提示错误
Warning: /usr/local/apps/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.

sqoop中最常用的的两个命令
import Import a table from a database to HDFS (把外部的数据库中的表导入到hdfs中)
export Export an HDFS directory to a database table(把在hdfs中的表导出到sqoop中)‘

测试sqoop使用(会用就行)
第一类:数据库中的数据导入到hdfs中
首先要确保hdfs和yarn都启动起来
start-dfs.sh
start-yarn.sh
接下来我们运行sqoop的命令
sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail
他是放在了hdfs中
hadoop fs -ls /
hadoop fs -ls /user
hadoop fs -ls /user/root
hadoop fs -ls /user/root/bbs_detail
在这下面就是我们上传的数据 他会把我们的上传的数据基本平均分给几个map去上传默认是分给4个map task去做
在没有指点的情况下他会把我们上传的数据上传到/user/root/bbs_detail 是他自己自动生成的
默认情况下的分隔符为 ','

sqoop导入数据到hdfs的高级用法(注意写命令之间的空格)
第一
指定输出路径(--target-dir '/sqoop/td'),指点数据分隔符(--field-terminated-by '\t')
sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail --target-dir '/sqoop/td' --fields-terminated-by '\t'

    指点map task的数量 -m  (控制map task的数量可以控制内存小文件多了,效率就会低,如果表很大的话,我们也要把map task 数量变多)

sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail --target-dir '/sqoop/td' --fields-terminated-by '\001'-m 1
(在实际生成中,很好用逗号或者tab建做分隔符的,我们用(\001)不可打印的字符作为分隔符)

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

sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail --where 'id>30' --target-dir '/sqoop/td2' --fields-terminated-by '\001'-m 1

增加query语句(使用\将语句换行  '\'表示转义回车,因为sqoop语句是要写在一行里面的,太长了写不下,我们就用'\'来转义)

sqoop import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root \
--query 'SELECT id,order_id,product_id FROM bbs_detail where id > 30 AND $CONDITIONS'
--split-by bbs_detail.id --target-dir '/sqoop/td3'
注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS 这个参数必须加上(AND $CONDITIONS 表示上面写的select条件结尾了,这是固定的)
而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上\即\$CONDITIONS
如果设置map的数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上(--split-by bbs_detail.id 表示,告诉map task按照bbs_detail.id去划分)

我们一般都是把数据导入到hive(数据仓库)中讲SQL语法表达的数据运算逻辑转换为mapreduce程序在hadoop集群上对海量数据进行分析
从数据库中导入数据到hive中
sqoop import --hive-import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail

启动hive
命令为hive
show tables

也可以把数据库中的数据导入到hbase中
sqoop import --hbase-import --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --table bbs_detail

第二类:将hdfs上的数据导出到数据库中
sqoop export --connect jdbc:mysql://hadoop-server-00:3306/baba --username root --password root --export-dir '/sqoop/bak' --table td_bak --columns id,order_id --fields-terminated-by',' -m 2
(baba 表示:库 --export-dir '/sqoop/bak'表示:导出的数据现在在哪个目录 --table td_bak 表示:导入的目标的表是哪个表 导入的目标的这个表必须事先存在的(也就是在mysql中要先创建好td_bak这个表),也就是你要先创建好 --columns id,order_id 表示:把哪些字段导入到表中 --fields-terminated-by','表示:文件分隔符为逗号 map task为2)

由于命令太长,我们可以这样去使用命令:
sqoop export --connect jdbc:mysql://hadoop-server-00:3306/baba \
--username root --password root \
--export-dir '/sqoop/bak' --table td_bak \
--columns id,order_id --fields-terminated-by',' -m 2

注意:以上测试要配置mysql的远程连接
GRANT ALL PRIVILEGES ON mytest.* TO 'root'@'192.168.0.104' IDENTIFIED BY 'itcast' WITH GRANT OPTION;
FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON*.*TO'root'@'%'IDENTIFIED BY 'itcast' WITH GRANT OPTION;

设置Mysql远程访问
grant all privileges on . to 'root'@'%' identified by '123456' with grant option;

解决Mysql乱码问题
找一个配置文件,复制到/etc/目录,命名为my.cnf
(有时候没有my.cnf)
cp /usr/share/doc/mysql-server-5.1.73/my-medium.cnf /etc/my.cnf

vim my.cnf
在[client]和[mysqld]下面都添加上
default-character-set=utf8

最后按Esc输入
:wq
保存退出


推荐阅读
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
author-avatar
SIX道仙人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有