这是一个非常简单的问题,但我找不到相关信息.
(也许我对Java框架的了解非常严重)
如何使用application.properties设置日志记录级别?
并记录文件位置等?
我试图了解在YARN上运行Spark作业时内核数量和执行程序数量之间的关系.
测试环境如下:
网络:1Gb
Spark版本:1.0.0
Hadoop版本:2.4.0(Hortonworks HDP 2.1)
Spark作业流程:sc.textFile - > filter - > map - > filter - > mapToPair - > reduceByKey - > map - > saveAsTextFile
输入数据
产量
该作业使用以下配置运行:
--master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3
(每个数据节点的执行程序,使用尽可能多的核心)
--master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3
(核心数量减少)
--master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12
(少核心,更多执行者)
经过的时间:
50分15秒
55分48秒
31分23秒
令我惊讶的是,(3)更快. …
如何覆盖Spring Boot的图标?
注意:这是我的另一个问题,它提供了另一个不涉及任何编码的解决方案:Spring Boot:是否可以在胖jar的任意目录中使用外部application.properties文件?它适用于application.properties,但也可以应用于favicon.事实上,我现在正在使用该方法进行favicon覆盖.
如果我实现了一个具有@EnableWebMvc的类,则不会加载Spring Boot的WebMvcAutoConfiguration类,并且我可以通过将其放置到静态内容的根目录来提供我自己的favicon.
否则,WebMvcAutoConfiguration会注册faviconRequestHandler bean,(参见源代码https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ web/WebMvcAutoConfiguration.java)它提供了"绿叶"图标,该图标位于Spring Boot的主资源目录中.
如何在不实现自己拥有@EnableWebMvc的类的情况下覆盖它,从而禁用Spring Boot的WebMvcAutoConfiguration类的整个默认配置功能?
此外,由于我希望在客户端(Web浏览器)端尽快更新图标文件,我想将favicon文件的缓存周期设置为0.(如下面的代码,我用于我的'static'webapp内容和脚本文件,我必须在更改文件后尽快在客户端更新.)
public void addResourceHandlers(ResourceHandlerRegistry registry)
{
registry.addResourceHandler("/**")
.addResourceLocations("/")
.setCachePeriod(0);
}
Run Code Online (Sandbox Code Playgroud)
因此,只是找到保存favicon.ico文件的地方,Spring Boot的faviconRequestHandler荣誉可能还不够.
UPDATE
现在我知道我可以通过将一个favicon文件放到src/main/resources目录来覆盖默认值.但缓存期问题仍然存在.
此外,最好将favicon文件放在放置静态Web文件的目录中,而不是放在资源目录中.
UPDATE
好的,我设法覆盖了默认的一个.我做的是如下:
@Configuration
public class WebMvcConfiguration
{
@Bean
public WebMvcConfigurerAdapter faviconWebMvcConfiguration()
{
return new FaviconWebMvcConfiguration();
}
public class FaviconWebMvcConfiguration extends WebMvcConfigurerAdapter
{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
{
registry.setOrder(Integer.MIN_VALUE);
registry.addResourceHandler("/favicon.ico")
.addResourceLocations("/")
.setCachePeriod(0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我通过调用registry.setOrder(Integer.MIN_VALUE)来添加具有最高顺序的资源处理程序来覆盖默认值.
由于Spring Boot中的默认值具有订单值(Integer.MIN_VALUE + 1),(请参阅https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/中的 FaviconConfiguration类src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java)我的处理程序获胜.
这个可以吗?还有另一种方式(比我做的更温和)?
UPDATE
这不好.当我打电话时registry.setOrder(Integer.MIN_VALUE) …
是否可以拥有多个application.properties文件?(编辑:请注意,这个问题演变为标题上的问题.)
我试着有2个文件.
2个文件都命名为'application.properties'.
是否可以"合并"两个文件的内容?(并且第二个属性值覆盖第一个属性值)或者,如果我有一个文件,则忽略另一个文件?
更新1:可以"合并"内容.昨天似乎第一个被忽略了,但似乎是因为当时有些东西被打破了.现在它运作良好.
更新2:它又回来了!同样,只应用了两个文件中的一个.这很奇怪......它是在我使用Spring Tool Suite构建app jar文件之后开始的.似乎Jar版本总是忽略第二个(在类路径中),而在STS上运行的扩展版本的行为会有所不同.我可以从哪里开始调查?
更新3:
Jar版本的行为实际上是正确的.这是java.exe的规范.如果指定了-jar选项,则java.exe将忽略-classpath选项和CLASSPATH环境变量,并且类路径将仅包含jar文件.因此,类路径上的第二个application.properties文件将被忽略.
现在,我如何才能加载类路径上的第二个application.properties?
更新4:
我设法在使用-jar选项时在外部路径中加载application.properties文件.
关键是PropertiesLauncher.
要使用PropertiesLauncher,必须像这样更改pom.xml文件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <!-- added -->
<layout>ZIP</layout> <!-- to use PropertiesLaunchar -->
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
为此,我引用了以下StackOverflow问题:spring boot属性启动程序无法使用.BTW,在Spring Boot Maven插件文档(http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/maven-plugin/repackage-mojo.html)中,没有提到指定ZIP触发器使用了PropertiesLauncher.(也许在另一份文件中?)
在构建jar文件之后,我可以看到通过检查jar中META-INF/MENIFEST.MF中的Main-Class属性来使用PropertiesLauncher.
现在,我可以按如下方式运行jar(在Windows中):
java -Dloader.path=file:///C:/My/External/Dir,MyApp-0.0.1-SNAPSHOT.jar -jar MyApp-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
请注意,应用程序jar文件包含在loader.path中.
现在加载了C:\ My\External\Dir\config中的application.properties文件.
作为奖励,jar中也可以访问该目录中的任何文件(例如,静态html文件),因为它位于加载器路径中.
对于UPDATE 2中提到的非jar(扩展)版本,可能存在类路径顺序问题.
(顺便说一句,我将问题的标题更改为更具体地解决了这个问题.)
火花程序完成后,临时目录中还有3个临时目录.目录名称是这样的:spark-2e389487-40cc-4a82-a5c7-353c0feefbb7
目录是空的.
当Spark程序在Windows上运行时,一个快速的DLL文件也会保留在临时目录中.文件名是这样的:snappy-1.0.4.1-6e117df4-97b6-4d69-bf9d-71c4a627940c-snappyjava
每次Spark程序运行时都会创建它们.因此文件和目录的数量不断增长.
如何删除它们?
使用Hadoop 2.6,Spark版本为1.3.1.
UPDATE
我已经跟踪了火花源代码.
创建3'temp'目录的模块方法如下:
他们(最终)调用Utils.getOrCreateLocalRootDirs然后调用Utils.createDirectory,它故意不标记目录以进行自动删除.
createDirectory方法的注释说:"保证目录是新创建的,并且没有标记为自动删除."
我不知道为什么他们没有标记.这真的是故意的吗?
Spring Boot的嵌入式tomcat非常方便,适用于开发和部署.
但是如果应该添加另一个(第三方)WAR文件(例如,GeoServer)呢?
也许以下是正常程序:
但如果可以进行以下配置,那就太好了.
怎么做到呢?
UPDATE
当spring引导应用程序由胖jar(=可执行jar)构成时,答案中的代码是不够的.修订后的内容如下:
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat) {
try {
Context context = tomcat.addWebapp("/foo", "/path/to/foo.war");
WebappLoader loader =
new WebappLoader(Thread.currentThread().getContextClassLoader());
context.setLoader(loader);
} catch (ServletException ex) {
throw new IllegalStateException("Failed to add webapp", ex);
}
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}
Run Code Online (Sandbox Code Playgroud)
由于系统类加载器无法加载胖jar中的jar文件,因此必须指定显式父类加载器.否则,附加WAR无法将库jar加载到添加了WAR的spring boot应用程序的fat jar中.
需要帮助实施最佳实践.操作环境如下:
在测试中,我尝试使用带有glob路径的sc.textFile()从Spark处理160,000个后处理文件,但在驱动程序进程中出现OutOfMemory异常失败.
处理此类数据的最佳做法是什么?我应该使用HBase而不是普通文件来保存后处理数据吗?
我在一些旧的(?)文档和代码中看到了对getCurrentInstance()
函数的引用,但在当前的 Vue 3 文档中找不到它。
已getCurrentInstance()
弃用吗?
如果有,原因是什么?(inject()
考虑够了吗?)如果没有,为什么我在文档中找不到它?
我正在使用YARN-client或YARN-cluster模式运行spark应用程序.
但启动似乎需要很长时间.
初始化spark上下文需要10秒以上.
这是正常的吗?还是可以优化?
环境如下:
以下是应用程序日志的启动部分.(编辑了一些私人信息)
'Main:在第一行初始化上下文'和'MainProcessor:在最后一行删除以前的输出文件'是应用程序的日志.其他人来自Spark本身.显示此日志后将执行应用程序逻辑.
15/05/07 09:18:31 INFO Main: Initializing context
15/05/07 09:18:31 INFO SparkContext: Running Spark version 1.3.1
15/05/07 09:18:31 INFO SecurityManager: Changing view acls to: myuser,myapp
15/05/07 09:18:31 INFO SecurityManager: Changing modify acls to: myuser,myapp
15/05/07 09:18:31 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(myuser, myapp); users with modify permissions: Set(myuser, myapp)
15/05/07 09:18:31 INFO Slf4jLogger: Slf4jLogger started
15/05/07 09:18:31 INFO Remoting: Starting …
Run Code Online (Sandbox Code Playgroud) 我有以下Spring Boot控制器代码可用.(一些敏感文本被替换)
package com.sample.server;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
public class DetailReportController
{
@RequestMapping(value="/report/detail", method=RequestMethod.GET)
public List<UFGroup> detailReport()
{
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("net.sourceforge.jtds.jdbc.Driver");
dataSource.setUrl("jdbc:jtds:sqlserver://111.11.11.11/DataBaseName;user=sa;password=password");
JdbcTemplate jt = new JdbcTemplate(dataSource);
List<UFGroup> results = jt.query(
"select NID, SCode, SName from UFGroup",
new RowMapper<UFGroup>()
{
@Override
public UFGroup mapRow(ResultSet rs, int rowNum) throws SQLException
{
return new UFGroup(rs.getInt("NID"), rs.getString("SCode"),
rs.getString("SName"));
}
});
return results;
}
private static …
Run Code Online (Sandbox Code Playgroud) spring-boot ×5
apache-spark ×4
hadoop ×3
hadoop-yarn ×3
spring ×3
favicon ×1
jdbc ×1
logging ×1
spring-mvc ×1
tomcat ×1
vue.js ×1
vuejs3 ×1