Mysql

Mysql

Sqoop从mysql导入数据HDFS出错

回复

糖分5f1035014acd6 发起了问题 1 人关注 0 个回复 1941 次浏览 2020-07-16 19:12 来自相关话题

docker环境下搭建hadoop伪分布式集群时,Namenode如何连接宿主机mysql服务

回复

easlife 发起了问题 2 人关注 0 个回复 2028 次浏览 2018-12-28 21:54 来自相关话题

sqoop从mysql导入hdfs的时候,报错ERROR manager.SqlManager

Bangle 回复了问题 2 人关注 1 个回复 6565 次浏览 2018-06-03 13:14 来自相关话题

安装mysql遇到的问题

shakeshake 回复了问题 3 人关注 4 个回复 2118 次浏览 2018-04-09 16:34 来自相关话题

RROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

回复

周小泉 发起了问题 1 人关注 0 个回复 1102 次浏览 2018-02-21 21:55 来自相关话题

mysql初始化报错,求解答,试了一下午

小象 回复了问题 2 人关注 1 个回复 1402 次浏览 2018-01-31 14:12 来自相关话题

mysql安装过程中初始化后 生成秘钥报错

回复

奔跑的鱼 回复了问题 1 人关注 1 个回复 1541 次浏览 2018-01-30 14:12 来自相关话题

安装mysql执行chown -R mysql:mysql时出现:chown: "mysql:mysql" 后缺少操作数

奔跑的鱼 回复了问题 3 人关注 8 个回复 10851 次浏览 2018-01-30 13:37 来自相关话题

mysql安装卡了三四天了,求小象帮助啊

余念 回复了问题 4 人关注 3 个回复 1495 次浏览 2018-01-22 15:35 来自相关话题

mysql_并发操作

fish 回复了问题 2 人关注 1 个回复 1674 次浏览 2017-06-15 11:26 来自相关话题

mysql,commit

wangxiaolei 回复了问题 2 人关注 1 个回复 1625 次浏览 2017-06-05 15:15 来自相关话题

sqoop导出hive到mysql问题

wangxiaolei 回复了问题 5 人关注 6 个回复 10390 次浏览 2017-06-02 11:31 来自相关话题

使用pymysql连接mysql数据库,content下是新闻数据(中文)。打印之后乱码,怎么解决啊?

Robin_TY 回复了问题 3 人关注 2 个回复 2143 次浏览 2017-05-24 11:13 来自相关话题

请问哪里有MYSQL安装软件的资源?

fish 回复了问题 2 人关注 1 个回复 1445 次浏览 2017-05-22 10:51 来自相关话题

MySQL下载安装问题

回复

zhudejun_1985 回复了问题 1 人关注 1 个回复 1549 次浏览 2016-11-01 11:54 来自相关话题

安装mysql过程中报错,这个该怎么解决呢?网上查了方法但是没有成功,老师帮我看看

wangxiaolei 回复了问题 2 人关注 1 个回复 1520 次浏览 2016-09-20 12:09 来自相关话题

mysql grants

fish 回复了问题 3 人关注 2 个回复 1658 次浏览 2016-09-01 10:59 来自相关话题

mysql创建数据库,提示没有权限

wangxiaolei 回复了问题 2 人关注 1 个回复 2333 次浏览 2016-05-21 19:51 来自相关话题

mysql使用root用户给普通用户授权之后,还是登陆不上去,如图

wangxiaolei 回复了问题 2 人关注 2 个回复 2854 次浏览 2016-05-15 16:44 来自相关话题

Sqoop从mysql导入数据HDFS出错

回复

糖分5f1035014acd6 发起了问题 1 人关注 0 个回复 1941 次浏览 2020-07-16 19:12 来自相关话题

docker环境下搭建hadoop伪分布式集群时,Namenode如何连接宿主机mysql服务

回复

easlife 发起了问题 2 人关注 0 个回复 2028 次浏览 2018-12-28 21:54 来自相关话题

sqoop从mysql导入hdfs的时候,报错ERROR manager.SqlManager

回复

Bangle 回复了问题 2 人关注 1 个回复 6565 次浏览 2018-06-03 13:14 来自相关话题

安装mysql遇到的问题

回复

shakeshake 回复了问题 3 人关注 4 个回复 2118 次浏览 2018-04-09 16:34 来自相关话题

RROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

回复

周小泉 发起了问题 1 人关注 0 个回复 1102 次浏览 2018-02-21 21:55 来自相关话题

mysql初始化报错,求解答,试了一下午

回复

小象 回复了问题 2 人关注 1 个回复 1402 次浏览 2018-01-31 14:12 来自相关话题

mysql安装过程中初始化后 生成秘钥报错

回复

奔跑的鱼 回复了问题 1 人关注 1 个回复 1541 次浏览 2018-01-30 14:12 来自相关话题

安装mysql执行chown -R mysql:mysql时出现:chown: "mysql:mysql" 后缺少操作数

回复

奔跑的鱼 回复了问题 3 人关注 8 个回复 10851 次浏览 2018-01-30 13:37 来自相关话题

mysql安装卡了三四天了,求小象帮助啊

回复

余念 回复了问题 4 人关注 3 个回复 1495 次浏览 2018-01-22 15:35 来自相关话题

mysql_并发操作

回复

fish 回复了问题 2 人关注 1 个回复 1674 次浏览 2017-06-15 11:26 来自相关话题

