sqoop的使用及Hive链接mysql bug
来源:互联网 发布:网络直播培训机构红人 编辑:程序博客网 时间:2024/05/21 15:02
sqoop操作
测试(列出数据库):
./sqoop list-databases \
--connect jdbc:mysql://192.168.138.123:3306/ \
--username root \
--password root
import:(RDBMS--->HDFS,HIVE,HBASE)
export:(HDFS,HIVE,HBASE--->RDBMS)
----------------------------------------------------------导入到hdfs
./sqoop import \
--connect jdbc:mysql://192.168.138.123:3306/db01 \
--username root \
--password root \
--table test \
--target-dir /sqoop/import/test \
--num-mappers 1 \
--lines-terminated-by '\t'
----------------------------------------------------------------
./sqoop import \
--connect jdbc:mysql://192.168.138.123:3306/db01 \
--username root \
--password root \
--table test \
--target-dir /sqoop/import/order1 \
--num-mappers 1 \
--fields-terminated-by '\t'
--columns id,age \
--where 'id>1'
----------------------------------------------------------------
--connect: 连接数据库的参数
--username: 使用的用户名
--password: 密码
--table: 表名
--target-dir: 导入到hdfs的目录
--num-mappers 1: 使用的mapper的个数
--fields-terminated-by: 指定列的分隔符(默认使用,分隔)
--columns 指定列
--where 指明where查询条件
--query 指定query查询语句
--------------------------------------------------------------------
举例:
./sqoop import \
--connect jdbc:mysql://192.168.138.123:3306/db01 \
--username root \
--password root \
--target-dir /sqoop/import/order \
--num-mappers 1 \
--fields-terminated-by '\t' \
--query 'select * from test where id > 1 and $CONDITIONS'
注意:
1.--query 不能和 table columns where合用
2.--query必须和$CONDITIONS一起使用
-----------------------------------------------------导入到hive表
1.建立一个空的hive表
create table db01.student_hive(
id int,
name string,
age string
)
row format delimited fields terminated by '\t';
2.导入hive表
--hive-import 指明导入到hive表
--hive-overwrite 如果hive表中已存在则覆盖
--hive-database db01 指明导入到hive哪个数据库
--hive-table stuhive 指明导入到hive的表名
./sqoop import \
--connect jdbc:mysql://192.168.138.123:3306/db01 \
--username root \
--password root \
--table test \
--num-mappers 1 \
--fields-terminated-by '\t' \
--hive-import \
--hive-overwrite \
--hive-database db01 \
--hive-table student_hive
注意:如果导出过程失败,需要到HDFS目录当前用户目录下将临时目录删除,
hdfs当前用户目录下不能存在表目录,可以另外指定--target-dir --delete-target-dir
-------------------------------------------------从hive导出到mysql
./sqoop export \
--connect jdbc:mysql://192.168.1.101:3306/sqoop \
--username root \
--password root \
--table student2 \
--num-mappers 1 \
--export-dir /user/hive/warehouse/db01.db/student_hive \
--input-fields-terminated-by "\t"
--export-dir: 从hdfs上哪个目录导出
--input-fields-terminated-by "\t" 要导出的文件字段是以什么进行分隔的
------------------------------------------------------
./sqoop export \
--connect jdbc:mysql://192.168.1.101:3306/sqoop \
--username root \
--password root \
--table student3 \
--num-mappers 1 \
--export-dir /nicole/sqoop/import/student \
--input-fields-terminated-by "\t"
---------------------------------------------------------参数 --options-file
作用是使用文件编辑sqoop的参数和命令,然后使用--options-file参数来执行。
# vi job1.opt
export
--connect
jdbc:mysql://192.168.1.101:3306/sqoop
--username
root
--password
root
--table
student4
--num-mappers
1
--export-dir
/nicole/sqoop/import/student
--input-fields-terminated-by
"\t"
执行语句:
./sqoop --options-file job1.opt
执行语句:./sqoop list-databases \
--connect jdbc:mysql://192.168.138.123:3306/ \
--username root \
--password root
可能出现的问题:
如下密码输入错误:
2、版本兼容问题:
ERROR manager.SqlManager: Error reading from database: java.sql.SQLException:
Streaming result set com.mysql.jdbc.RowDataDynamic@1ee07d1d is still active.
No statements may be issued when any streaming result sets are open and in use on a given connection.
Ensure that you have called .close() on any active streaming result sets before attempting more queries.
我是将hive和sqoop lib下的mysql connector都改为mysql-connector-java-5.1.34-bin.jar 解决的问题。
3、hdfs中文件已存在,换一个。
4、会话连接失败(ip地址或者主机名写错)
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
5、ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 88
将mysql中的表导入到hive中时:hive需要保持运行状态,
解决方法:多开一个terminal
6、Error: java.io.IOException: Can't export data, please check failed map task
这个问题 1、如果hive中的数据是由hdfs中导入的,其分隔符是'\t'。
2、如果是由hive执行mapreduce操作汇总的结果,默认的分隔符是 '\001'。
我的是通过:
create table logs_tmp as select
count(ip)pv,
count(case when url like ”%member.php% ” then url else null end) register,
count(distinct ip) ip from logs;
所以导出的时候需要用‘\001’。
./sqoop export --connect jdbc:mysql://192.168.138.123:3306/topiclogs --username root --password root --table logs --num-mappers 1 \
--export-dir /user/hive/warehouse/topic.db/logs_tmp \
--input-fields-terminated-by "\001";
- sqoop的使用及Hive链接mysql bug
- 使用sqoop导入导出mysql、hdfs、hive出现的问题
- 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟
- hive ,sqoop使用的jdbc驱动版本(mysql-connector-java-5.1.23-bin.jar)影响hive使用
- 使用sqoop实现hive与mysql数据库间数据迁移的时,发现如下错误提示
- 使用Sqoop将数据从Hive导入MySQL可能遇到的问题
- sqoop的安装及使用
- 使用sqoop将mysql中数据导入到hive中
- 使用sqoop做Mysql与Hive数据互倒操作
- 使用Sqoop将Hive表数据导入到mysql
- 使用sqoop将hive数据导入mysql实例
- 使用Sqoop从MySQL导入数据到Hive和HBase
- 使用Sqoop将Hive结果迁移至Mysql(四)
- 使用 sqoop从MySQL增量导出数据到hive
- mysql hive sqoop 分区,优化
- Sqoop MySQL 导入到Hive
- sqoop mysql 抽到hive
- sqoop 从 hive 导到mysql遇到的问题
- 图形数据库之Neo4j核心概念介绍(二)
- iOS开发之获取WIFI信号强度
- poj 1511 最短路数据加强版 dijkstra堆优化
- Hiho #1066 : 无间道之并查集 【map+并查集】
- Redis系列~数据类型(三)
- sqoop的使用及Hive链接mysql bug
- Codevs 1535 封锁阳光大学 dfs || bfs
- 网络编程之TCP----网络编程(linux----C)
- 如何利用github打造博客专属域名
- 深度学习公开课
- STM32第一个小项目(点亮LED)
- Ubuntu14.04 安装caffe
- Java 集合深入理解(15):AbstractMap
- Xposed框架之模块安装验证方法