小编zeo*_*dtr的帖子

Spring Boot:如何使用application.properties设置日志记录级别?

这是一个非常简单的问题,但我找不到相关信息.
(也许我对Java框架的了解非常严重)

如何使用application.properties设置日志记录级别?
并记录文件位置等?

logging spring-boot

267
推荐指数
13
解决办法
37万
查看次数

Apache Spark:核心数与执行者数量

我试图了解在YARN上运行Spark作业时内核数量和执行程序数量之间的关系.

测试环境如下:

  • 数据节点数:3
  • 数据节点机器规格:
    • CPU:Core i7-4790(核心数:4,线程数:8)
    • 内存:32GB(8GB x 4)
    • 硬盘:8TB(2TB x 4)
  • 网络:1Gb

  • Spark版本:1.0.0

  • Hadoop版本:2.4.0(Hortonworks HDP 2.1)

  • Spark作业流程:sc.textFile - > filter - > map - > filter - > mapToPair - > reduceByKey - > map - > saveAsTextFile

  • 输入数据

    • 类型:单个文本文件
    • 尺寸:165GB
    • 行数:454,568,833
  • 产量

    • 第二次过滤后的行数:310,640,717
    • 结果文件的行数:99,848,268
    • 结果文件的大小:41GB

该作业使用以下配置运行:

  1. --master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3 (每个数据节点的执行程序,使用尽可能多的核心)

  2. --master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3 (核心数量减少)

  3. --master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12 (少核心,更多执行者)

经过的时间:

  1. 50分15秒

  2. 55分48秒

  3. 31分23秒

令我惊讶的是,(3)更快. …

hadoop hadoop-yarn apache-spark

178
推荐指数
5
解决办法
8万
查看次数

Spring Boot:覆盖图标

如何覆盖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) …

favicon spring-mvc spring-boot

75
推荐指数
4
解决办法
6万
查看次数

Spring Boot:是否可以使用胖jar在任意目录中使用外部application.properties文件?

是否可以拥有多个application.properties文件?(编辑:请注意,这个问题演变为标题上的问题.)

我试着有2个文件.

  • 第一个是在应用程序Jar中的根文件夹上.
  • 第二个是在classpath中指定的目录.

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(扩展)版本,可能存在类路径顺序问题.

(顺便说一句,我将问题的标题更改为更具体地解决了这个问题.)

configuration spring spring-boot

54
推荐指数
4
解决办法
8万
查看次数

Apache Spark不会删除临时目录

火花程序完成后,临时目录中还有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'目录的模块方法如下:

  • DiskBlockManager.createLocalDirs
  • HttpFileServer.initialize
  • SparkEnv.sparkFilesDir

他们(最终)调用Utils.getOrCreateLocalRootDirs然后调用Utils.createDirectory,它故意不标记目录以进行自动删除.

createDirectory方法的注释说:"保证目录是新创建的,并且没有标记为自动删除."

我不知道为什么他们没有标记.这真的是故意的吗?

apache-spark

33
推荐指数
3
解决办法
3万
查看次数

Spring Boot:如何将另一个WAR文件添加到嵌入式tomcat?

Spring Boot的嵌入式tomcat非常方便,适用于开发和部署.

但是如果应该添加另一个(第三方)WAR文件(例如,GeoServer)呢?

也许以下是正常程序:

  1. 安装普通的Tomcat服务器.
  2. 将Spring Boot应用程序构建为WAR文件,并将其添加到Tomcat的webapps文件夹中.
  3. 还要将另一个(第三方)WAR文件添加到webapps文件夹.

但如果可以进行以下配置,那就太好了.

  1. 将Spring启动应用程序构建为独立的Jar,其中包括嵌入式Tomcat.
  2. 部署Spring启动应用程序Jar.
  3. 将另一个(第三方)WAR文件添加到嵌入式Tomcat识别的文件夹中.
  4. 使用嵌入式Tomcat提供Spring引导应用程序内容和另一个WAR的内容.

怎么做到呢?

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中.

spring tomcat spring-boot

28
推荐指数
2
解决办法
1万
查看次数

YARN上的Apache Spark:大量输入数据文件(在spark中组合多个输入文件)

需要帮助实施最佳实践.操作环境如下:

  • 日志数据文件不定期到达.
  • 日志数据文件的大小为3.9KB到8.5MB.平均约1MB.
  • 数据文件的记录数从13行到22000行.平均约2700行.
  • 必须在聚合之前对数据文件进行后处理.
  • 后处理算法可以改变.
  • 后处理文件与原始数据文件分开管理,因为后处理算法可能会更改.
  • 执行每日聚合.必须逐个记录所有后处理数据文件,并计算聚合(平均值,最大最小值...).
  • 由于聚合是细粒度的,因此聚合后的记录数量不会太少.它可以是原始记录数量的大约一半.
  • 在某一点上,后处理文件的数量可以是大约200,000.
  • 应该能够单独删除数据文件.

在测试中,我尝试使用带有glob路径的sc.textFile()从Spark处理160,000个后处理文件,但在驱动程序进程中出现OutOfMemory异常失败.

处理此类数据的最佳做法是什么?我应该使用HBase而不是普通文件来保存后处理数据吗?

hadoop hadoop-yarn apache-spark

15
推荐指数
1
解决办法
7536
查看次数

Vue 3:getCurrentInstance() 是否已弃用?

我在一些旧的(?)文档和代码中看到了对getCurrentInstance()函数的引用,但在当前的 Vue 3 文档中找不到它。

getCurrentInstance()弃用吗?

如果有,原因是什么?(inject()考虑够了吗?)如果没有,为什么我在文档中找不到它?

vue.js vuejs3

15
推荐指数
2
解决办法
2万
查看次数

Apache Spark YARN模式启动时间过长(10秒以上)

我正在使用YARN-client或YARN-cluster模式运行spark应用程序.

但启动似乎需要很长时间.

初始化spark上下文需要10秒以上.

这是正常的吗?还是可以优化?

环境如下:

  • Hadoop:Hortonworks HDP 2.2(Hadoop 2.6)(具有3个数据节点的微小测试集群)
  • Spark:1.3.1
  • 客户端:Windows 7,但在CentOS 6.6上的结果相似

以下是应用程序日志的启动部分.(编辑了一些私人信息)

'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)

hadoop hadoop-yarn apache-spark

14
推荐指数
1
解决办法
5880
查看次数

Spring Boot:如何外部化JDBC数据源配置?

我有以下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 jdbc spring-boot

12
推荐指数
1
解决办法
3万
查看次数