mysql,commit

回复

wangxiaolei 回复了问题 2 人关注 1 个回复 1625 次浏览 2017-06-05 15:15 来自相关话题

sqoop导出hive到mysql问题

回复

wangxiaolei 回复了问题 5 人关注 6 个回复 10390 次浏览 2017-06-02 11:31 来自相关话题

使用pymysql连接mysql数据库,content下是新闻数据(中文)。打印之后乱码,怎么解决啊?

回复

Robin_TY 回复了问题 3 人关注 2 个回复 2143 次浏览 2017-05-24 11:13 来自相关话题

请问哪里有MYSQL安装软件的资源?

回复

fish 回复了问题 2 人关注 1 个回复 1445 次浏览 2017-05-22 10:51 来自相关话题

MySQL下载安装问题

回复

zhudejun_1985 回复了问题 1 人关注 1 个回复 1549 次浏览 2016-11-01 11:54 来自相关话题

安装mysql过程中报错,这个该怎么解决呢?网上查了方法但是没有成功,老师帮我看看

回复

wangxiaolei 回复了问题 2 人关注 1 个回复 1520 次浏览 2016-09-20 12:09 来自相关话题

mysql grants

回复

fish 回复了问题 3 人关注 2 个回复 1658 次浏览 2016-09-01 10:59 来自相关话题

mysql创建数据库,提示没有权限

回复

wangxiaolei 回复了问题 2 人关注 1 个回复 2333 次浏览 2016-05-21 19:51 来自相关话题

mysql使用root用户给普通用户授权之后,还是登陆不上去,如图

回复

wangxiaolei 回复了问题 2 人关注 2 个回复 2854 次浏览 2016-05-15 16:44 来自相关话题

15款最佳的MySQL管理工具和应用程序

唐半张 发表了文章 0 个评论 2261 次浏览 2015-10-11 10:58 来自相关话题

MySQL 管理工具,它帮助开发人员在许多方面支持包括 PostgreSQL,MySQL,SQLite,Redis,MongoDB 等在内的多种数据库;提供各种最新的特性,包括触发器、事件、视图、存储过程和外键,支持导入、数据备份、对象结构等多种功能。这篇文章 ...查看全部
MySQL 管理工具,它帮助开发人员在许多方面支持包括 PostgreSQL,MySQL,SQLite,Redis,MongoDB 等在内的多种数据库;提供各种最新的特性,包括触发器、事件、视图、存储过程和外键,支持导入、数据备份、对象结构等多种功能。这篇文章收集了15款最佳的 MySQL 管理工具和应用软件,帮助你轻松快速完成工作。
1. Induction

 Induction是一款用于理解数据关系的开源管理工具,它可用来探索行/列,运行查询和数据可视化等方面。该工具支持多种数据库,包括PostgreSQL,MySQL,SQLite,Redis以及MongoDB。此外,Induction还可以通过编写添加其他新的适配器。
2. Pinba
 

Pinba 是一种MySQL存储引擎,用于PHP实时监控和数据服务器的MySQL只读接口。它整理并处理通过UDP发送的数据,并以可读的简单报告的形式统计显示多个PHP进程。为了获取下一代更为复杂的报告和统计数据,Pinba提供了原始数据的只读接口。
3. DB Ninja

DbNinja是一款先进的基于Web的MySQL数据库管理与开发应用程序。它是远程访问托管服务器的必然之选。DbNinja支持所有最新的功能,包括触发器、事件、视图、存储过程和外键等。此外,它还可以导入和备份数据、MySQL对象结构以及管理用户等。DbNinj的用户界面功能完备且清新美观,可安全地运用于任何浏览器及任何操作系统中。
4. DB Tools Manager

DBManager是一款功能强大的数据管理应用程序。作为最先进的应用程序,DBManager内置支持MySQL、PostgreSQL、Interbase/Firebird、 SQLite,DBF表、MSAccess,MSSQL服务器,Sybase,Oracle和ODBC数据库引擎等一些新特性。DBManager目前拥有个人和企业两个版本,用户可按需选择使用。
5. Dbeaver

DBeaver是一款免费的数据库管理应用程序,可运用于多种不同的引擎,包括MySQL,MSSQL,Oracle、SQLite、Sybase和Firebird等等。由Java编写而成,该应用程序适用于所有主流操作系统(Windows、Mac和Linux)。它能处理包括元数据编辑(表、列、键、索引)、自定义SQL执行、用户管理、多连接等在内的所有主要任务。
6. SqlWave

SQLWave是一种简单、快速且易用的MySQL客户端。用户可通过该工具轻松地连接到远程主机。SqlWave支持所有MySQL的最新版本,包括它用来管理数据库结构的所有最新功能,如工作表、视图、存储过程、函数、事件、外键和触发器等。
7. MyWebSQL

MyWebSQL主要用于管理基于Web的MySQL数据库。与桌面应用程序的借口工作流程相似,用户无需切换网页即可完成一些简单的操作。如果您正在操作桌面,只用登数据库,就可以管理您的数据库了。
8. Navicat

 
 
9.  SQLyog

SQLyog是一款功能最强大的MySQL管理工具,它综合了MySQL工作台、php MyAdmin和其他MySQL前端及MySQL GUI工具的特点。该款应用程序可以同时连接任意数量级的MySQL服务器,用于测试和生产。所有流程仅需登录MySQL root以收集数据,用户无需安装在MySQL服务器上。
10. Sequel Pro

