小编YoY*_*oYo的帖子

将jar添加到Spark作业 - spark-submit

真的...已经讨论了很多.

然而,有很多歧义和一些答案提供...包括在jar/executor /驱动程序配置或选项中复制jar引用.

模糊和/或省略的细节

对于每个选项,应澄清含糊不清,不清楚和/或省略的细节:

  • ClassPath如何受到影响
    • 司机
    • 执行程序(用于运行的任务)
    • 一点也不
  • 分隔字符:逗号,冒号,分号
  • 如果提供的文件是自动分发的
    • 任务(每个执行者)
    • 用于远程驱动程序(如果以群集模式运行)
  • 接受的URI类型:本地文件,hdfs,http等
  • 如果复制公共位置,该位置是(hdfs,local?)

它影响的选项:

  1. --jars
  2. SparkContext.addJar(...) 方法
  3. SparkContext.addFile(...) 方法
  4. --conf spark.driver.extraClassPath=... 要么 --driver-class-path ...
  5. --conf spark.driver.extraLibraryPath=..., 要么 --driver-library-path ...
  6. --conf spark.executor.extraClassPath=...
  7. --conf spark.executor.extraLibraryPath=...
  8. 不要忘记,spark-submit的最后一个参数也是一个.jar文件.

我知道在哪里可以找到主要的spark文档,特别是关于如何提交,可用的选项以及JavaDoc.然而,这对我来说仍然有一些漏洞,尽管它也有部分回答.

我希望它不是那么复杂,有人可以给我一个清晰简洁的答案.

如果我从文档中猜测,似乎--jarsSparkContext addJar,addFile方法是自动分发文件的方法,而其他选项只是修改ClassPath.

假设为简单起见,我可以安全地使用3个主要选项同时添加其他应用程序jar文件:

spark-submit --jar additional1.jar,additional2.jar \
  --driver-library-path additional1.jar:additional2.jar \
  --conf spark.executor.extraLibraryPath=additional1.jar:additional2.jar \
  --class MyClass main-application.jar
Run Code Online (Sandbox Code Playgroud)

找到一篇关于一篇文章答案的好文章.然而没有什么新学到的 海报确实很好地评论了本地驱动程序(纱线客户端)和远程驱动程序(纱线群集)之间的区别.记住这一点非常重要.

java scala jar apache-spark spark-submit

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

DateTimeFormatter月份模式字母"L"失败

我注意到java.time.format.DateTimeFormatter无法按预期解析.见下文:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Play {
  public static void tryParse(String d,String f) {
    try { 
      LocalDate.parse(d, DateTimeFormatter.ofPattern(f)); 
      System.out.println("Pass");
    } catch (Exception x) {System.out.println("Fail");}
  }
  public static void main(String[] args) {
    tryParse("26-may-2015","dd-L-yyyy");
    tryParse("26-May-2015","dd-L-yyyy");
    tryParse("26-may-2015","dd-LLL-yyyy");
    tryParse("26-May-2015","dd-LLL-yyyy");
    tryParse("26-may-2015","dd-M-yyyy");
    tryParse("26-May-2015","dd-M-yyyy");
    tryParse("26-may-2015","dd-MMM-yyyy");
    tryParse("26-May-2015","dd-MMM-yyyy");
  }
}
Run Code Online (Sandbox Code Playgroud)

只有最后一次尝试tryParse("26-May-2015","dd-MMM-yyyy");将"通过".根据文档LLL应该能够解析出文本格式.也不是大写'M'与小写'm'的细微差别.

这真的很烦人,因为我无法默认解析Oracle DB默认格式化的字符串

SELECT TO_DATE(SYSDATE,'DD-MON-YYYY') AS dt FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

