我有多个属性文件,我想从类路径加载.有一个默认设置/src/main/resources属于myapp.jar.我springcontext希望文件在类路径上.即
<util:properties id="Job1Props"
location="classpath:job1.properties"></util:properties>
<util:properties id="Job2Props"
location="classpath:job2.properties"></util:properties>
Run Code Online (Sandbox Code Playgroud)
我还需要使用外部集覆盖这些属性的选项.我有一个外部配置文件夹cwd.根据spring boot doc配置文件夹应该在classpath上.但是从doc中不清楚它是否只会覆盖applicaiton.propertiesconfig中的那个或所有属性.
当我测试它时,只会application.properties被拾取,其余的属性仍然从中获取/src/main/resources.我已经尝试将它们作为逗号分隔列表提供给spring.config.location但是默认设置仍然没有被覆盖.
如何使多个外部配置文件覆盖默认配置文件?
作为我目前使用的解决方法app.config.location(app特定属性),我通过命令行提供.即
java -jar myapp.jar app.config.location=file:./config
Run Code Online (Sandbox Code Playgroud)
然后我改变applicationcontext了
<util:properties id="Job2Props"
location="{app.config.location}/job2.properties"></util:properties>
Run Code Online (Sandbox Code Playgroud)
这就是我在加载Application时在文件和类路径之间进行分离的方法.
EDITS:
//psuedo code
if (StringUtils.isBlank(app.config.location)) {
System.setProperty(APP_CONFIG_LOCATION, "classpath:");
}
Run Code Online (Sandbox Code Playgroud)
我真的不想使用上面的解决方法,并让spring覆盖类路径上的所有外部配置文件,就像它对application.properties文件所做的那样.
我正在尝试过滤内部地图功能.基本上我在经典map-reduce中这样做的方式是mapper在过滤条件满足时不会向上下文写任何东西.我怎样才能与火花相似?我似乎无法从map函数返回null,因为它在shuffle步骤中失败.我可以使用过滤器功能,但是在我可以在地图期间执行相同的任务时,它似乎是不必要的数据集迭代.我也可以尝试使用虚拟键输出null,但这是一个糟糕的解决方法.
我正在尝试使用"tomcat7-maven-plugin"对war文件运行集成测试.当战争被部署时,它基本上会加载spring applicaitoncontext,后者又会在类路径上预期属性文件.在常规的tomcat实例中,我将属性文件保存在我的机器上,然后配置catalina.properties - > common.loader指向该目录.但我不知道如何用这个插件实现这一目标.
这是我试过的插件配置:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- port>8090</port -->
<url>http://localhost:8080/manager/text</url>
<server>TomcatServer</server>
<path>/${project.build.finalName}</path>
<!-- systemProperties>
<systemProperty>
<maven.tomcat.port>8080</maven.tomcat.port>
</systemProperty>
</systemProperties -->
<!-- if you want to use test dependencies rather than only runtime -->
<useTestClasspath>false</useTestClasspath>
<!-- optional if you want to add some extra directories into the classloader -->
<additionalClasspathDirs>
<additionalClasspathDir>${basedir}/src/test/resources</additionalClasspathDir>
</additionalClasspathDirs>
<additionalConfigFilesDir>${basedir}/src/test/resources</additionalConfigFilesDir>
</configuration>
<executions>
<execution>
<id>tomcat-run</id>
<phase>pre-integration-test</phase>
<goals>
<!-- goal>run</goal -->
<goal>run-war-only</goal>
</goals>
<configuration>
<additionalClasspathDirs>
<additionalClasspathDir>${basedir}/src/test/resources</additionalClasspathDir>
</additionalClasspathDirs>
<additionalConfigFilesDir>${basedir}/src/test/resources</additionalConfigFilesDir>
</configuration>
</execution>
<execution>
<id>tomcat-shutdown</id>
<goals>
<goal>shutdown</goal>
</goals>
<phase>post-integration-test</phase> …Run Code Online (Sandbox Code Playgroud) 嗨,我们最近从mr1升级到纱线.我知道容器是一个抽象的概念,但我不明白一个容器可以产生多少jvm任务(map,reduce,filter等),或者其他方式要求是容器可以跨多个映射重复使用或减少任务.我在下面的博客中读到:YARN中的容器是什么?
"each mapper and reducer runs on its own container to be accurate!" 这意味着如果我查看AM日志,我应该看到分配的容器数等于map任务的数量(失败|成功)加上reduce任务的数量是正确的吗?
我知道应用程序生命周期中容器的数量会根据AM请求,拆分,调度程序等而发生变化.
但有没有办法请求给定应用程序的最小容器的初始数量.我认为一种方法是配置公平调度程序队列.但还有什么能够决定这个吗?
在MR的情况下,如果我有mapreduce.map.memory.mb = 3gb和
mapreduce.map.cpu.vcores=4.我也有yarn.scheduler.minimum-allocation-mb = 1024m和yarn.scheduler.minimum-allocation-vcores = 1.
这是否意味着我将获得一个带有4个核心的容器或带有一个核心的4个容器?
还不清楚你在哪里可以指定mapreduce.map.memory.mb和mapreduce.map.cpu.vcores.它们应该设置在客户端节点中还是可以按应用程序设置?
同样来自RM UI或AM UI是否有办法查看当前为给定应用程序分配的容器?
我正在尝试用 mongo+java 编写$in查询$regex。它在 mongo shell 中也不起作用。我的意思是我没有得到任何结果,但也没有查询解析错误。这是我从 Java 调试器在我所说的行得到的最终查询collection.find(finalQuery)
{"$and": [
{"$or": [
{"country": "united states"}
]},
{"businesses": {
"$in": [
{"$regex": "^.*cardinal.*health.*$"},
{"$regex": "^.*the.*hartford.*$"}
]
}}
]}
Run Code Online (Sandbox Code Playgroud)
上述查询的 Java 代码片段:
{"$and": [
{"$or": [
{"country": "united states"}
]},
{"businesses": {
"$in": [
{"$regex": "^.*cardinal.*health.*$"},
{"$regex": "^.*the.*hartford.*$"}
]
}}
]}
Run Code Online (Sandbox Code Playgroud)
但是,以下查询在 mongo shell 中有效,但我不知道如何将其写入 java:
{"registering_organization": {
"$in": [
/^.*cardinal.*health.*$/,
/^.*the.*hartford.*$/
]
}}
Run Code Online (Sandbox Code Playgroud)
如果我们尝试将正则表达式定义为字符串,Java 代码会在正则表达式周围添加双引号。
我试图在项目中一起使用spring boot 1.1.5和apache spark 1.0.2.看起来像apache spark在内部使用Jetty容器,我已经配置spring-boot来使用Tomcat容器.但是,应用程序启动因根本原因导致某些securityException失败.如果我看到完整的堆栈跟踪看起来像spring boot试图初始化"jettyEmbeddedServletContainerFactory",它不应该在第一时间.由于通过火花的码头存在,它可能从类路径中拾取它.如果我从火花中排除jetty并再次运行我没有再次看到相同的错误但是由于没有找到jetty而导致SparkContext初始化失败.我如何告诉spring-boot运行时查找"TomcatEmbeddedServletContainerFactory"而不是jetty?
新手问题,但我经常发现自己使用文件,解析每一行并将其转换为案例类,以便我可以进一步使用更像对象的方式.在java和现在scala我做同样的程序.
case class ABC(v1: Int, v2: String)
val str = line.split("\t")
val v1 = str(0).toInt
val v2 = str(1)
ABC(v1, v2)
Run Code Online (Sandbox Code Playgroud)
有没有更短的方法我可以从数组创建案例类?这变得非常繁琐,因为我总是需要处理大量的字段.
我正在尝试预先拆分 hbase 表。HbaseAdmin java api 是创建一个 hbase 表,它是 startkey、endkey 和区域数量的函数。这是我从 HbaseAdmin 使用的 java apivoid createTable(HTableDescriptor desc, byte[] startKey, byte[] endKey, int numRegions)
关于根据数据集选择 startkey 和 endkey 有什么建议吗?
我的方法是假设我们在数据集中有 100 条记录。我希望数据大约分为 10 个区域,因此每个区域将有大约 10 条记录。所以为了找到startkey,我会说scan '/mytable', {LIMIT => 10}并选择最后一个rowkey作为我的startkey,然后scan '/mytable', {LIMIT => 90}选择最后一个rowkey作为我的endkey。
这种查找 startkey 和 rowkey 的方法看起来不错还是有更好的做法?
编辑 我尝试了以下方法来预拆分空表。所有三个都不像我使用的那样工作。我想我需要加盐才能获得平等分配。
PS> 我只显示一些地区信息
1)
byte[][] splits = new RegionSplitter.HexStringSplit().split(10);
hBaseAdmin.createTable(tabledescriptor, splits);
Run Code Online (Sandbox Code Playgroud)
这给出了具有以下边界的区域:
{
"startkey":"-INFINITY",
"endkey":"11111111",
"numberofrows":3628951,
},
{
"startkey":"11111111",
"endkey":"22222222",
},
{
"startkey":"22222222",
"endkey":"33333333",
},
{
"startkey":"33333333", …Run Code Online (Sandbox Code Playgroud) 有没有更好的方法来做?
val v = map.get(key)
v match {
case None => default
case Some(str) => {
if(str == null) default else str << how to avoid additional null check here
}
}
Run Code Online (Sandbox Code Playgroud) 是否可以定义表示多个数据类型的类型别名?
package object scala {
type SingleDimension = Double
type MultiDimensionMap = Map[String, Double]
type MultiDimensionList = List[Tuple2[String, Double]]
}
Run Code Online (Sandbox Code Playgroud)
例如,我需要一个suptertype让我们说DataDimension只代表三种类型.所以我可以做到以下几点:
trait AbstractDataWorker[T] {
def formula(d: Double): T
}
class multiDimensionWorker extends AbstractDataWorker[MultiDimensionMap] {
type T = MultiDimensionMap
override def formula(d: Double): MultiDimensionMap = {
Map[String, Double]()
}
}
class singleDimensionWorker extends AbstractDataWorker[SingleDimension] {
type T = SingleDimension
override def formula(d: Double): SingleDimension = {
2.0
}
}
Run Code Online (Sandbox Code Playgroud)
但是下面应该给出编译错误.目前它的作品.
class stringDimensionWorker extends AbstractDataWorker[String] {
type T = String
override def …Run Code Online (Sandbox Code Playgroud) java ×5
scala ×3
apache-spark ×2
hadoop ×2
maven ×2
spring-boot ×2
case-class ×1
config ×1
hadoop-yarn ×1
hbase ×1
mongodb ×1
regex ×1
spring ×1
tomcat ×1
tomcat7 ×1