Sequel Pro是基于MySQL数据库的一种快速易用的Mac数据库管理应用程序。用户可通过Sequel Pro在本地和远程服务器上直接访问MySQL数据库。不过,Sequel Pro的最新版本开始添加全屏支持内置。
11. HeidiSQL

HeidiSQL是一种专为web开发人员设计的有用且可靠的工具,可用于当前最受欢迎的MySQL服务器,微软SQL数据库和PostgreSQL。该工具可提供浏览和编辑数据、创建和编辑表格、视图、过程、触发器和日志安排等事件。此外,您还可以导出结构和数据至SQL文件、剪贴板或其他服务器。
12. MyDB Studio

 
MyDB Studio是一款免费的MySQL数据库管理器应用程序。该工具强大到您几乎可以获取到任何想要的功能,并能够连接到无限量级的数据库。通过创建、编辑或删除数据库、表格和记录,就可以备份/恢复并导出为多个格式。
13. SQL Lite Manger

SQL Lite Manager是一款基于web的开源应用程序,用于管理无服务器、零配置SQL Lite数据库。该程序是用PHP写成,除了记录和应用表格格上的每一步操作,还可以控制多个数据库。SQL Lite Manager可用于查询数据,将MySQL查询转化为兼容SQL Lite数据库,并能创建和编辑触发器。SQL Lite Manager有多种皮肤选项,是一个含现成语言文件的多语言资源。
14. Database Master

Database Master是一个现代的、强大的、直观且易用的数据库管理程序。它以一个一致而现代的界面适用于MongoDB、MySQL、PostgreSQL、FireBird、 SQL Lite、MS SQL Server、SQL Azure、Oracle、IBM DB2、IBM Informix、Netezza、Ingres以及EffiProz等数据库。Database Master简化了管理、查询、编辑、可视化、设计和报告数据库系统。用户可以通过ODBC与OleDB连接任何数据库系统,也可以访问MS Access,MS FoxPro Database、Dbase和XML文件。
15. Chive

Chive由PHP搭建而成,是一款基于web的开源MySQL管理应用程序。此款应用程式有一个内置的编辑器,当运行复杂的查询或易用的界面时,可用于快速浏览。

sqoop mysql\oracle数据导入到hbase 各种异常解决

唐半张 发表了文章 0 个评论 2362 次浏览 2015-10-08 09:55 来自相关话题

使用sqoop 导mysql的数据时 一切顺利很方便   导oracle的时候 问题就来了  ...查看全部
使用sqoop 导mysql的数据时 一切顺利很方便  
导oracle的时候 问题就来了 
--query命令: 使用这个命令的时候 需要注意的是 where后面的参数,$CONDITIONS 这个参数必须加上
而且存在单引号与双引号的区别,如果--query后面使用的是双引号 那么需要在$CONDITIONS加上\ 即 \$CONDITIONS
./sqoop import --connect jdbcracle:thin192.168.8.130:1521:dcshdev --username User_data2 --password yhdtest123qa --query "select * from so_ext t where \$CONDITIONS " -m 4 --hbase-create-table --hbase-table hso --column-family so --hbase-row-key id --split-by id
如果使用--columns指令来指定字段 也出现了问题 
因为在一行中写太多命令是不可能的,--columns 如果字段太多在命令中写也不方便 
所以使用shell脚本要方便的多
那么在脚本中换行使用 \  来换行

有个问题就是 使用--columns 指定的字段大小写要注意 得使用小写。
如果使用大写 导数据不会有异常 会成功的,hbase中表也会创建好,但是scan的时候 你会发现没有数据 这个蛋疼吧
--columns id,order_id,order_code
而且每个字段之间用逗号分隔,但是不能有空格,在sqoop中没有处理空格,如果在这个命令后的参数有空格的话
就不能和oracle表中的字段对应上了 结果虽然没有错误能够显示成功导入多了条数据,但是scan的时候 会是0条数据

关于导mysql和oracle的时候 还有个区别:
导mysql表的数据时 不需要指定太多的命令就可以成功导入,但是oracle就需要很多命令 ,如--split-by 这个切分参数
在导mysql的时候 就不需要 ,但是如果在导oracle的时候 不加上就会出错了 不信你试试

sqoop从关系型数据库导数据到hdfs和hbase

唐半张 发表了文章 0 个评论 2496 次浏览 2015-10-06 11:28 来自相关话题

最近弄了些sqoop导数据方法和命令,关于批量导入和一般导入,在本机器上linux环境运行正常; (一)Oracle导入到hdfs上            sqoop import --connect jdbcracle:thinip: ...查看全部
最近弄了些sqoop导数据方法和命令,关于批量导入和一般导入,在本机器上linux环境运行正常;
(一)Oracle导入到hdfs上
           sqoop import --connect jdbcracle:thinip:端口号:databaseName --username userName --password password --query "sql语句 where \$CONDITIONS" --target-dir 目录名 --split-by 主键 -m 4

(二)Mysql导入到hbase上
    (1)一般导入(新建hbase表)
            sqoop import --connect jdbc:mysql://ip:端口号/databaseName?charset=utf-8 --username userName --password password --table tableName --hbase-table hbaseTableName --column-family 列族 --hbase-row-key HbaseRowKey --split-by 主键 -m 4 --hbase-create-table
    (2)批量导入
            sqoop import --connect jdbc:mysql://ip:端口号/databaseName?charset=utf-8 --username userName --password password --table tableName --hbase-table hbaseTableName --column-family 列族 --hbase-row-key hbaseRowKey --split-by 主键 -m 4  --incremental append  --check-column 主键  --last-value 0
