Sqoop的概念及安装
hadoop生态圈中的一个迁移工具一个整合工具(hadoop和关系型数据库之间的数据迁移)
tar -zxvf /home/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local/
ok
修改环境变量
先改个名
vi /etc/profile
然后更新一下
看看sqoop里面的东西
将学习文档删掉吧
看看conf下的配置文件
先将绿色的名字 改个名
mv ./conf/sqoop-env-template.sh ./conf/sqoop-env.sh
编辑该文件
hadoop目录写上
hbase没学 先不写
hive写上
Zookeeper因为我们使用的ha高可用 也写上 没使用ha就不用
将jar包放到 lib下
cp /home/mysql-connector-java-5.1.6-bin.jar ./lib/
这样sqoop help 出现截图的下面的内容 就行
Sqoop的语句
1.创建一个数据库
1.sqoop list-databases --connect jdbc:mysql://hadoop01:3306;
第一次试探性连接 失败 原来是 jar包忘记加了 我明明记得加了 唉气
再加一遍
这样表明连接成功 不过没输入用户名和密码 所以读不出来所有数据库.
…
sqoop语句里 \ 反斜杠代表我的sqoop语句没写完下一行还有
2.加上用户密码再去连接 结果出错
sqoop list-databases --connect jdbc:mysql://hadoop01:3306 \
--username root --password root \
;
解决办法
这样去连接 没问题了 数据出来了
- -connect连接指定数据库
- –driver 连接数据库驱动
- -table 指定要读的表
- -m 用n个map tasks 去并行导入 说白了就是指定map个数
- –lines-terminated-by 字段用什么分隔
- –fields-terminated-by 行用什么分隔
- –null-string ‘\N’ --null-non-string ‘\N’
- 这个表示空字符串怎么处理 如果不加 空字符串会用小写null表示(null 表示空 NUll表示非正常的值)
- –target-dir HDFS destination dir hdfs的目标目录
1.import导入hdfs
sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 --fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/01;
读出来的汉字是乱码
因为我建数据库时编码规则使用latin1
所以在存入mysql表时 汉字就没存进去 现在我改一下fname fpath的字段的编码规则
这样我的汉字存入表中 再读一下试试
sqoop语句中
-m是为了将结果放到一个文件
不指定会生成多个文件 三条记录 生成 三个文件 太麻烦
这是视频截图 我就不演示了 不加-m会将三条记录分到三个文件
2.import指定列导入hdfs 使用–columns
–columns ‘fid,fname,fpath,owner’
sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'fid,fname,fpath,owner' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/03;
结果 缺失只有四列
3.import导入hive表
–create-hive-table --hive-import --hive-overwrite
–hive-table olqf.sql --delete-target-dir
提前开启hive服务
hive --service metastore
sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'fid,fname,fpath,owner' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--create-hive-table --hive-import --hive-overwrite \
--hive-table olqf.sql --delete-target-dir \
;
注意挺长时间
第一次运行出错
https://blog.csdn.net/LewyPhoenix/article/details/83115893
https://www.cnblogs.com/zll20153246/p/9345921.html
配置
然后更新一下文件
然后进入到hadoop的sbin目录下 运行命令 mr-jobhistory-daemon.sh start historyserver
第二次运行 成功
找到olqf下的sql 不有错
然后select 结果如下 ok
4.import指定where来导入
sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-table hfile -m 1 \
--columns 'fid,fname,fpath,owner' \
--where 'fid > 8' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/04 --delete-target-dir \
;
运行
结果没错
Sqoop使用query导入和export导出
5.import指定query来导入:
sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root -m 1 \
--query 'select fid,fname,fpath from hfile where fid > 8 and $CONDITIONS' \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/02 --delete-target-dir;
运行时出现这样的错误 以为是密码问题 结果上网一查 写错了 间隔
接着运行
ok 看结果
没有错
query替代了–table -columns -where
query 不能与这些同用
如果单写–where 或者 --columns 不会报错 但是不会用到这两个 只会使用query
注意
注意
query后跟的语句最好用单引号 双引号再使用变量可能出错 具体可看官网
6.import指定split-by来导入:
sqoop import -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root \
-m 2 -table hfile --split-by fid \
--fields-terminated-by '\t' --lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
--target-dir /sqo/05 --delete-target-dir;
split-by和-m搭配使用 -m后面的n 将结果根据fid平分为n个结果文件
这里分成了三个 具体我也没搞明白
请大神赐教!
可能是我没有设置什么东西?
先创建一个表接收数据
然后导出
sqoop export -connect jdbc:mysql://hadoop01:3306/ymp --driver com.mysql.jdbc.Driver \
-username root -password root -table hfile2 -m 1 \
--export-dir '/spo/02' \
--input-fields-terminated-by '\t' --input-lines-terminated-by '\n' \
--null-string '\\N' --null-non-string '\\N' \
;
–updata-mode 更新模式 有两种 只允许更新updataonly和允许插入allowinsert
–updata-key fid 将fid作为主键
第一次运行出错了 让我看日志 没看 检查了下数据 02 就3列 弄错了 换了个03 4列数据 没错了
ok 中文乱码因为我没设置字段的编码格式 不管了
ok 先到这里
期待我的暑假开始大数据之旅