sqoop安装:安装在一台节点上就可以了。
我下的Sqoop版本是:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
1. 解压: tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ~/software/sqoop
2. 添加sqoop的环境变量: sudo gedit /etc/profile
export SQOOP_HOME=/home/hadoop/software/sqoop
export PATH="$PATH:$SQOOP_HOME/bin/:"
使其环境变量生效: source /etc/profile
3 修改sqoop-env.sh 文件
进入到 conf 文件夹,找到 sqoop-env-template.sh,修改其名称为 sqoop-env.sh
cd sqoop/conf/
mv sqoop-env-template.sh sqoop-env.sh
修改: vi sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
当然里面还有HBASE_HOME、HIVE_HOME、ZOOCFGDIR的目录可以填写
4. 将 mysql 驱动包到 sqoop/lib 目录下
cp mysql-connector-java-5.1.46-bin.jar sqoop/lib
5 验证安装是否成功
sqoop version
export : 将 HDFS 目录文件传给一个数据库
import : 将 数据库中的一个表格传给 HDFS
sqoop list-databases \
--connect jdbc:mysql://Master:3306/ \
--username hadoop \
--password 000000fzx
sqoop list-tables --connect jdbc:mysql://Master:3306/mysql --username hadoop --password 000000fzx
sqoop create-hive-table \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--table help_keyword \
--hive-table htable
sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--table help_keyword \
-m 1
-m : 指定Map数量
导入后的表格在HDFS中的/user/hadoop/help_keyword目录中
hadoop fs -cat /user/hadoop/help_keyword/part-m-00000
导入时,指定分隔符, 导入路径:
--fields-terminated-by '\t'
--target-dir /user/hadoop11/my_help_keyword1
增加where条件, 注意:条件必须用引号引起来
sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--table help_keyword \
--target-dir /sqoop/hadoop_1/out_1 \
--where "name='STRING'" \
-m 1
增加query语句, SQL查询语句
–split-by : 数据切片字段(int类型,m>1时必须指定)
sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--target-dir /sqoop/hadoop_1/out_2 \
--fields-terminated-by '\t' \
--query 'SELECT help_keyword_id,name FROM help_keyword where $CONDITIONS and name="STRING"' \
--split-by help_word \
-m 1
自定义SQL语句导出数据到HDFS的情况下:
1、引号问题,要么外层使用单引号,内层使用双引号, CONDITIONS的 C O N D I T I O N S 的 符号不用转义,
要么外层使用双引号,那么内层使用单引号,然后 CONDITIONS的 C O N D I T I O N S 的 符号需要转义;
2、自定义的SQL语句中必须带有WHERE $CONDITIONS
sqoop export \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--export-dir '/sqoop/hadoop_1/out_1/part-m-00000' \
--table help_keyword \
--fields-terminated-by '\t' \
-m 1
Sqoop 导入关系型数据到 hive 的过程是先导入到 hdfs,然后再 load 进入 hive
sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--table help_keyword \
--hive-import \
-m 1
第一步:导入mysql.help_keyword的数据到hdfs的默认路径
第二步:自动仿造mysql.help_keyword去创建一张hive表, 创建在默认的default库中
第三步:把临时目录中的数据导入到hive表中
保证Hive之前就有srt数据库
sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username root \
--password root \
--table help_keyword \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
--hive-import \
--hive-overwrite \
--create-hive-table \
--delete-target-dir \
--hive-database srt \
--hive-table new_help_keyword
其中最后两个语句–hive-database srt –hive-table new_help_keyword ,
可以写成一句: –hive-table srt.new_help_keyword
增量数据导入分两种,一是基于递增列的增量数据导入(Append方式)。二是基于时间列的增量数据导入(LastModified方式)。
执行增量导入之前,先清空hive数据库中的help_keyword表中的数据:
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a WHERE clause), 用 delete.
sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--table help_keyword \
--target-dir /sqoop/hadoop_1/out_3 \
--incremental append \
--check-column help_keyword_id \
--last-value 100 \
-m 1
–incremental append : 基于递增列的增量导入(将递增列值大于阈值的所有数据增量导入Hadoop)
–check-column : 递增列(int)
–last-value : 阈值(int)
需要先创建Hbase里面的表,再执行导入的语句
sqoop import \
--connect jdbc:mysql://Master:3306/mysql \
--username hadoop \
--password 000000fzx \
--table help_keyword \
--hbase-table new_help_keyword \
--column-family person \
--hbase-row-key help_keyword_id
参考博客: https://www.cnblogs.com/qingyunzong/p/8807252.html
感谢这位大佬~