(三)Mysql导入到hdfs上
            sqoop import --connect jdbc:mysql://ip:端口号/databaseName?charset=utf-8 --username userName --password password --table tableName --target-dir 目录名 --split-by 主键 -m 4 --incremental append  --check-column 主键 --last-value 0 

sqoop import --connect jdbc:mysql://ip:端口号/databaseName?charset=utf-8 --username userName --password password --query "SQL语句 where \$CONDITIONS " --target-dir 目录名 --split-by 主键 -m 4 --incremental append  --check-column 主键 --last-value 0 
 

flume+kafka+storm+mysql 数据流

唐半张 发表了文章 0 个评论 3643 次浏览 2015-10-06 10:04 来自相关话题

天终于将 flume + kafka + storm + mysql 这条数据流走通了,虽然只是一个简单的测试例子,但是依据这条数据流可以做的事情很多。 ...查看全部
天终于将 flume + kafka + storm + mysql 这条数据流走通了,虽然只是一个简单的测试例子,但是依据这条数据流可以做的事情很多。
先简单看一下这几个工具的架构吧,架构图会更好说明:
flume的架构图:


kafka的架构图:



storm的架构图:


我们使用的  flume + kafka + storm +mysql的数据流架构图:

下面介绍一下kafka到storm的配置:
其实这些都是通过java代码实现的,这里用到了 KafkaSpout类,RDBMSDumperBolt类(以后这些可以作为工具类打包上传到集群中)
storm作业中,我们写了一个KafkaStormRdbms类,作业具体配置如下:
首先设置连接mysql的参数:
[java] view plaincopyprint?
  • ArrayList columnNames = new ArrayList();  
  • ArrayList columnTypes = new ArrayList();  
  • String tableName = "stormTestTable_01";  
  • // Note: if the rdbms table need not to have a primary key, set the variable 'primaryKey' to 'N/A'  
  • // else set its value to the name of the tuple field which is to be treated as primary key  
  • String primaryKey = "N/A";  
  • String rdbmsUrl = "jdbc:mysql://$hostname:3306/fuqingwuDB" ;  
  • String rdbmsUserName = "fuqingwu";  
  • String rdbmsPassword = "password";  
  •   
  • //add the column names and the respective types in the two arraylists  
  • columnNames.add("word");  
  •   
  • //add the types  
  • columnTypes.add("varchar (100)");  
配置 KafkaSpout 及 Topology:[java] view plaincopyprint?
  • TopologyBuilder builder = new TopologyBuilder();  
  •          
  •         List hosts = new ArrayList();  
  •         hosts.add("hadoop01");  
  •         SpoutConfig spoutConf = SpoutConfig.fromHostStrings(hosts, 1, "flume_kafka", "/root", "id");  
  •         spoutConf.scheme = new StringScheme();  
  •         spoutConf.forceStartOffsetTime(-2);  
  •          
  •         spoutConf.zkServers = new ArrayList() {{  
  •                       add("hadoop01");   
  •                     }};  
  •         spoutConf.zkPort = 2181;  
  •          
  •         //set the spout for the topology  
  •         builder.setSpout("spout",  new KafkaSpout(spoutConf), 1);  
  •   
  •         //dump the stream data into rdbms table      
  •         RDBMSDumperBolt dumperBolt = new RDBMSDumperBolt(primaryKey, tableName, columnNames, columnTypes, rdbmsUrl, rdbmsUserName, rdbmsPassword);  
  •         builder.setBolt("dumperBolt",dumperBolt, 1).shuffleGrouping("spout");  

用sqoop进行mysql和hdfs系统间的数据互导

唐半张 发表了文章 0 个评论 2314 次浏览 2015-09-30 09:39 来自相关话题

下载: http://www.apache.org/dyn/closer.cgi/sqoop/ [zhouhh@Hadoop48 ~]$ wget http://labs.renren.com/apache-mirror/sqoop/1 ...查看全部
下载:
http://www.apache.org/dyn/closer.cgi/sqoop/
[zhouhh@Hadoop48 ~]$ wget http://labs.renren.com/apache-mirror/sqoop/1.4.1-incubating/sqoop-1.4.1-incubating__hadoop-1.0.0.tar.gz
最新用户手册
http://sqoop.apache.org/docs/1.4.1-incubating/SqoopUserGuide.html
 
一、从HBase库中直接导出到mysql中?
一开始我想从HBase库中直接导出到mysql中。
在mysql中创建一个库和表
mysql> create database toplists;
Query OK, 1 row affected (0.06 sec)
mysql> use toplists
Database changed
mysql> create table t1(id int not null primary key, name varchar(255),value int);
Query OK, 0 rows affected (0.10 sec)

hbase(main):011:0> scan 't1'
ROW COLUMN+CELL
1001 column=info:count, timestamp=1340265059531, value=724988
1009 column=info:count, timestamp=1340265059533, value=108051
...
total column=info:count, timestamp=1340265059534, value=833039
total_user_count column=info:, timestamp=1340266656307, value=154516
11 row(s) in 0.0420 seconds

