本方案参考滴滴的fastIndex: 滴滴FastIndex
采用spark改写,部分特性适应了公司的原始流程,会有不一样的地方。如您采用的是spark saveToEs需要通过该方法进行改写,可参考。
git地址为: https://github.com/Dengyu123/fast-es-rdd
hadoop和mongodb的连接器<dependency>
<groupId>org.mongodb.mongo-hadoop</groupId>
<artifactId>mongo-hadoop-core</artifactId>
<version>1.4.2</version>
</dependency>
java连接mongodb连接器
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.13.0</version>
</dependency>
2.使用示例
import com.mongodb.hadoop.MongoOutputFormat
import org.apache.hadoop.conf.Configuration
import org.apache.spark.api.java.JavaPairRDD
import org.apache.spark.api.java.JavaRDD
import org.apache.spark.api.java.JavaSparkContext
import org.apache.spark.api.java.function.Function
import org.bson.BSONObject
import scala.Tuple2
import java.util.Date
import java.util.List
/**
* Created by Administrator on 2015/12/8.
*/
public class ConnectMongo {
public static void main(String args[]){
JavaSparkContext sc =new JavaSparkContext("local","test")
Configuration config =new Configuration()
//解释 主机:端口号/数据库名.Collection名
config.set("mongo.input.uri","mongodb://127.0.0.1:27017/lang.sanlu")
config.set("mongo.output.uri", "mongodb://127.0.0.1:27017/lang.output")
//读取
JavaPairRDD<Object, BSONObject>mongoRDD = sc.newAPIHadoopRDD(config, com.mongodb.hadoop.MongoInputFormat.class, Object.class, BSONObject.class)
//BasonObject->text
JavaRDD<text>result = mongoRDD.map(
new Function<Tuple2<Object, BSONObject>, text>() {
public text call(Tuple2<Object, BSONObject>v1) throws Exception {
String title = (String) v1._2().get("title")
Date date =(Date) v1._2().get("date")
List<String>paragraph = (List<String>) v1._2().get("paragraph")
return new text(title,date,paragraph)
}
}
)
//copy lang.sanlu to lang.output
mongoRDD.saveAsNewAPIHadoopFile("file:///copy",Object.class, Object.class, MongoOutputFormat.class, config)
}
}
使用MySQL数据库,有一个容易出现的问题——Too many connections。连接数超过。我们知道,由于SUPER权限有很多特权,因此不会把这个权限给予应用的账号。但是,当应用异常或者数据库异常,达到最大连接数的时候,用管理账号登录,有时候仍然会报Too many connections。此时,如果应用不能及时处理,数据库这边就很难办了。
所以,当应用异常并且频繁尝试建立连接的时候,常能占据那第max_connections+1个连接。super账号由于拿不到线程,因此也是Too many connections了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)