同样,对于以下程序:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Play {
  public static void output(String f) {
    LocalDate d = LocalDate.now();
    Locale l = …
Run Code Online (Sandbox Code Playgroud)

java date java-8 java-time

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

没有bean属性的JSF组件绑定

以下代码如何工作:

#{aaa.id}
<h:inputText id="txt1" binding="#{aaa}"/>
Run Code Online (Sandbox Code Playgroud)

我的意思是,通常组件绑定工作,通过在bean中指定属性(类型为UIComponent).这里没有bean也没有属性但是名称"aaa"被正确绑定(显示组件id - "txt1").它是如何工作的/指定的位置?

谢谢

更新:JSF2.0规范[pdf](第3.1.5章)说:

"组件绑定是一种特殊的值表达式,可用于促进将组件实例"连接"到JavaBean的相应属性...指定的ValueExpression必须指向UIComponent类型的读写JavaBeans属性(或适当的)子类)."

el jsf-2

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

在会话作用域的JSF支持bean中观察CDI事件

我想知道是否有可能观察到多个JSF 2.0会话作用域支持bean的CDI事件.我以为我可以通过观察事件将事件/数据推送到多个会话.

我已经设置了一个小测试,允许用户使用页面上的按钮触发事件(它与会话范围的支持bean中实际触发事件的方法相关联).我认为,如果我打开两个不同的浏览器,将创建两个会话,并且事件将通知每个会话范围的支持bean.

但是,当运行我的小测试并单击按钮以在其中一个浏览器上触发事件时,我看到该事件仅通知其中一个会话范围的bean.它只通知触发事件的bean(即 - 如果我单击浏览器1中的按钮,则会通知浏览器1中支持会话的会话范围bean,如果我单击浏览器2中的按钮,则支持会话的bean浏览器2被通知).

我的印象是事件会通知所有bean实例.但是,情况似乎并非如此.我能做到吗?我只是设置错误吗?

更新以显示我的代码:

用于触发事件并显示会话范围数据的jsfpage.xhtml片段:

<h:form>
  <h:outputText value="#{BackingBean.property}" />
  <p:commandButton value="Fire Event" action="#{EventFirer.fireEvent}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

接收事件的Session-scoped bean:

@Named
@SessionScoped
public class BackingBean implements Serializable {

    private String property;

    public String getProperty() {
        return property
    }

    public void listenForChange(@Observes EventObj event) {
        logger.log(Level.INFO, "Event received");
        property = event.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

用于触发事件的应用程序作用域bean:

@Named
@ApplicationScoped
public class EventFirer implements Serializable {

    @Inject
    private Event<EventObj> events;

    public String fireEvent() {
        logger.log(Level.INFO, "Event fired");
        events.fire(new EventObj());
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

jsf cdi jsf-2

10
推荐指数
1
解决办法
2609
查看次数

如何在server.xml中为Maven SSH使用提供主机密钥

在Maven中settings.xml,我想定义一个SSH服务器并提供:

  • 要连接的主机
  • 要连接的用户
  • 私钥的位置(用于验证自己)
  • 手动提供主机密钥(验证服务器的公钥)

我不想:

  • 依赖于~/.ssh/known_hosts文件
  • 要求接受主机密钥
  • 忽略主机密钥验证

因此,StackExchange上的现有答案对我没有帮助,其中包括:

这是我如何设想它可以在maven中设置的一个例子setup.xml:

<servers>
  <server>
    <id>gitcloud.myserver.net:8001</id>
    <username>git</username>
    <privateKey>C:/data/home/.ssh/id_rsa</privateKey>
    <configuration>
      <knownHostsProvider implementation="org.apache.maven.wagon.providers.ssh.knownhost.SingleKnownHostProvider">
        <hostKeyChecking>yes</hostKeyChecking>
        <contents>codecloud.web.att.com ssh-rsa XXXXA3NvvFakeSSHKEYsdfADA...doLQ==</contents>
      </knownHostsProvider>
    </configuration>
  </server>
</servers>
Run Code Online (Sandbox Code Playgroud)

jsch maven maven-wagon-plugin

10
推荐指数
1
解决办法
1672
查看次数

如何从Java中的系统设置获取代理设置

我正在寻找如何在Windows下使用Java获取系统代理信息的方式,但我发现只有一种方法.但它对我不起作用.

public static void main(String[] args) throws Throwable {
  System.setProperty("java.net.useSystemProxies", "true");
  System.out.println("detecting proxies");
  List<Proxy> pl = ProxySelector.getDefault().select(new URI("http://ihned.cz/"));
  for (Proxy p : pl)
    System.out.println(p);
  Proxy p = null;
  if (pl.size() > 0) //uses first one
    p = pl.get(0);
  System.out.println(p.address());
  System.out.println("Done");
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,我得到:

detecting proxies
DIRECT
null
Done
Run Code Online (Sandbox Code Playgroud)

Java意味着,我直接位于互联网上.但这是错的.我落后于代理人.我无法为我的电脑获得解决方案.

java proxy networking

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

SQL Server中非常大的表的更新或合并

我需要每天更新一个非常大的(300M记录)和广泛的TABLE1.更新的源数据位于另一个表中UTABLE,该表是行的10%-25%TABLE1但是很窄.两个表都record_id作为主键.

目前,我正在TABLE1使用以下方法重新创建:

<!-- language: sql -->
    1) SELECT (required columns) INTO TMP_TABLE1 
    FROM TABLE1 T join UTABLE U on T.record_id=U.record_id  
    2) DROP TABLE TABLE1  
    3) sp_rename 'TMP_TABLE1', 'TABLE1'
Run Code Online (Sandbox Code Playgroud)

但是,我的服务器上需要将近40分钟(SQL Server为60GB的RAM).我希望获得50%的性能提升 - 我可以尝试其他选项吗?

  1. MERGE并且UPDATE- 类似下面的代码只适用于非常小的UTABLE表 - 在完整大小时,所有内容都会挂起:

    <!-- language: SQL -->
    MERGE TABLE1 as target  
    USING UTABLE as source  
    ON target.record_id = source.record_id   
      WHEN MATCHED THEN   
        UPDATE SET Target.columns=source.columns
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我听说我可以使用ROWCOUNT执行批量MERGE - 但我不认为它对于300M行表来说足够快.

  3. 任何SQL查询提示都有帮助吗?

sql-server-2008 sql-update sql-merge

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

任务和分区之间是什么关系?

我能说......么?

  1. Spark任务的数量等于Spark分区的数量?

  2. 执行程序运行一次(执行程序内部的批处理)是否等于一项任务?

  3. 每个任务只产生一个分区?

  4. (重复 1。)

apache-spark

9
推荐指数
2
解决办法
4499
查看次数

web.xml的<filter-mapping>里面的<servlet-name>,这是什么意思?

我开始学习Struts 2.我偶然发现了这段代码:

web.xml中

...some other codes...

<filter>
    <filter-name>MyFilter</filter-name>
    <display-name>MyFilter</display-name>
    <filter-class>com.xxx.yyy.zzz.MyFilter</filter-class>
</filter>

<filter-mapping>
   <filter-name>MyFilter</filter-name>
   <servlet-name>MyAction</servlet-name>
</filter-mapping>

<listener>
   <listener-class>com.xxx.yyy.StrutsListener</listener-class>
</listener> 

<servlet>
    <servlet-name>MyAction</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>paramName1param-name>
        <param-value>paramVal1</param-value>
    </init-param>
    <init-param>
        <param-name>paramName2</param-name>
        <param-value>paramVal2</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

...some other codes...
Run Code Online (Sandbox Code Playgroud)

我的问题在于这一部分

 <filter-mapping>
      <filter-name>MyFilter</filter-name>
      <servlet-name>MyAction</servlet-name>
 </filter-mapping>
Run Code Online (Sandbox Code Playgroud)


为什么servlet被映射到<filter-mapping>标签内?这种映射意味着什么?还有什么<listener>呢?谢谢你的回复.

java web.xml servlets servlet-filters

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

如何在运行时向@SessionScoped bean提供@RequestScoped bean实例?

我正在阅读JBoss中的这个示例,其中使用@RequestScopedbean备份JSF page来传递用户凭据信息,然后将其保存在@sessionScoped bean.以下是JBoss文档的示例.

@Named @RequestScoped
public class Credentials {
    private String username;
    private String password;
    @NotNull @Length(min=3, max=25)
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    @NotNull @Length(min=6, max=20)
    public String getPassword() { return password; }
    public void setPassword(String password) { this.password = password; }
}
Run Code Online (Sandbox Code Playgroud)

JSF表格:

<h:form>
   <h:panelGrid columns="2" rendered="#{!login.loggedIn}">
      <f:validateBean>
         <h:outputLabel for="username">Username:</h:outputLabel>
         <h:inputText id="username" value="#{credentials.username}"/>
         <h:outputLabel for="password">Password:</h:outputLabel>
         <h:inputSecret id="password" …
Run Code Online (Sandbox Code Playgroud)

jsf ejb java-ee cdi managed-bean

7
推荐指数
1
解决办法
4190
查看次数