[zhouhh@Hadoop48 ~]$ sqoop list-tables --connect jdbc:mysql://localhost/toplists --username root
java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver
at org.apache.sqoop.manager.SqlManager.makeConnection(SqlManager.java:657)
at org.apache.sqoop.manager.GenericJdbcManager.getConnection(GenericJdbcManager.java:52)
at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:473)
at org.apache.sqoop.manager.SqlManager.execute(SqlManager.java:496)
at org.apache.sqoop.manager.SqlManager.getColumnTypesForRawQuery(SqlManager.java:194)
at org.apache.sqoop.manager.SqlManager.getColumnTypes(SqlManager.java:178)
at org.apache.sqoop.manager.ConnManager.getColumnTypes(ConnManager.java:114)
at org.apache.sqoop.orm.ClassWriter.getColumnTypes(ClassWriter.java:1235)
at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1060)
at org.apache.sqoop.tool.CodeGenTool.generateORM(CodeGenTool.java:82)
at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:64)
at org.apache.sqoop.tool.ExportTool.run(ExportTool.java:97)
at org.apache.sqoop.Sqoop.run(Sqoop.java:145)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229)
at org.apache.sqoop.Sqoop.main(Sqoop.java:238)
at com.cloudera.sqoop.Sqoop.main(Sqoop.java:57)

需下载 MySQL JDBC Connector 库,并将其复制到$SQOOP_HOME/lib
下载mysql jdbc连接库
地址:http://www.mysql.com/downloads/connector/j/
[zhouhh@Hadoop48 ~]$ wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.21.tar.gz/from/http://cdn.mysql.com/
[zhouhh@Hadoop48 mysql-connector-java-5.1.21]$ cp mysql-connector-java-5.1.21-bin.jar ../sqoop/lib/.
[zhouhh@Hadoop48 ~]$ sqoop list-tables --connect jdbc:mysql://localhost/toplists --username root
t1

[zhouhh@Hadoop48 ~]$ sqoop-export --connect jdbc:mysql://localhost/toplists --username root --table t1 --export-dir /hbase

java.io.IOException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at org.apache.sqoop.mapreduce.ExportOutputFormat.getRecordWriter(ExportOutputFormat.java:79)
at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.(MapTask.java:628)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:753)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

这是可能由jdbc版本引起的,换成5.1.18
[zhouhh@Hadoop48 ~]$ sqoop-export --connect jdbc:mysql://localhost:3306/toplists --username root --table t1 --export-dir /hbase

Error initializing attempt_201206271529_0006_r_000000_0:
org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for ttprivate/taskTracker/zhouhh/jobcache/job_201206271529_0006/jobToken
at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:381)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:146)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:127)
at org.apache.hadoop.mapred.TaskTracker.localizeJobTokenFile(TaskTracker.java:4271)
at org.apache.hadoop.mapred.TaskTracker.initializeJob(TaskTracker.java:1177)
at org.apache.hadoop.mapred.TaskTracker.localizeJob(TaskTracker.java:1118)
at org.apache.hadoop.mapred.TaskTracker$5.run(TaskTracker.java:2430)
at java.lang.Thread.run(Thread.java:722)

DiskErrorException ,定位半天,发现是另一台机器的空间满了,在mapreduce运行时会引起该异常。
[zhouhh@Hadoop46 ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 28337624 26877184 0 100% /
[zhouhh@Hadoop48 ~]$ sqoop-export --connect jdbc:mysql://192.168.10.48:3306/toplists --username root --table t1 --export-dir /hbase
Caused by: java.sql.SQLException: null, message from server: "Host 'Hadoop47' is not allowed to connect to this MySQL server"

这是权限问题,设置授权:
mysql> GRANT ALL PRIVILEGES ON *.* TO '%'@'%';#允许所有用户查看和修改databaseName数据库模式的内容,否则别的IP连不上本MYSQL
Query OK, 0 rows affected (0.06 sec)

这是测试,所以权限没有限制。实际工作环境需谨慎授权。
[zhouhh@Hadoop48 ~]$ sqoop-export --connect jdbc:mysql://192.168.10.48:3306/toplists --username root --table t1 --export-dir /hbase
Note: /tmp/sqoop-zhouhh/compile/fa1d1c042030b0ec8537c7a4cd02aab3/t1.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
java.lang.NumberFormatException: For input string: "7"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.valueOf(Integer.java:582)
at t1.__loadFromFields(t1.java:218)
at t1.parse(t1.java:170)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:77)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:36)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:183)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)

这是由于/hbase是hbase的库表,根本不是可以导的格式,所以报错。
[zhouhh@Hadoop48 ~]$ sqoop-export --connect jdbc:mysql://192.168.10.48:3306/toplists --username root --table t1 --export-dir /hbase/t1
[zhouhh@Hadoop48 ~]$ sqoop-export --verbose --connect jdbc:mysql://192.168.10.48:3306/toplists --username root --table t1 --update-key id --input-fields-terminated-by '\t' --export-dir /hbase/t1
Note: /tmp/sqoop-zhouhh/compile/8ce6556eb13b3000550a9c864eaa6820/t1.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
[zhouhh@Hadoop48 ~]$

但将导出目录指到/hbase/t1表中,导出不会报错,而mysql中没有数据。后面才了解到,sqoop没有直接从hbase中将表导出到mysql的办法。必须先将hbase导出成平面文件,或者导出到hive中,才可以用sqoop将数据导出到mysql。
 二、从mysql中导到hdfs。
