Sqoop的安装与使用详细教程
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>一、Sqoop的安装</li><ul class="second_class_ul"><li>1.1 下载上传安装包</li><li>1.2 修改配置文件</li><li>1.3 拷贝JDBC驱动</li></ul><li>二、Sqoop的导入导出</li><ul class="second_class_ul"><li>2.1 测试连接数据库</li><li>2.2 MySQL导入数据到HDFS</li><li>2.3 MySQL导入数据到Hive</li><li>2.4 MySQL导入数据到HBase</li><li>2.5 HDFS导出数据到MySQL</li></ul><li>三、Sqoop脚本打包</li><ul class="second_class_ul"></ul></ul></div><p>本文我们介绍一个非常好用的数据传输工具——Sqoop。Sqoop是一款开源的工具,主要用于在Hadoop与传统数据库间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。关注专栏《破茧成蝶——大数据篇》,查看更多相关的内容~</p><p class="maodian"></p><h2>一、Sqoop的安装</h2>
<p class="maodian"></p><h3>1.1 下载上传安装包</h3>
<p>1、首先下载安装包,点击此处进行下载。</p>
<p style="text-align: center"><img alt="" width="879" height="182" src="https://img.jbzj.com/file_images/article/202104/2021041211342392.png" /></p>
<p>2、将下载的安装包上传到集群中,解压到相关目录并重命名。</p>
<div class="jb51code">
<pre class="brush:sql;">
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C ../modules/
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop</pre>
</div>
<p style="text-align: center"><img alt="" width="580" height="72" src="https://img.jbzj.com/file_images/article/202104/2021041211342393.png" /></p>
<p class="maodian"></p><h3>1.2 修改配置文件</h3>
<p>1、首先重命名sqoop-env-template.sh文件</p>
<div class="jb51code">
<pre class="brush:bash;">
# mv sqoop-env-template.sh sqoop-env.sh</pre>
</div>
<p>2、在sqoop-env.sh中添加各组件的路径</p>
<div class="jb51code">
<pre class="brush:bash;">
export HADOOP_COMMON_HOME=/opt/modules/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/opt/modules/hadoop-2.7.2
export HIVE_HOME=/opt/modules/hive
export ZOOKEEPER_HOME=/opt/modules/zookeeper-3.4.10
export ZOOCFGDIR=/opt/modules/zookeeper-3.4.10
export HBASE_HOME=/opt/modules/hbase</pre>
</div>
<p class="maodian"></p><h3>1.3 拷贝JDBC驱动</h3>
<p>拷贝MySQL的驱动包到Sqoop的lib目录下:</p>
<div class="jb51code">
<pre class="brush:bash;">
# cp ./mysql-connector-java-5.1.47.jar /opt/modules/sqoop/lib/</pre>
</div>
<p>1.4 验证Sqoop是否安装成功</p>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop help</pre>
</div>
<p style="text-align: center"><img alt="" width="929" height="505" src="https://img.jbzj.com/file_images/article/202104/2021041211342494.jpg" /></p>
<p>出现上图的内容说明安装成功。</p>
<p class="maodian"></p><h2>二、Sqoop的导入导出</h2>
<p class="maodian"></p><h3>2.1 测试连接数据库</h3>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop list-databases --connect jdbc:mysql://master:3306/ --username root --password p@ssw0rd</pre>
</div>
<p style="text-align: center"><img alt="" width="1142" height="370" src="https://img.jbzj.com/file_images/article/202104/2021041211342495.jpg" /></p>
<p class="maodian"></p><h3>2.2 MySQL导入数据到HDFS</h3>
<p>1、首先在MySQL数据库(xzw)中新建一张people表,如下所示:</p>
<div class="jb51code">
<pre class="brush:sql;">
create table people(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));
insert into people(name, sex) values('xzw', 'Male');
insert into people(name, sex) values('fq', 'FeMale');</pre>
</div>
<p style="text-align: center"><img alt="" width="379" height="187" src="https://img.jbzj.com/file_images/article/202104/2021041211342496.png" /></p>
<p>2、全量导入</p>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop import \
--connect jdbc:mysql://master:3306/xzw \
--username root \
--password p@ssw0rd \
--table people \
--target-dir /user/sqoop/people \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by ","</pre>
</div>
<p>使用如下命令查看导入的结果:</p>
<p style="text-align: center"><img alt="" width="655" height="90" src="https://img.jbzj.com/file_images/article/202104/2021041211342497.png" /></p>
<p>3、查询导入</p>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop import \
--connect jdbc:mysql://master:3306/xzw \
--username root \
--password p@ssw0rd \
--target-dir /user/sqoop/people \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "," \
--query 'select name,sex from people where id <=1 and $CONDITIONS;'</pre>
</div>
<p>查看导入结果:</p>
<p style="text-align: center"><img alt="" width="622" height="69" src="https://img.jbzj.com/file_images/article/202104/2021041211342498.png" /></p>
<p>这里需要注意的是,如果query后使用的是双引号,则$CONDITIONS前必须加转义符\,防止shell识别为自己的变量。如果使用的是单引号,则不需要加。</p>
<p>4、导入指定列</p>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop import \
--connect jdbc:mysql://master:3306/xzw \
--username root \
--password p@ssw0rd \
--target-dir /user/sqoop/people \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "," \
--columns id,sex \
--table people</pre>
</div>
<p>查看结果:</p>
<p style="text-align: center"><img alt="" width="611" height="86" src="https://img.jbzj.com/file_images/article/202104/2021041211342499.png" /></p>
<p>这里需要注意的是,columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格。</p>
<p>5、使用sqoop关键字筛选查询导入数据</p>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop import \
--connect jdbc:mysql://master:3306/xzw \
--username root \
--password p@ssw0rd \
--target-dir /user/sqoop/people \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "," \
--table people \
--where "id=1"</pre>
</div>
<p>查看结果:</p>
<p style="text-align: center"><img alt="" width="646" height="72" src="https://img.jbzj.com/file_images/article/202104/20210412113424100.png" /></p>
<p class="maodian"></p><h3>2.3 MySQL导入数据到Hive</h3>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop import \
--connect jdbc:mysql://master:3306/xzw \
--username root \
--password p@ssw0rd \
--table people \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "," \
--hive-overwrite \
--hive-table hive_people</pre>
</div>
<p style="text-align: center"><img alt="" width="616" height="246" src="https://img.jbzj.com/file_images/article/202104/20210412113424101.png" /></p>
<p>该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库。这里需要注意的是,Hive中的表不需要提前创建,Sqoop会在导数据的过程中自动创建表。</p>
<p class="maodian"></p><h3>2.4 MySQL导入数据到HBase</h3>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop import \
--connect jdbc:mysql://master:3306/xzw \
--username root \
--password p@ssw0rd \
--table people \
--columns "id,name,sex" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_people" \
--num-mappers 1 \
--split-by id</pre>
</div>
<p>这里需要注意的是,需要提前将HBase表建好:</p>
<div class="jb51code">
<pre class="brush:sql;">
create 'hbase_people','info'</pre>
</div>
<p style="text-align: center"><img alt="" width="1032" height="272" src="https://img.jbzj.com/file_images/article/202104/20210412113424102.png" /></p>
<p class="maodian"></p><h3>2.5 HDFS导出数据到MySQL</h3>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop export \
--connect jdbc:mysql://master:3306/xzw \
--username root \
--password p@ssw0rd \
--table people \
--num-mappers 1 \
--export-dir /user/sqoop/people \
--input-fields-terminated-by ","</pre>
</div>
<p style="text-align: center"><img alt="" width="468" height="168" src="https://img.jbzj.com/file_images/article/202104/20210412113424103.png" /></p>
<p>这里需要注意的是,如果MySQL中不存在表,不会自动创建,简言之就是在执行导出之前需要在MySQL中创建好表。</p>
<p class="maodian"></p><h2>三、Sqoop脚本打包</h2>
<p>我们使用opt格式的文件打包Sqoop命令,然后执行,具体如下。</p>
<p>首先在Sqoop的安装目录新建目录opt,并编写脚本如下:</p>
<div class="jb51code">
<pre class="brush:bash;">
export
--connect
jdbc:mysql://master:3306/xzw
--username
root
--password
p@ssw0rd
--table
people
--num-mappers
1
--export-dir
/user/sqoop/people
--input-fields-terminated-by
","</pre>
</div>
<p style="text-align: center"><img alt="" width="860" height="386" src="https://img.jbzj.com/file_images/article/202104/20210412113425104.png" /></p>
<p>然后使用如下命令执行脚本:</p>
<div class="jb51code">
<pre class="brush:bash;">
bin/sqoop --options-file opt/HDFSToMySQL.opt</pre>
</div>
<p>到此这篇关于Sqoop的安装与使用详细教程的文章就介绍到这了,更多相关Sqoop安装与使用内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
<p>到此这篇关于Sqoop的安装与使用详细教程的文章就介绍到这了,更多相关Sqoop安装与使用内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>解决sqoop从postgresql拉数据,报错TCP/IP连接的问题</li><li>sqoop如何指定pg库的模式(方法详解)</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]