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

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
保存退出

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/194324.html

(0)
上一篇 2021年11月16日
下一篇 2021年11月16日

相关推荐

发表回复

登录后才能评论