创建mysql表,将其导入到hdfs
mysql> create table test(id int not null primary key auto_increment,name varchar(64) not null,price decimal(10,2), cdate date,version int,comment varchar(255));
Query OK, 0 rows affected (0.10 sec)
mysql> insert into test values(null,'iphone',3900.00,'2012-7-18',1,'8g');
Query OK, 1 row affected (0.04 sec)
mysql> insert into test values(null,'ipad',3200.00,'2012-7-16',2,'16g');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+--------+---------+------------+---------+---------+
| id | name | price | cdate | version | comment |
+----+--------+---------+------------+---------+---------+
| 1 | iphone | 3900.00 | 2012-07-18 | 1 | 8g |
| 2 | ipad | 3200.00 | 2012-07-16 | 2 | 16g |
+----+--------+---------+------------+---------+---------+
2 rows in set (0.00 sec)

导入:
[zhouhh@Hadoop48 ~]$ sqoop import --connect jdbc:mysql://Hadoop48/toplists --table test -m 1
java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user ''@'Hadoop48' to database 'toplists'
at org.apache.sqoop.manager.CatalogQueryManager.getColumnNames(CatalogQueryManager.java:162)

给空用户授权
mysql> GRANT ALL PRIVILEGES ON *.* TO ''@'%';
[zhouhh@Hadoop48 ~]$ sqoop import --connect jdbc:mysql://Hadoop48/toplists --username root --table test -m 1

12/07/18 11:10:16 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
12/07/18 11:10:16 INFO tool.CodeGenTool: Beginning code generation
12/07/18 11:10:16 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `index_mapping` AS t LIMIT 1
12/07/18 11:10:16 INFO orm.CompilationManager: HADOOP_HOME is /home/zhoulei/hadoop-1.0.0/libexec/..
注: /tmp/sqoop-zhoulei/compile/2b04bdabb7043e4f75b215d72f65388e/index_mapping.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
12/07/18 11:10:18 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-zhoulei/compile/2b04bdabb7043e4f75b215d72f65388e/index_mapping.jar
12/07/18 11:10:18 WARN manager.MySQLManager: It looks like you are importing from mysql.
12/07/18 11:10:18 WARN manager.MySQLManager: This transfer can be faster! Use the --direct
12/07/18 11:10:18 WARN manager.MySQLManager: option to exercise a MySQL-specific fast path.
12/07/18 11:10:18 INFO manager.MySQLManager: Setting zero DATETIME behavior to convertToNull (mysql)
12/07/18 11:10:25 INFO mapreduce.ImportJobBase: Beginning import of index_mapping
12/07/18 11:10:26 INFO mapred.JobClient: Running job: job_201207101344_0519
12/07/18 11:10:27 INFO mapred.JobClient: map 0% reduce 0%
12/07/18 11:10:40 INFO mapred.JobClient: map 100% reduce 0%
12/07/18 11:10:45 INFO mapred.JobClient: Job complete: job_201207101344_0519
12/07/18 11:10:45 INFO mapred.JobClient: Counters: 18
12/07/18 11:10:45 INFO mapred.JobClient: Job Counters
12/07/18 11:10:45 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=12083
12/07/18 11:10:45 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0
12/07/18 11:10:45 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0
12/07/18 11:10:45 INFO mapred.JobClient: Launched map tasks=1
12/07/18 11:10:45 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=0
12/07/18 11:10:45 INFO mapred.JobClient: File Output Format Counters
12/07/18 11:10:45 INFO mapred.JobClient: Bytes Written=28
12/07/18 11:10:45 INFO mapred.JobClient: FileSystemCounters
12/07/18 11:10:45 INFO mapred.JobClient: HDFS_BYTES_READ=87
12/07/18 11:10:45 INFO mapred.JobClient: FILE_BYTES_WRITTEN=30396
12/07/18 11:10:45 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=28
12/07/18 11:10:45 INFO mapred.JobClient: File Input Format Counters
12/07/18 11:10:45 INFO mapred.JobClient: Bytes Read=0
12/07/18 11:10:45 INFO mapred.JobClient: Map-Reduce Framework
12/07/18 11:10:45 INFO mapred.JobClient: Map input records=2
12/07/18 11:10:45 INFO mapred.JobClient: Physical memory (bytes) snapshot=79167488
12/07/18 11:10:45 INFO mapred.JobClient: Spilled Records=0
12/07/18 11:10:45 INFO mapred.JobClient: CPU time spent (ms)=340
12/07/18 11:10:45 INFO mapred.JobClient: Total committed heap usage (bytes)=56623104
12/07/18 11:10:45 INFO mapred.JobClient: Virtual memory (bytes) snapshot=955785216
12/07/18 11:10:45 INFO mapred.JobClient: Map output records=2
12/07/18 11:10:45 INFO mapred.JobClient: SPLIT_RAW_BYTES=87
12/07/18 11:10:45 INFO mapreduce.ImportJobBase: Transferred 28 bytes in 20.2612 seconds (1.382 bytes/sec)
12/07/18 11:10:45 INFO mapreduce.ImportJobBase: Retrieved 2 records.

检查数据是否导入
[zhouhh@Hadoop48 ~]$ fs -cat /user/zhouhh/test/part-m-00000
1,iphone,3900.00,2012-07-18,1,8g
2,ipad,3200.00,2012-07-16,2,16g

