【导读:数据是二十一世纪的石油,蕴含巨大价值,这是·情报通·大数据技术系列第[29]篇文章,欢迎阅读和收藏】
1基本概念
Sqoop 使用流程主要包括三个部分:
Ø读取要导入数据的表结构,生成运行类,默认是 QueryResult ,打成 jar 包,然后提交给 Hadoop
Ø设置好 job ,主要是设置好各类参数
Ø这里就由 Hadoop 来执行 MapReduce 来执行 Import 命令
2术语解释
MapReduce 是一种分布式计算模型,是 Google 提出的,主要用于搜索领域,解决海量数据的计算问题。MR 有两个阶段组成:Map 和 Reduce ,用户只需实现 map() 和 reduce() 两个函数,即可实现分布式计算。
3详细说明
Sqoop使用流程如下:
3.1安装
我们使用的版本是 sqoop-1.4.3.bin__hadoop-1.0.0.tar.gz, 打算安装在 /usr/local 目录下。
首先就是解压缩 , 重命名为 sqoop, 然后在文件 /etc/profile 中设置环境变量 SQOOP_HOME 。
把 mysql 的 jdbc 驱动 mysql-connector-java-5.1.10.jar 复制到 sqoop 项目的 lib 目录下。
3.2重命名配置文件
在 $/conf 中执行命令
mv sqoop-env-template.sh sqoop-env.sh
在 conf 目录下 , 有两个文件 sqoop-site.xml 和 sqoop-site-template.xml 内容是完全一样的 , 不必在意 , 我们只关心 sqoop-site.xml 即可。
3.3改配置文件
内容如下
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/hadoop/
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/hadoop
#set the path to where bin/hbase is available
export HBASE_HOME=/usr/local/hbase
#Set the path to where bin/hive is available
export HIVE_HOME=/usr/local/hive
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/usr/local/zk
好了 , 搞定了 , 下面就可以运行了。
3.4把数据从 mysql 导入到 hdfs 中
在 mysql 中数据库 test 中有一张表是 aa, 表中的数据如下图所示
image
现在我们要做的是把 aa 中的数据导入到 hdfs 中 , 执行命令如下
sqoop ##sqoop 命令
import ## 表示导入
– connect jdbc:mysql://ip:3306/sqoop ## 告诉 jdbc, 连接 mysql 的 url
– username root ## 连接 mysql 的用户名
– password admin ## 连接 mysql 的密码
– table aa ## 从 mysql 导出的表名称
– fields-terminated-by ‘ t ’ ## 指定输出文件中的行的字段分隔符
-m 1 ## 复制过程使用 1 个 map 作业
以上的命令中后面的 ## 部分是注释 , 执行的时候需要删掉 ; 另外 , 命令的所有内容不能换行 , 只能一行才能执行。以下操作类似。
该命令执行结束后 , 观察 hdfs 的目录 /user/, 下面会有一个文件夹是 aa, 里面有个文件是 part-m-00000 。该文件的内容就是数据表 aa 的内容 , 字段之间是使用制表符分割的。
3.5把数据从 hdfs 导出到 mysql 中
把上一步导入到 hdfs 的数据导出到 mysql 中。我们已知该文件有两个字段 , 使用制表符分隔的。那么 , 我们现在数据库 test 中创建一个数据表叫做 bb, 里面有两个字段。然后执行下面的命令
sqoop
export ## 表示数据从 hive 复制到 mysql 中
– connect jdbc:mysql://192.168.1.113:3306/test
– username root
– password admin
– table bb ##mysql 中的表 , 即将被导入的表名称
– export-dir ‘ /user/root/aa/part-m-00000 ’ ##hive 中被导出的文件
– fields-terminated-by ‘ t ’ ##hive 中被导出的文件字段的分隔符
命令执行完后 , 再去观察表 bb 中的数据 , 是不是已经存在了 !
sqoop 就是一个数据转换工具 , 明白了吧 !
3.6把 mysql 中的数据到如到 hive 中 和把 hive 中的数据导入到 mysql 中
将关系型数据的表结构复制到 hive 中– > 仅仅复制表结构
sqoop create-hive-table – connect jdbc:mysql://192.168.1.4:3306/radius2 – table nyyd_user – username root – password wckj123456 – hive-table user
从关系数据库导入文件到 hive 中– > 复制表结构同时也复制数据
sqoop import – connect jdbc:mysql://192.168.1.4:3306/radius2 – username root – password wckj123456 – table nyyd_user – hive-import
3.7把 hive 中的数据到入到 mysql 中
sqoop export – connect jdbc:mysql://192.168.1.4:3306/radius2 – username root – password wckj123456 – table userbak – export-dir /user/hive/warehouse/nbyd_user – input-fields-terminated-by ‘ /001 ’
此错误的原因为 sqoop 解析文件的字段与 MySql 数据库的表的字段对应不上造成的。因此需要在执行的时候给 sqoop 增加参数 , 告诉 sqoop 文件的分隔符 , 使它能够正确的解析文件字段。
hive 默认的字段分隔符为’ /001 ′
sqoop:MySQL 导入 HBase 命令 :
sqoop import – connect jdbc:mysql://192.168.1.4:3306/radius2 – table nbyd_user – hbase-table nbyd_user – column-family user – hbase-row-key id – hbase-create-table – username root -password wckj123456
– connect jdbc:mysql://10.10.97.116:3306/rsearch 表示远程或者本地 Mysql 服务的 URI,3306 是 Mysql 默认监听端口 ,rsearch 是数据库 , 若是其他数据库 , 如 Oracle, 只需修改 URI 即可。
– table researchers 表示导出 rsearch 数据库的 researchers 表。
– hbase-table A 表示在 HBase 中建立表 A 。
– column-family person 表示在表 A 中建立列族 person 。
– hbase-row-key id 表示表 A 的 row-key 是 researchers 表的 id 字段。
– hbase-create-table 表示在 HBase 中建立表。
– username ‘ root ’ 表示使用用户 root 连接 Mysql
hbase 导入数据到 mysql 中
sqoop import – connect jdbc:mysql://10.10.97.116:3306/rsearch – table researchers – hbase-table A – column-family person – hbase-row-key id – hbase-create-table – username root -password wckj123456
领取专属 10元无门槛券
私享最新 技术干货