小编D. *_*ler的帖子

在YARN上以群集模式运行Spark应用程序时未使用SparkConf设置

我编写了一个Spark应用程序,它通过SparkConf实例设置一些配置内容,如下所示:

SparkConf conf = new SparkConf().setAppName("Test App Name");

conf.set("spark.driver.cores", "1");
conf.set("spark.driver.memory", "1800m");

conf.set("spark.yarn.am.cores", "1");
conf.set("spark.yarn.am.memory", "1800m");

conf.set("spark.executor.instances", "30");
conf.set("spark.executor.cores", "3");
conf.set("spark.executor.memory", "2048m");

JavaSparkContext sc = new JavaSparkContext(conf);

JavaRDD<String> inputRDD = sc.textFile(...);
...
Run Code Online (Sandbox Code Playgroud)

当我使用命令(master=yarn&deploy-mode=client)运行此应用程序时

spark-submit --class spark.MyApp --master yarn --deploy-mode client /home/myuser/application.jar
Run Code Online (Sandbox Code Playgroud)

一切似乎都运行良好,Spark History UI显示正确的执行者信息: 在此输入图像描述

但是当用(master=yarn&deploy-mode=cluster)运行时

我的Spark UI显示错误的执行程序信息(~512 MB而不是~1400 MB): 在此输入图像描述

此外,我的应用程序名称Test App Name在客户端模式下运行时等于,但spark.MyApp在群集模式下运行时.但是,在群集模式下运行时,似乎会采用某些默认设置.我在这做错了什么?如何为群集模式进行这些设置?

我在由YARN管理的HDP 2.5集群上使用Spark 1.6.2.

memory-management executor hadoop-yarn apache-spark

5
推荐指数
1
解决办法
4260
查看次数

Spark on YARN:执行程序内存少于通过 spark-submit 设置的内存

我在 YARN 集群 (HDP 2.4) 中使用 Spark,设置如下:

  • 1 个主节点
    • 64 GB 内存(48 GB 可用)
    • 12核(8核可用)
  • 5个从节点
    • 每个 64 GB RAM(48 GB 可用)
    • 每个 12 个内核(8 个可用内核)
  • 纱线设置
    • 所有容器(一台主机)的内存:48 GB
    • 最小容器大小 = 最大容器大小 = 6 GB
    • 集群中的 vcores = 40(5 x 8 个工人核心)
    • 最小#vcores/container = 最大#vcores/container = 1

当我使用命令运行我的 spark 应用程序时,spark-submit --num-executors 10 --executor-cores 1 --executor-memory 5g ...Spark 应该为每个执行程序提供5 GB 的 RAM(由于一些开销内存约为 10%,我将内存设置为 5g)。

但是当我查看 Spark UI 时,我看到每个执行程序只有 3.4 GB 的内存,请看截图:

截屏

有人可以解释为什么分配的内存这么少吗?

containers executor hadoop-yarn hortonworks-data-platform apache-spark

4
推荐指数
1
解决办法
2312
查看次数

Kerberos:Windows 8.1 上的 kinit 导致空票缓存

我安装Kerberos for Windows在新设置的 Windows 8.1 机器上。

  • 域:未设置
  • 工作组:工作组

我编辑了目录中的krb5.ini文件,C:\ProgramData\MIT\Kerberos5如下所示:

[libdefaults]
  default_realm = HSHADOOPCLUSTER.DE

[realms]
  HSHADOOPCLUSTER.DE = {
    admin_server = had-job.server.de
    kdc = had-job.server.de
  }
Run Code Online (Sandbox Code Playgroud)

重新启动后,我kinit -kt daniel.keytab daniel通过控制台对 Realm进行了身份验证。还通过用户和密码获取票证Kerberos Ticket Manager似乎工作正常,因为票证显示在 UI 中。

我想知道的是,当我调用 a 时,klist我会得到一个空列表,它说的是cached tickets: 0

在此处输入图片说明

这对我来说似乎不正常,因为我的 Ubuntu 计算机klistkinit.

我究竟做错了什么?还有一些配置要做吗?有时我读到一个ksetup工具,但我不知道这里哪些设置是必要的,哪些不是......

================================================== ==========

我设置后

[libdefaults] 
  ... 
  default_ccache_name = FILE:C:/ProgramData/Kerberos/krb5cc_%{uid}
Run Code Online (Sandbox Code Playgroud)

在 my 中krb5.confkinit通过控制台和 Kerberos 票证管理器的命令在指定路径中创建一个文件。到目前为止,一切看起来都很好。

但是:该 …

kerberos windows-authentication klist

4
推荐指数
1
解决办法
7264
查看次数

Apache Spark:使用文件夹结构来减少分析的运行时间

我想通过将巨大的csv文件细分为不同的分区来优化Spark应用程序的运行时,这取决于它们的特性.

例如,我有一个客户ID(整数,A),与日期的列(月+年,如01.2015,B)一列,并与产品ID列(整数,C)(多列有产品的具体数据,而不是分区所需的).

我想构建一个类似的文件夹结构/customer/a/date/b/product/c.当用户想要了解2016年1月出售的客户X的产品信息时,他可以加载并分析保存的文件/customer/X/date/01.2016/*.

是否有可能通过通配符加载此类文件夹结构?还应该可以加载特定时间范围的所有客户或产品,例如01.2015至2015年9月.是否可以使用通配符/customer/*/date/*.2015/product/c?或者如何解决这样的问题呢?

我想对数据进行一次分区,然后在分析中加​​载特定文件,以减少这些作业的运行时间(忽略分区的额外工作).

解决方案:使用Parquet文件

我更改了我的Spark应用程序以将我的数据保存到Parquet文件,现在一切正常,我可以通过给出文件夹结构来预先选择数据.这是我的代码片段:

JavaRDD<Article> goodRdd = ...

SQLContext sqlContext = new SQLContext(sc);

List<StructField> fields = new ArrayList<StructField>();
fields.add(DataTypes.createStructField("keyStore", DataTypes.IntegerType, false));
fields.add(DataTypes.createStructField("textArticle", DataTypes.StringType, false));

StructType schema = DataTypes.createStructType(fields);

JavaRDD<Row> rowRDD = goodRdd.map(new Function<Article, Row>() {
    public Row call(Article article) throws Exception {
        return RowFactory.create(article.getKeyStore(), article.getTextArticle());
    }
});

DataFrame storeDataFrame = sqlContext.createDataFrame(rowRDD, schema);

// WRITE PARQUET FILES
 storeDataFrame.write().partitionBy(fields.get(0).name()).parquet("hdfs://hdfs-master:8020/user/test/parquet/");

// READ PARQUET FILES
DataFrame read = sqlContext.read().option("basePath", "hdfs://hdfs-master:8020/user/test/parquet/").parquet("hdfs://hdfs-master:8020/user/test/parquet/keyStore=1/");

System.out.println("READ : " + read.count()); …
Run Code Online (Sandbox Code Playgroud)

wildcard hdfs apache-spark

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

C#通过regex查找匹配的字符串

我想知道,我的字符串是否包含#1,#a,#abc,#123,#abc123dsds等文本...('#'字符包含一个或多个字符(数字和字母).

到目前为止我的代码不起作用:

string test = "#123";
boolean matches = test.Contains("#.+");
Run Code Online (Sandbox Code Playgroud)

matches变量false.

c# regex

0
推荐指数
1
解决办法
117
查看次数