shardbatis github在表不存在时 会不会自动

mybatis的sharding分表 - CSDN博客
mybatis的sharding分表
最近业务系统处理数据量比较大,需要分表,由于用的mybatis做持久化,有sharding插件可以直接用,下面是自己做的demo部分
一、Pom.xml添加maven依赖,
&dependency&
&&&&&&&&&&& &groupId&org.shardbatis&/groupId&
&&&&&&&&&&& &artifactId&shardbatis&/artifactId&
&&&&&&&&&&& &version&2.0.0D&/version&
&&&&&&& &/dependency&
&二、mybatis-config.xml配置文件配置sharding插件
&&& &plugins&&
&&&&&&& &plugininterceptor=&com.google.code.shardbatis.plugin.ShardPlugin&&&
&&&&&&&&&&&&&&& &propertyname=&shardingConfig&value=&shard_config.xml&/&&
&&&&&&& &/plugin&&
&/plugins&
&三、实现分表策略接口,获取分表的实际表名(测试策略是根据年了求余2,在基础表名后家上下斜线和余数组成实际表名称)
classShardStrategyImpl implements ShardStrategy {
&&& &* 得到实际表名
&&& &* @parambaseTableName逻辑表名,一般是没有前缀或者是后缀的表名
&&& &* @param params &&&&&& mybatis执行某个statement时使用的参数
&&& &* @param mapperId &&&& mybatis配置的statement id
&&& &* @return
&&& public StringgetTargetTableName(StringbaseTableName,Object params, String mapperId) {
&&&&&&& Integerk = 0;
&&&&&&& if (params !=null) {
&&&&&&&&&&& ShardTestBeanshardTestBean = (ShardTestBean)
&&&&&&&&&&& Integertemp = shardTestBean.getAge();
&&&&&&&&&&& k= temp % 2;
&&&&&&& returnbaseTableName +&_& +
&四、配置分表策略的sharding配置文件
&?xmlversion=&1.0&encoding=&UTF-8&?&&
&!DOCTYPEshardingConfigPUBLIC&-////DTDShardbatis 2.0//EN&&
& &/dtd/shardbatis-config.dtd&&&
&shardingConfig&&
&&&&&!-- parseList可选配置&
&&&&&&&&&&&& 如果配置了parseList,只有在parseList范围内并且不再ignoreList内的sql才会被解析和修改&
&&&&&parseList&&value&shardTest.addShardTest&/value&&/parseList&&
& & &!--&配置分表策略& --&&
&&&&&strategytableName=&shard_test&strategyClass=&
service.ShardStrategyImpl&/&
&/shardingConfig&
&五、使用的时候写表名shard_test,sharding插件会自动根据第三步实现的策略找到正确的表名称
&insertid=&addShardTest&parameterType=&
model.ShardTestBean&&
&&&&&&& INSERT INTO shard_test(username,password,age,remark) VALUES(#{userName},#{password},#{age},#{remark})
&六、详细的代码地址如下(执行resources下的database.sql建立mysql的分表,修改applicationContext.xml的数据库用户名和密码,既可以运行maven项目):
本文已收录于以下专栏:
相关文章推荐
由于公司业务的拓展,单表数据已经超过几千万行,通过数据库的优化已经不能满足速度的要求。分库分表提到了日程上,必须解决。
恰好看到当当开源了其Sharding-JDBC组件,摘抄一段介绍:
新建Maven项目
&project xmlns=&http://maven.apache.org/POM/4.0.0& xmlns:xsi=&http://www.w3.org...
当当开源的sharding-jdbc,官方网址:/dangdangdotcom/sharding-jdbc
好了,看了这么多的介绍,感觉还...
spring+mybatis+druid数据源+sharding-jdbc分库分表
参考文档:/hjforever/sharding-jdbc
例子下载链接:http://download.csdn.net/detail/leevons/9808...
【http://www.csdn.net/article//2825221】
云时代的分布式数据库:阿里分布式数据库服务DRDS -- 伴随着系统性能、成本及扩展性的新时代需...
Spring4.1.5.RELEASE
Mybatis 3.4.0
MySQL.5.6.30 (64位)
添加sharding配置
新建一个xml文件,...
分库分表一直是潮流,我这边简单介绍一下我实现分库、主从分离的一些实践经验。
1、实现分库:
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&>&shardbatis-2.0.0B.jar
shardbatis-2.0.0B.jar
上传大小:26KB
mybatis的水平切分插件工具
官方下载地址被屏蔽,大家可已通过这里下载
综合评分:4.6(17位用户评分)
所需积分/C币:
下载个数:109
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有11条
可以使用,赞一个
不错,可以使用
找到了。在研究当中。谢谢分享
可以使用,不用从官网下载了
找了好久才找到 mybatis分表
不错,可以使用
如何和myibatis的说明没。
谢谢了,很有用
谢谢了,很有用
这个jar可用
审核通过送C币
精选6套分布式相关视频
创建者:love
Head First_深入浅出全系列(中文版)
创建者:e98123
java自主学习知识总结
创建者:qq_
上传者其他资源上传者专辑
MCPD 70-547 题库
mcts 70-528题库
开发技术热门标签
VIP会员动态
下载频道用户反馈专区
下载频道积分规则调整V1710.18
开通VIP,海量IT资源任性下载
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
为了良好体验,不建议使用迅雷下载
shardbatis-2.0.0B.jar
会员到期时间:
剩余下载个数:
剩余C币:593
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
全站600个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
shardbatis-2.0.0B.jarHive 创建表并且导入数据
Hive中Map、Struct、Array如何定义 Hive sql语法
列类型Hive支持的数据类型如下:原生类型:TINYINTSMALLINTINTBIGINTBOOLEANFLOATDOUBLESTRINGBINARY&(Hive&0.8.0以上才可用)TIMESTAMP&(Hive&0.8.0以上才可用)复合类型:arrays:&ARRAY&data_type&maps:&MAP&primitive_type, data_type&structs:&STRUCT&col_name : data_type [COMMENT col_comment], ...&union:&UNIONTYPE&data_type, data_type, ...&时间戳支持传统的unix时间戳,可选的纳秒级精度。支持的转换:整型数值类型:解读为以秒为单位的UNIX时间戳浮动点数值类型:解读为以秒和小数精度为单位的UNIX时间戳。字符串:JDBC兼容的java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”(9位小数位精度)时间戳被解释是与timezone无关,存储为从UNIX纪元的偏移量。提供便利的UDF和时区转换(to_utc_timestamp,from_utc_timestamp)。所有现有datetime的UDF(月,日,年,小时,等)可以工作于TIMESTAMP数据类型。---------------------------------------------------------简单的创建表create table table_name (
dtDontQuery
)&&创建有分区的表create table table_name (
dtDontQuery
partitioned by (date string)一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下。分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。表中的一个&Partition&对应于表下的一个目录,Partition&就是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理。&典型的默认创建表CREATE TABLE page_view(
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
STORED AS TEXTFILE;&这里创建了表page_view,有表的注释,一个字段ip的注释,分区有两列,分别是dt和country。[ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符。不同列之间用一个'\001'分割,集合(例如array,map)的元素之间以'\002'隔开,map中key和value用'\003'分割。&[STORED AS file_format]关键字是用来设置加载数据的数据类型,默认是TEXTFILE,如果文件数据是纯文本,就是使用 [STORED AS TEXTFILE],然后从本地直接拷贝到HDFS上,hive直接可以识别数据。&常用的创建表CREATE TABLE login(
userid BIGINT,
ip STRING,
time BIGINT)
PARTITIONED BY(dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;&创建外部表如果数据已经存在HDFS的'/user/hadoop/warehouse/page_view'上了,如果想创建表,指向这个路径,就需要创建外部表:CREATE EXTERNAL TABLE page_view(
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING COMMENT 'IP Address of the User',
country STRING COMMENT 'country of origination')
COMMENT 'This is the staging page view table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
STORED AS TEXTFILE
LOCATION '/user/hadoop/warehouse/page_view';创建表,有指定EXTERNAL就是外部表,没有指定就是内部表,内部表在drop的时候会从HDFS上删除数据,而外部表不会删除。外部表和内部表一样,都可以有分区,如果指定了分区,那外部表建了之后,还要修改表添加分区。外部表如果有分区,还可以加载数据,覆盖分区数据,但是外部表删除分区,对应分区的数据不会从HDFS上删除,而内部表会删除分区数据。&指定数据库创建表如果不指定数据库,hive会把表创建在default数据库下,假设有一个hive的数据库mydb,要创建表到mydb,如下:CREATE TABLE mydb.pokes(foo INT,bar STRING);
--把当前数据库指向mydb
CREATE TABLE pokes(foo INT,bar STRING);&复制表结构CREATE TABLE empty_table_name LIKE table_根据table_name创建一个空表empty_table_name,empty_table_name没有任何数据。&create-table-as-selectt (CTAS)CTAS创建的表是原子性的,这意味着,该表直到所有的查询结果完成后,其他用户才可以看到完整的查询结果表。CTAS唯一的限制是目标表,不能是一个有分区的表,也不能是外部表。简单的方式CREATE TABLE new_key_value_store
SELECT (key % 1024) new_key, concat(key, value) key_value_pair FROM key_value_复杂的方式CREATE TABLE new_key_value_store
ROW FORMAT SERDE &org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe&
STORED AS RCFile AS
SELECT (key % 1024) new_key, concat(key, value) key_value_pair
FROM key_value_store
SORT BY new_key, key_value_&删除表DROP TABLE table_
DROP TABLE IF EXISTS table_删除表会移除表的元数据和数据,而HDFS上的数据,如果配置了Trash,会移到.Trash/Current目录下。删除外部表时,表中的数据不会被删除。&截断表TRUNCATE TABLE table_
TRUNCATE TABLE table_name PARTITION (dt='');从表或者表分区删除所有行,不指定分区,将截断表中的所有分区,也可以一次指定多个分区,截断多个分区。---------------------------------------------------------添加分区ALTER TABLE table_name ADD PARTITION (partCol = 'value1') location 'loc1'; //示例ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (dt='') LOCATION '/user/hadoop/warehouse/table_name/dt='; //一次添加一个分区
ALTER TABLE page_view ADD PARTITION (dt='', country='us') location '/path/to/us/part080808' PARTITION (dt='', country='us') location '/path/to/us/part080809';
//一次添加多个分区&删除分区ALTER TABLE login DROP IF EXISTS PARTITION (dt='');
ALTER TABLE page_view DROP IF EXISTS PARTITION (dt='', country='us');&修改分区ALTER TABLE table_name PARTITION (dt='') SET LOCATION &new location&;ALTER TABLE table_name PARTITION (dt='') RENAME TO PARTITION (dt='');&添加列ALTER TABLE table_name ADD COLUMNS (col_name STRING);
//在所有存在的列后面,但是在分区列之前添加一列&修改列CREATE TABLE test_change (a int, b int, c int);
// will change column a's name to a1
ALTER TABLE test_change CHANGE a a1 INT;
// will change column a's name to a1, a's data type to string, and put it after column b. The new table's structure is: b int, a1 string, c int
ALTER TABLE test_change CHANGE a a1 STRING AFTER
// will change column b's name to b1, and put it as the first column. The new table's structure is: b1 int, a string, c int
ALTER TABLE test_change CHANGE b b1 INT FIRST; &修改表属性:alter table table_name set TBLPROPERTIES ('EXTERNAL'='TRUE');
//内部表转外部表
alter table table_name set TBLPROPERTIES ('EXTERNAL'='FALSE');
//外部表转内部表&表的重命名ALTER TABLE table_name RENAME TO new_table_name-------------------------------------------------------hive有两种数据修改方式从文件加载到hive表加载数据到表时,hive不会做任何转换。加载操作是纯粹的复制/移动操作,移动数据文件到相应的hive表。语法LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]实例假设hive的warehouse目录是/user/hadoop/warehouse,这里有一个login表CREATE TABLE login (
PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;对应有一个用户登录日志文件,文件内容如下:888,8.8.8.8
999,9.9.9.9注意,列与列之间是用','号隔开,第一列是uid,第二列是用户ip。接着加载数据LOAD DATA LOCAL INPATH '/data/login/.csv' OVERWRITE INTO TABLE login PARTITION (dt='');这表示从本地磁盘,把文件&'/data/login/.csv' 拷贝到表login,分区dt为''的目录(在HDFS)下.加载成功后,.csv会放置在&hdfs://namenode:9000/user/hadoop/warehouse/login/dt=30101.csv。OVERWRITE表示目标表(或分区)在数据加载前会删除,然后替换为新的数据。如果不指定OVERWRITE,则会追加数据到目标表(或分区)下,如果文件名和目标目录的文件冲突,会自动改名。LOCAL如果不指定,就是从HDFS的'/data/login/.csv'移动数据到表login,分区分区dt为''的目录下。即是,原来的HDFS文件'/data/login/.csv'是被移动到hdfs://namenode:9000/user/hadoop/warehouse/login/dt=30101.csv。注意:加载的文件名不能是一个子目录,hive做一些最简单的检查,以确保正在加载的文件和目标表匹配。目前,它会检查,如果该表存储为sequencefile格式 - 正在加载的文件是反序列化。&从查询插入数据到hive表标准语法INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_示例:INSERT OVERWRITE TABLE login_user select distinct uid FROM login_ --从登录日志表查询登录用户,插入到表login_user中,如果login_user已有数据,则覆盖,否则创建
INSERT OVERWRITE TABLE login_user PARTITION (dt='')
select distinct uid FROM login_log where dt=''; --从的登录日志表查询当天的登录用户,插入到表login_user中,如果login_user已有分区dt='',则覆盖,否则创建
INSERT INTO TABLE login_user select distinct uid FROM login_ --从登录日志表查询登录用户,插入到表login_user中,如果login_user已有数据,则追加,否则创建
INSERT INTO TABLE login_user PARTITION (dt='') select distinct uid FROM login_log where dt=''; --从的登录日志表查询当天的登录用户,插入到表login_user中,如果login_user已有分区dt='',则追加,否则创建&扩展语法多个插入FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2]
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;
FROM from_statement
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2]
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] ...;一次查询,把结果集插入到多个表或分区。实际中,感觉用的比较少,这里不做示例。&动态分区插入INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_
INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_标准语法已经包含了动态分区插入了,这里不另外介绍。------------------------------------------------------------------------------------------------------------hive命令行执行一个查询$HIVE_HOME/bin/hive -e 'select a.col from tab1 a'之后过程中,会在终端上显示mapreduce的进度,执行完毕后,最后把查询结果输出到终端上,接着hive进程退出,不会进入交互模式。&使用静音模式执行一个查询$HIVE_HOME/bin/hive -S -e 'select a.col from tab1 a'加入-S,终端上的输出不会有mapreduce的进度,执行完毕,只会把查询结果输出到终端上。这个静音模式很实用,,通过第三方程序调用,第三方程序通过hive的标准输出获取结果集。&使用静音模式执行一个查询,把结果集导出$HIVE_HOME/bin/hive -S -e 'select a.col from tab1 a' & tab1.csv&不进入交互模式,执行一个hive script$HIVE_HOME/bin/hive -f /home/my/hive-script.sqlhive-script.sql是使用hive sql语法编写的脚本文件,执行的过程和-e类似,区别是从文件加载sql.但是sql文件,对于bash来说,不能使用变量,而使用-e的方式,可以在bash里使用变量(但是对于sql文件的形式,可以利用程序基于变量动态生成sql文件,再执行,稍微麻烦点)。这里可以和静音模式-S联合使用,通过第三方程序调用,第三方程序通过hive的标准输出获取结果集。&hive交互式模式当$HIVE_HOME/bin/hive执行时,没有-e或者-f选项,会进入交互式shell模式。命令描述quit&exit退出交互式shellreset重置配置为默认值set &key&=&value&修改特定变量的值注意:&如果变量名拼写错误,不会报错set输出用户覆盖的hive配置变量set -v输出所有Hadoop和Hive的配置变量add FILE[S] &filepath& &filepath&*&add JAR[S] &filepath& &filepath&*&add ARCHIVE[S] &filepath& &filepath&*添加 一个或多个 file, jar, &archives到分布式缓存list FILE[S]&list JAR[S]&list ARCHIVE[S]输出已经添加到分布式缓存的资源。list FILE[S] &filepath&*&list JAR[S] &filepath&*&list ARCHIVE[S] &filepath&*检查给定的资源是否添加到分布式缓存delete FILE[S] &filepath&*&delete JAR[S] &filepath&*&delete ARCHIVE[S] &filepath&*从分布式缓存删除指定的资源! &command&从Hive shell执行一个shell命令dfs &dfs command&从Hive shell执行一个dfs命令&query string&执行一个Hive 查询,然后输出结果到标准输出source FILE &filepath&在CLI里执行一个hive脚本文件&&&&&&&&&&&&&&&&&例子 hive& set mapred.reduce.tasks=32;
hive& select a.* from tab1;
hive& !ls;
hive& dfs -ls;&---------------------------------------------------------------------------------------------------------------------------hive提供了复合数据类型:Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域aMaps(K-V对):访问指定域可以通过[&指定域名称&]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过M['group']来获取Arrays:array中的数据为相同类型,例如,假如array A中元素['a','b','c'],则A[1]的值为'b'Struct使用建表:hive&&create&table&student_test(id&INT,&info&struct&name:STRING,&age:INT&)& &&&ROW&FORMAT&DELIMITED&FIELDS&TERMINATED&BY&','&&&&&&&&&&&&&&&&&&&&&&&& &&& &&COLLECTION&ITEMS&TERMINATED&BY&':';&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& OK& Time&taken:&0.446&seconds&&'FIELDS TERMINATED BY' :字段与字段之间的分隔符''COLLECTION ITEMS TERMINATED BY' :一个字段各个item的分隔符&导入数据:$&cat&test5.txt&& 1,zhou:30& 2,yan:30& 3,chen:20& 4,li:80&&hive&&LOAD&DATA&LOCAL&INPATH&'/home/work/data/test5.txt'&INTO&TABLE&student_&&Copying&data&from&file:/home/work/data/test5.txt&&Copying&file:&file:/home/work/data/test5.txt&&Loading&data&to&table&default.student_test&&OK&&Time&taken:&0.35&seconds&&查询:hive&&select&info.age&from&student_& Total&MapReduce&jobs&=&1& ......& Total&MapReduce&CPU&Time&Spent:&490&msec& OK& 30& 30& 20& 80& Time&taken:&21.677&seconds&&Array使用建表:hive&&create&table&class_test(name&string,&student_id_list&array&INT&)& &&ROW&FORMAT&DELIMITED&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & &&FIELDS&TERMINATED&BY&','&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&& &&COLLECTION&ITEMS&TERMINATED&BY&':';&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& OK& Time&taken:&0.099&seconds&&导入数据:$&cat&test6.txt&& 034,1:2:3:4& 035,5:6& 036,7:8:9:10&&hive&&&LOAD&DATA&LOCAL&INPATH&'/home/work/data/test6.txt'&INTO&TABLE&class_test&;&&Copying&data&from&file:/home/work/data/test6.txt&&Copying&file:&file:/home/work/data/test6.txt&&Loading&data&to&table&default.class_test&&OK&&Time&taken:&0.198&seconds&&查询:hive&&select&student_id_list[3]&from&class_& Total&MapReduce&jobs&=&1& ......& Total&MapReduce&CPU&Time&Spent:&480&msec& OK& 4& NULL& 10& Time&taken:&21.574&seconds&&Map使用建表:hive&&create&table&employee(id&string,&perf&map&string,&int&)&&&&&& && &&ROW&FORMAT&DELIMITED&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&& &&FIELDS&TERMINATED&BY&'\t'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&& &&COLLECTION&ITEMS&TERMINATED&BY&','&&&&&&&&&&&&&&&&&&&&&& &&& &&MAP&KEYS&TERMINATED&BY&':';&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& OK& Time&taken:&0.144&seconds&&‘MAP KEYS TERMINATED BY’ :key value分隔符导入数据:$&cat&test7.txt&& 1&&&&&&&job:80,team:60,person:70& 2&&&&&&&job:60,team:80& 3&&&&&&&job:90,team:70,person:100& hive&&&LOAD&DATA&LOCAL&INPATH&'/home/work/data/test7.txt'&INTO&TABLE&&&查询:hive&&select&perf['person']&from&& Total&MapReduce&jobs&=&1& ......& Total&MapReduce&CPU&Time&Spent:&460&msec& OK& 70& NULL& 100& Time&taken:&20.902&seconds& hive&&select&perf['person']&from&employee&where&perf['person']&is&not&&&&& Total&MapReduce&jobs&=&1& .......& Total&MapReduce&CPU&Time&Spent:&610&msec& OK& 70& 100& Time&taken:&21.989&seconds& hive&&& -------------------------------------------------------Hive函数/link?url=AY7TF64L6nO6j-QcZ83GgfFD_wrXcZPvH-YO_KkigVOTlxNFHn7DCM_qBKJXJArW9okyQ9jjWUvQoYve8sqeeApgCsrcf1ilaYtuv7R1H0e-----------------------------------------------------ALTER TABLE events ADD IF NOT EXISTS PARTITION(appid='100101',ds='') LOCATION 'hdfs://tom:9000/user/hive/warehouse/rawdata/events/3-08-31';
已学习课程数:12
已发表笔记数:57
1、index 创建的时候一定要计算好shard,因为主分片一经确认是不能修改的,每一个分片上面独立运行着一个lucene程序;因此设置主分片的时候尽量考虑未来发展需求,如果当前有1G数据,使用默认分片5个,每一个主分片数据相当于200M数据(hash(ID)%max_shards进行数据分片存储的),但是随着时间推移如果3个月后数据变成100G了,但是主分片还是5个,每一个上面就是20G的数据,会大大降低处理性能;(2.3.1版本增加了对index的动态迁移能力,也许可以快速的处理这一问题)。2、字段的
ejabberd 安装手册1、首先进入http://www.process-one.net/en/ejabberd/downloads 下载对应的版本2、执行文件chmod +x ejabberd-14.12-linux-x86_64-installer.run./ejabberd-14.12-linux-x86_64-installer.run配置好选项(注意安装路径,默认在/opt下面)3、配置mysql数据库a、创建数据库 ejabberdb、找到数据库初始化脚本 /opt/ejabberd-14.
调研:openfire:Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。您可以使用它轻易的构建高效率的即时通信服务器.Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.Ejabberd2:http://wiki.jabbercn.org/Ejabberd2:%E5%AE%89%E8%A3%85%E5%92%8C%E6%93%8D%
CentOS 6.5下面实现docker(/blog/seanlook/5011& 安装记录过程)1、安装epel/153.html&& -----------------------------------------------------------------------------Centos 6.xwget http://dl.fedoraproject.o
简介sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。&sed使用参数 # sed
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有
grep 是一个很常见也很常用的命令,他最重要的功能就是进行字串数据的比对,然后将符合使用者需求的字串列印出来。需要说明的是『grep 在数据中查寻一个字串时,是以 &整行& 为单位来进行数据的撷取的!』也就是说,假如一个文件内有 10 行,其中有两行具有你所搜寻的字串,则将那两行显示在萤幕上,其他的就丢弃了!在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=
共享变量一般情况下,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本。这些变量被复制到每台机器上,并且这些变量在远程机器上 的所有更新都不会传递回驱动程序。通常跨任务的读写变量是低效的,但是,Spark还是为两种常见的使用模式提供了两种有限的共享变量:广播变量(broadcast variable)和累加器(accumulator)广播变量广播变量允许程序员缓存一个只读的变量在每台机器上面,而不是每个任务保存一份拷
备份:mysqldump -uroot-p'root' jpstudy & /opt/mysql_jpstudy_bak.sql恢复:mysql -uroot-p'root' jpstudy & /opt/mysql_jpstudy_bak.sql参数说明:1、备份sql文件名以 -B ,即:mysqldump -uroot-p'root' -B jpstudy &/opt/mysql_jpstudy_bak_B.sql表示:备份的sql语句中有创建数据库和字符集的语句2、参数--com
1.全值匹配2.最佳左前缀法则:如果索引了多列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。3.不在索引列上做任何操作(计算、函数、类型转换),会导致索引失效而转向全表扫描4.存储引擎不能使用索引中范围条件右边的列5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select*6.mysql在使用不等于(!=或者&&)的时候无法使用索引会导致全表扫描7.is null ,is not null也无法使用索引8.like以通配符开头(‘%abc’)
7&脚本权限回收去除其他用户对bin目录下可执行权限,防止其他用户起停tomcat# chmod -R 744bin/*8&访问日志格式规范开启Referer和User-Agetn是为了一旦出现安全问题能够更好的根据日志进行排查&&&&&& &Hostname=&23.83.xx.xx&&appBase=&webapps& &&&&
3&禁用管理端对于tomcat的web管理端属于高危安全隐患,一旦被攻破,黑客通过上传web shell方式取得服务器的控制权,那是非常可怕的。我们需要删除tomcat安装目录下conf/tomcat-
user.xml或者删除webapps下默认的目录和文件。
# mv webapps/*/tmp
4&降权启动tomcattomcat&启动用户权限必须为非root,避免一旦tomcat服务被入侵,获取root权限,普通用户只能使用大于1024端口,如果要想使用80端
1、telnet管理端口保护使用telnet连接进来可以输入SHUTDOWN可以直接关闭tomcat,极不安全,必须关闭。可以修改默认的管理端口8005改为其他端口,修改SHUTDOWN指令为其他字符串。# viconf/server.xml &Server port=&8365& shutdown=&IN0IT&&2 AJP连接端口保护Tomcat&服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的
发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试
发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试发个测试
发个测试发个测试发个测
1、index 创建的时候一定要计算好shard,因为主分片一经确认是不能修改的,每一个分片上面独立运行着一个lucene程序;因此设置主分片的时候尽量考虑未来发展需求,如果当前有1G数据,使用默认分片5个,每一个主分片数据相当于200M数据(hash(ID)%max_shards进行数据分片存储的),但是随着时间推移如果3个月后数据变成100G了,但是主分片还是5个,每一个上面就是20G的数据,会大大降低处理性能;(2.3.1版本增加了对index的动态迁移能力,也许可以快速的处理这一问题)。2、字段的
&&&&动力节点Java培训  下面给出的Java开发中ClassLoader中的描述,哪些描述是正确的(C)&AClassLoader没有层次关系&B所有类中的ClassLoader都是AppClassLoader&C通过classforname(StringclassName)能够动态加载一个类&D不同的ClassLoader加载同一个Class文件,所得的类是相同的&  拓展知识ClassLoader知识
Storm单机+zookeeper集群安装
1、安装zookeeper集群
2、准备机器
10.10.3.44 flumemaster1
10.10.3.129 flumemaster2
10.10.3.132 flumecollector1
10.10.3.115 flumeNg1
3、配置hosts文件(4台服务器上面都需要配置)
vi /etc/hosts
需求:将mysql中的表b05_age的数据导入hive中
yum install sqoop(sqoop必须安装在有hive client的服务器上面,如果没有执行yum install hive)
复制mysql的驱动jar到/usr/lib/sqoop/lib下面
2、异常处理
正确命令:(将关系型数据的表结构复制到hive中)
sudo -u hive sqoop create-hive-table --connect jdbc:my
准备机器:
192.168.1.241
192.168.1.242
192.168.1.243
1、查看ip地址是否为静态ip,如果不是进行配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.1.241
1. 我用的Oracle 客户端最好的工具是PL/SQL Developer, 当然,如果用免费的Toad也不错,感觉现在用Toad的人还是挺多的。
2. Oracle SQL如果想提高速度有几个方式
1)创建索引,尽量建立唯一索引
2)当要创建的索引列的值取值比较小,建议创建Bitmap的索引而不是默认的Btree的。(比如性别,学历等)
3)在where条件后尽量采用数字类型的字段,比varchar的速度快
4)尽量不用用IN,Not In,union这样的条件查
1. 通过freemarker静态化
2. 通过jsp filter静态化
主要思路:请求servlet-&判断静态文件是否存在并且静态文件创建时间是否在阀值之内--&如果不是,则访问数据库生成静态文件-&否则直接跳转静态文件
然后通过urlReWrite直接将访问servlet的请求改为html,完成seo
最后通过SQUID缓存前台数据
一、从数据库中取相应数据并替换掉模板中的对应标签,下面是一个简单的示例
java.io.IOE
java.io.InputS
java.io.OutputS
java.io.OutputStreamW
java.io.PrintW
java.net.InetSocketA
java.util.L
java.util.M
服务器优化说明
WEB服务器优化
更换tomcat5为tomcat6
版本copy测试服务版本即可
加大tomcat内存
修改bin下的catalina.sh文件,增加青绿色部分
JAVA_OPTS='-Xms768m -Xmx1648m -XX:MaxPermSize=512m'
加大tomcat连接数
修改conf下的server.xml文件,修改青绿色部分参数值
s.username,
decode(l.type,'tm','table lock','tx','row lock',null) lock_level,
o.object_name,
o.object_type,
s.serial#,
s.terminal,
s.machine,
s.program,
from v$session s,v$lock l,dba_objects o
where l.sid = s.s
一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边我会做修正;内容应该说绝大部分引用罗宝的文章的,这里要谢谢罗宝兄弟,还有写这篇文章@晨色星空J2EE也给了我很大帮助,这里也谢谢@晨色星空J2EE之前在弄这个的时候,跟群里的一些人讨论过,有的人说,直接用storm不就可以做实时处理了,用不着那么麻烦;其实不然,做软件开发的都知道模块化
1. Storm介绍2. Storm环境配置3. Storm程序流程4. Storm总结及问题1. Storm介绍 1.1&实时流计算背景 随着互联网的更进一步发展,信息浏览、搜索、关系交互传递型,以及电子商务、互联网旅游生活产品等将生活中的流通环节在线化。对于实时性的要求进一步提升,而信息的交互和沟通正在从点对点往信息链甚至信息网的方向发展,这样必然带来数据在各个维度的交叉关联,数据爆炸已不可避免。因此流式处理和NoSQL产品应运而生,分别解决实时框架和数据大 规模存储计算的问题。 流式处理可}

我要回帖

更多关于 shardbatis 教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信