[zhouhh@Hadoop48 ~]$ fs -cat test/part-m-00000
1,iphone,3900.00,2012-07-18,1,8g
2,ipad,3200.00,2012-07-16,2,16g

 三、从hdfs导出到mysql
清空表
mysql> delete from test;
Query OK, 2 rows affected (0.00 sec)

mysql> select * from test;
Empty set (0.00 sec)

导出
[zhouhh@Hadoop48 ~]$ sqoop-export --connect jdbc:mysql://192.168.10.48:3306/toplists --username root --table test --export-dir test
Note: /tmp/sqoop-zhouhh/compile/7adaaa7ffe5f49ed9d794b1be8a9a983/test.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

导出时,–connect,–table, –export-dir是必须设置的。其中toplists是库名,–table是该库下的表名。 –export-dir是要导出的HDFS平面文件位置。如果不是绝对路径,指/user/username/datadir
检查mysql表
mysql> select * from test;
+----+--------+---------+------------+---------+---------+
| id | name | price | cdate | version | comment |
+----+--------+---------+------------+---------+---------+
| 1 | iphone | 3900.00 | 2012-07-18 | 1 | 8g |
| 2 | ipad | 3200.00 | 2012-07-16 | 2 | 16g |
+----+--------+---------+------------+---------+---------+
2 rows in set (0.00 sec)

可见导出成功。
 四、不执行mapreduce,但生成导入代码
[zhouhh@Hadoop48 ~]$ sqoop codegen --connect jdbc:mysql://192.168.10.48:3306/toplists --username root --table test --class-name Mycodegen
Note: /tmp/sqoop-zhouhh/compile/104b871487669b89dcd5b9b2c61f905f/Mycodegen.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

[zhouhh@Hadoop48 ~]$ sqoop help codegen
usage: sqoop codegen [GENERIC-ARGS] [TOOL-ARGS]

sqoop导入时,可以加选择语句,以过滤和综合多表,用–query.也可以只加条件,用–where。这样可以不必每次导入整张表。 如 –where ‘id > 1000′
示例,采用join选择多表数据:
sqoop import –query ‘select a.*,b.* from a join b on (a.id == b.id) where $conditions’ -m 1 –target-dir /usr/foo/joinresults
 五、将mysql表导入到HBase
虽然目前,sqoop没有将HBase直接导入mysql的办法,但将mysql直接导入HBase是可以的。需指定–hbase-table,用–hbase-create-table来自动在HBase中创建表。–column-family指定列族名。–hbase-row-key指定rowkey对应的mysql的键。
[zhouhh@Hadoop48 ~]$ sqoop import –connect jdbc:mysql://Hadoop48/toplists –table test –hbase-table a –column-family name –hbase-row-key id –hbase-create-table –username ‘root’
检查hbase被导入的表:
hbase(main):002:0> scan 'a'
ROW COLUMN+CELL
1 column=name:cdate, timestamp=1342601695952, value=2012-07-18
1 column=name:comment, timestamp=1342601695952, value=8g
1 column=name:name, timestamp=1342601695952, value=iphone
1 column=name:price, timestamp=1342601695952, value=3900.00
1 column=name:version, timestamp=1342601695952, value=1
2 column=name:cdate, timestamp=1342601695952, value=2012-07-16
2 column=name:comment, timestamp=1342601695952, value=16g
2 column=name:name, timestamp=1342601695952, value=ipad
2 column=name:price, timestamp=1342601695952, value=3200.00
2 column=name:version, timestamp=1342601695952, value=2
2 row(s) in 0.2370 seconds

关于导入的一致性:建议停止mysql表的写入再导入到HDFS或HIVE,否则,mapreduce可能会丢失新增的数据。
关于效率:mysql直接模式(–direct)导入的方式效率高。但不支持大对象数据,类型为CLOB或BLOB的列。用JDBC效率较低,但有专用API可以支持CLOB及BLOB。六、从HBase导出数据到Mysql
目前没有直接的导出命令。但有两个方法可以将HBase数据导出到mysql。
其一,将HBase导出成HDFS平面文件,再导出到mysql.
其二,将HBase数据导出到HIVE,再导出到mysql,参见后续文章《从hive将数据导出到mysql

hive 数据导入mysql

夕阳丶一抹红颜 发表了文章 0 个评论 2729 次浏览 2015-09-22 11:44 来自相关话题

下面是我将hive中数据导入到mysql中的方案,但这套方案性能速度上不是很好,想听听大家有没有 ...查看全部
下面是我将hive中数据导入到mysql中的方案,但这套方案性能速度上不是很好,想听听大家有没有更好些的方案?

目前我是在hive中有一张page_visit表,每天产生1500w数据,然后执行指定时间段内(一般三天,大概四、五千万行)的数据:

insert overwrite table archive_seller_by_geo_per_day partition(partDate, shard) select sellerTokenID, partDate archiveDate, countryCode, country, countryState, countryCity, count(*) pv, count(distinct ip) uv, partDate, shard from page_visit where partDate >= ${THREE_DAY[1]} and partDate <= ${THREE_DAY[3]} group by sellerTokenID, countryCode, country, countryState, countryCity, partDate, shard having sellerTokenID>0;

到archive_seller_by_geo_per_day中的数据有1000万行,然后通过三步将archive_seller_by_geo_per_day中数据导入到mysql中:

