sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据
1.安装sqoop
请参考http://www.cnblogs.com/Richardzhu/p/3322635.html
增加了SQOOP_HOME相关环境变量:source ~/.bashrc /etq/profile
sqoop help检测sqoop是否安装好了,没有error表示安装好了
2.互导数据
mysql到hbase
sqoop import --connect jdbc:mysql://54.0.88.53:3306/chen --username root --password password --table hivetest --hbase-create-table --hbase-table test --column-family tbl_name --hbase-row-key tbl_type
--hbase-row-key可以指定datatable中哪一列作为hbase新表的rowkey,--column-family是除rowkey之外的所有列的列族名
mysql到hive
复制表结构
sqoop create-hive-table --connect jdbc:mysql://54.0.88.53:3306/chen --table hivetest --username root --password password --hive-table hivetest
导入数据(存在时不冲突,不存在时创建)
注:多次执行会增量的load数据到hive
sqoop import --connect jdbc:mysql://54.0.88.53:3306/chen --username root --password password --table hivetest --hive-import sqoop import --connect 'jdbc:sqlserver://192.168.1.80;username=test;password=test;database=ba' --table=monthly_list_cdr_ac --hive-import -m 14 --hive-table monthly_list_cdr_ac --split-by day_date --hive-partition-key dt --hive-partition-value 20130531
hive到mysql(和HDFS导出的方式相同)
注:在无primary key情况下多次执行会增量的load数据到mysql
sqoop export --connect jdbc:mysql://54.0.88.53:3306/chen --username root --password password --table detail3 --export-dir /apps/hive/warehouse/detail3 --input-fields-terminated-by '\|'
连接mysql并列出数据库中的表
sqoop list-tables --connect jdbc:mysql://localhost:3306/chen --username root --password password
sqoop import --connect jdbc:mysql://mysqlserver_IP/databaseName --table testtable -m 1
sqoop import --connect jdbc:mysql://10.233.45.104:3306/test --username root --password root --table testa --hive-import -m 1
其中, mysqlserver_IP是mysql服务器地址,databaseName是数据库名,testtable是表名,-m 1 指定只用一个map任务,默认是4个map,这是导成文件格式。
问题1:
INFO mapred.JobClient: Task Id : attempt_201108051007_0010_m_000000_0, Status : FAILED
java.util.NoSuchElementException
这种错误的原因是sqoop解析文件的字段与Mysql数据库的表的字段没有对应上。因此需要告诉sqoop文件的分隔符,使它能够正确的解析文件字段。hive默认的字段分隔符为'\001'。
其他数据导入导出
将结果集导入mysql
从本地导入:
load data local inpath '/home/labs/kang/award.txt' overwrite into table award;
sqoop导入:对应编码,记得删除当前文件夹产生的java文件
sqoop export --connect "jdbc:mysql://54.0.88.53:3306/mydb?useUnicode=true&characterEncoding=UTF-8" --username root --password password --table china --export-dir /apps/hive/warehouse/china --input-fields-terminated-by '|'
将hive中的表导入hbase中,首先要拼接Rowkey和value:
insert overwrite table detail3
select concat(cust_no, sa_tx_dt, tx_log_no),
concat( cust_no,"\|", sa_tx_dt,"\|", tx_log_no,"\|",sa_tx_tm,"\|", temp,"\|", cust_acct_no,"\|", sa_tx_crd_no,"\|", cr_tx_amt,"\|", acct_bal,"\|", f_fare,"\|", dr_cr_cod,"\|", tran_cd,"\|", tx_type,"\|", xt_op_trl,"\|", xt_op_trl2,"\|", bus_inst_no,"\|", canal,"\|", sa_op_acct_no_32,"\|", sa_op_cust_name,"\|", sa_op_bank_no,"\|", cr_cust_docag_stno,"\|", sa_otx_flg,"\|", sa_rmrk,"\|", other,"\|", tlr_no,"\|")
from detail2; drop table hbase_detail3;
CREATE EXTERNAL TABLE hbase_detail3(key string, values string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "values:val")
TBLPROPERTIES("hbase.table.name" = "detail3"); //建立外部表 insert overwrite table hbase_detail3 select * from detail3;
本地文件到hbase
hive -e "select * from hivetest" >> hive.csv hive.tsv
hadoop fs -put hive.tsv /user/hdfs/chen
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,info:tbl_type hbase_hive /user/hdfs/chen/hive.csv
hbase org.apache.hadoop.hbase.mapreduce.Driver import hbase_hive ./hive.csv
sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据的更多相关文章
- Android消息机制之实现两个不同线程之间相互传递数据相互调用
目的:实现两个不同线程之间相互传递数据相互调用方法. 线程一中定义mainHandler 并定义一个方法mainDecode 线程二中定义twoHandler 并定义一个方法twoEncode 实现当 ...
- 3 datax mysql和hive之间相互导入
mysql-->hive 0 参考文档: https://github.com/alibaba/D ...
- 2 datax mysql 和 mysql之间相互导入
插件文档: https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md 1,参照第1篇日记,安装好datax ...
- fragment之间相互传数据、共享数据
在 Fragment 之间共享数据 Activity 中的两个或更多 Fragment 需要相互通信是一种很常见的现象.想象一下拆分视图 (master-detail) Fragment 的常见情况, ...
- mysql数据库和oracle数据库之间互相导入备份
把从Oracle数据库导出的数据导入到MySql数据库中1. 使用默认的结束符号导入到MySql数据库中: LOAD DATA LOCAL INFILE 'd:/oracle.txt' IGNO ...
- 用Broadcast广播在activity之间、fragment之间、activity和fragment之间相互传数据
例如:A界面要收到B界面的更变信息 一.A界面注册广播 private static final String INTENT_BROADCAST = "android.intent.acti ...
- hive 创建表和导入数据实例
//创建数据库create datebase hive;//创建表create table t_emp(id int,name string,age int,dept_name string,like ...
- mysql 复制表结构 / 从结果中导入数据到新表
这只会复制结构: mysql> create table a like mysql1; Query OK, 0 rows affected (0.03 sec) mysql> desc a ...
- hive 从Excel中导入数据
拿到Excel表后将数据保留,其他的乱七八糟都删掉,然后另存为txt格式的文本,用nodepad++将文本转换为UTF-8编码,此处命名为cityprovince.txt 将cityprovince. ...
随机推荐
- Nagios学习实践系列
其实上篇Nagios学习实践系列--基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...
- 【转】shell学习笔记(四)——条件测试
1 test 条件检测 当我要检测系统上面某些文件或者是相关的属性时,利用 test 这个命令来工作真是好用得不得了, 举例来说,我要检查 /home/oracle/zy是否存在时,使用: test ...
- 【转】 linux下的awk程序执行
#!/bin/awk -f awk脚本开头使用这个命令,赋予这个文本文件以执行的权限.这样做之后,你就可以在命令行中用类似于下面这样的方式调用并执行这段awk程序了. BEGIN和END的大括号必须紧 ...
- HTML——filedset和legend标签
1.<filedset>定义围绕表单中元素的边框. 2.legend 元素表示作为 legend 元素的父元素的 fieldset 元素的其余内容的标题(caption). 使用案例: & ...
- lodash源码分析之baseFindIndex中的运算符优先级
我悟出权力本来就是不讲理的--蟑螂就是海米:也悟出要造反,内心必须强大到足以承受任何后果才行. --北岛<城门开> 本文为读 lodash 源码的第十篇,后续文章会更新到这个仓库中,欢迎 ...
- Python self学习
最开始学习Python时,用的IDE是IDEL,看的教程是<简明Python教程>,强烈推荐一下,讲得还是很不错的,适合新手学习 http://www.kuqin.com/abyteofp ...
- 本地工程引入maven工程的配置方式
一.准备 IDE: IntelliJ IDEA 2016.3.1 maven: 3.5.2 JDK: 1.8 操作系统: Window 7 二.配置 1. maven 3.5 下载地址:http:// ...
- CSS3动画详解(超详细)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 本文主要内容: 过渡:transition 2D 转换 trans ...
- 纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据
最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概 ...
- 二维码开源库ZBar-windows下编译和使用
源码 下载最新Zbar源码(http://zbar.sourceforge.net/),网站的WIKI是空白的,所以只能在源码包里找使用说明了,很遗憾Windows下怎么编译没说明,只是说明了Wind ...