第一步:通过hadoop fs -get 将archive_seller_by_geo_per_day的HDFS文件导入本地
hadoop fs -get "/hive/archive_seller_by_geo_per_day/partdate=${day}/shard=${sd}/*" "${mast_get}partdate=${day}/shard=${sd}"

第二步:将本地文件load到mysql数据库 hive_archive_seller_by_geo_per_day 表(临时表)中:
${SHARDDB[$sd]} <<< "LOAD DATA LOCAL INFILE '${archive_file}' INTO TABLE hive_archive_seller_by_geo_per_day CHARACTER SET utf8 fields terminated by ',' lines terminated by '\n';"

第三步:再将hive_archive_seller_by_geo_per_day表插入和更新到mysql的正式表 archive_seller_by_geo_per_day 中:
${SHARDDB[$sd]} <<< "INSERT INTO archive_seller_by_geo_per_day (sellerTokenID, archiveDate, countryCode, country, countryState, countryCity, pv, uv) SELECT sellerTokenID, archiveDate,countryCode,country,countryState,countryCity,pv, uv from hive_archive_seller_by_geo_per_day where archiveDate=${day} ON DUPLICATE KEY UPDATE pv = VALUES(pv), uv = VALUES(uv);"

修改表的主键

cenyuhai 发表了文章 0 个评论 1979 次浏览 2015-09-11 14:10 来自相关话题

在家里创建表的时候经常会忘掉设置主键,不是一次两次了,每次都是浪费了不少时间才搞定,下面把这两句代码放上来,以示警惕!   alter table Template alter column Guid uniqueidentifier not nu ...查看全部
在家里创建表的时候经常会忘掉设置主键,不是一次两次了,每次都是浪费了不少时间才搞定,下面把这两句代码放上来,以示警惕!
  alter table Template alter column Guid uniqueidentifier not null
  alter table Template add constraint PK_template primary key (Guid)

SqlServer 索引

cenyuhai 发表了文章 0 个评论 1420 次浏览 2015-09-11 14:08 来自相关话题

什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音、笔画、偏旁部首 ...查看全部
什么是索引
拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音、笔画、偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词)。
同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度。
• SQL Server中的数据也是按页( 4KB )存放
• 索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据 。
• 索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的目录页。
• 索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。
 
索引类型
唯一索引:唯一索引不允许两行具有相同的索引值
主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的,并且不能为空
聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个
非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个
 
索引类型:再次用汉语字典打比方,希望大家能够明白聚集索引和非聚集索引这两个概念。
 
唯一索引:
唯一索引不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。例如,如果在stuInfo表中的学员员身份证号(stuID) 列上创建了唯一索引,则所有学员的身份证号不能重复。
提示:创建了唯一约束,将自动创建唯一索引。尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束或唯一约束。
 
主键索引:
在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。
 
聚集索引(clustered index
在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。例如:汉语字(词)典默认按拼音排序编排字典中的每页页码。拼音字母a,b,c,d……x,y,z就是索引的逻辑顺序,而页码1,2,3……就是物理顺序。默认按拼音排序的字典,其索引顺序和逻辑顺序是一致的。即拼音顺序较后的字(词)对应的页码也较大。如拼音“ha”对应的字(词)页码就比拼音“ba” 对应的字(词)页码靠后。
 
非聚集索引(Non-clustered)
如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引(nonclustered index)有更快的数据访问速度。例如,按笔画排序的索引就是非聚集索引,“1”画的字(词)对应的页码可能比“3”画的字(词)对应的页码大(靠后)。
提示:SQL Server中,一个表只能创建1个聚集索引,多个非聚集索引。设置某列为主键,该列就默认为聚集索引
 
如何创建索引
使用T-SQL语句创建索引的语法:
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]
INDEX index_name
ON table_name (column_name…)
[WITH FILLFACTOR=x]
q UNIQUE表示唯一索引,可选
q CLUSTERED、NONCLUSTERED表示聚集索引还是非聚集索引,可选
q FILLFACTOR表示填充因子,指定一个0到100之间的值,该值指示索引页填满的空间所占的百分比
 
在stuMarks表的writtenExam列创建索引:
USE stuDB
GO
IF EXISTS (SELECT name FROM sysindexes
WHERE name = 'IX_writtenExam')
DROP INDEX stuMarks.IX_writtenExam
/*--笔试列创建非聚集索引:填充因子为30%--*/
CREATE NONCLUSTERED INDEX IX_writtenExam
ON stuMarks(writtenExam)
WITH FILLFACTOR= 30
GO
/*-----指定按索引 IX_writtenExam 查询----*/
SELECT * FROM stuMarks (INDEX=IX_writtenExam)
WHERE writtenExam BETWEEN 60 AND 90
虽然我们可以指定SQL Server按哪个索引进行数据查询,但一般不需要我们人工指定。SQL Server将会根据我们创建的索引,自动优化查询 。
 
索引的优缺点
• 优点
– 加快访问速度
– 加强行的唯一性
• 缺点
– 带索引的表在数据库中需要更多的存储空间
– 操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新
 
创建索引的指导原则
• 请按照下列标准选择建立索引的列。
– 该列用于频繁搜索
– 该列用于对数据进行排序
• 请不要使用下面的列创建索引:
– 列中仅包含几个不同的值。
– 表中仅包含几行。为小型表创建索引可能不太划算,因为SQL Server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长