小编nor*_*bjd的帖子

指定YARN节点标签时,YARN应用程序无法启动

我正在尝试使用YARN节点标签来标记工作节点,但是当我在YARN上运行应用程序(Spark或简单的YARN应用程序)时,这些应用程序无法启动。

  • 使用Spark时,如果指定--conf spark.yarn.am.nodeLabelExpression="my-label",则无法启动作业(在上阻止Submitted application [...],请参见下面的详细信息)。

  • 对于YARN应用程序(如distributedshell),在指定时-node_label_expression my-label,该应用程序无法启动

这是我到目前为止所做的测试。

YARN节点标签设置

我正在使用Google Dataproc运行我的集群(例如:4个工作线程,2个可抢占节点)。我的目标是强制任何YARN应用程序主机在不可抢占的节点上运行,否则可以随时关闭该节点,从而使应用程序很难失效。

我正在使用YARN属性(--properties)创建集群以启用节点标签:

gcloud dataproc clusters create \
    my-dataproc-cluster \
    --project [PROJECT_ID] \
    --zone [ZONE] \
    --master-machine-type n1-standard-1 \
    --master-boot-disk-size 10 \
    --num-workers 2 \
    --worker-machine-type n1-standard-1 \
    --worker-boot-disk-size 10 \
    --num-preemptible-workers 2 \
    --properties 'yarn:yarn.node-labels.enabled=true,yarn:yarn.node-labels.fs-store.root-dir=/system/yarn/node-labels'
Run Code Online (Sandbox Code Playgroud)

打包的Hadoop和Spark版本:

  • Hadoop版本:2.8.2
  • Spark版本:2.2.0

之后,我创建了一个标签(my-label),并使用该标签更新了两个不可抢先的worker:

yarn rmadmin -addToClusterNodeLabels "my-label(exclusive=false)"
yarn rmadmin -replaceLabelsOnNode "\
    [WORKER_0_NAME].c.[PROJECT_ID].internal=my-label …
Run Code Online (Sandbox Code Playgroud)

hadoop hadoop-yarn apache-spark google-cloud-dataproc

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

Docker卷:使用安装选项指定权限

我正在尝试使用挂载在Docker容器中的命名卷,但是Permission denied尝试在已挂载的文件夹中创建文件时出现错误。因此,我mount在创建卷时尝试使用选项,但是这并不能满足我的需要。

介绍

我完全知道,当docker volume create my_named_volume使用选项-v my_named_volume:/home/user/test或来装入卷(由创建--mount type=volume,source=my_named_volume,target=/home/user/test)时,容器内的文件夹(/home/user/test将属于root用户所有,即使它/home/user属于user在我中创建的用户)Dockerfile

docker run --rm \
    --name test_named_volume \
    --mount type=volume,source=my_named_volume,target=/home/user/test \
    test_named_volume \
    su user -c "touch /home/user/test/a"
Run Code Online (Sandbox Code Playgroud)

然后我得到:

touch: cannot touch '/home/user/test/a': Permission denied
Run Code Online (Sandbox Code Playgroud)

我明白这一点。这就是为什么我mount在创建卷时尝试使用选项的原因。

mount 选项

uid在创建卷时指定了一个,以使用户user能够在该卷中创建文件:

docker volume create my_named_volume \
    --opt o=uid=1000
Run Code Online (Sandbox Code Playgroud)

1000是在my中创建uid的用户的:userDockerfile

FROM    debian:jessie

ENV     HOME …
Run Code Online (Sandbox Code Playgroud)

mount docker docker-volume

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

直接在目标依赖项中定义“如果出错则继续”策略

a这是一个带有 4 个目标( 、bc)的简单 Makefile all。目标b可能会失败(此处用 表示exit 1)。

a:
    echo "a"

b:
    exit 1

c:
    echo "c"

all: a b c
Run Code Online (Sandbox Code Playgroud)

运行时make allc永远不会打印为b失败,c因此目标不会运行。但就我的具体情况而言,c即使b失败,我也想继续竞选。

我想知道是否有一种方法可以直接在 target 的依赖项中定义“如果出现错误则继续”策略all

我知道可以通过以下方式达到所需的行为:

  • 运行make -i all( --ignore-errors) 或make -k all( --keep-going)
  • 使用“递归”make
  • 在失败的命令前添加前缀b--exit 1
  • 分别运行任务make a; …

makefile gnu-make

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

Rust 如何在 Cargo 中定义仅基准测试依赖项?

如何在运行时仅包含用于基准测试的包cargo bench

目标的文档表明这是可能的,但我无法让它工作。

https://doc.rust-lang.org/cargo/reference/cargo-targets.html

benchmarking build rust rust-cargo

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

尝试获得惰性评估以适用于无限流

我正在尝试通过过滤操作实现无限流。我想通过对尾部使用惰性评估来使其不会因堆栈溢出错误而崩溃。

abstract class MyStream[+A] {
  def head: A
  def tail: MyStream[A]

  def #::[B >: A](element: B): MyStream[B] // prepend operator

  def filter(predicate: A => Boolean): MyStream[A]
}

class FiniteStream[+A](val head: A, val tail: MyStream[A]) extends MyStream[A] {    
  override def #::[B >: A](element: B): MyStream[B] = new FiniteStream[B](element, this)

  override def filter(predicate: A => Boolean): MyStream[A] = {
    lazy val filteredTail = tail.filter(predicate)
    if (predicate(head)) filteredTail
    else filteredTail
  }
}

class InfiniteStream[+A](override val head: A, generator: A => A) extends MyStream[A] …
Run Code Online (Sandbox Code Playgroud)

scala stream lazy-evaluation

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

Bigquery“FOR SYSTEM_TIME AS OF”功能保证数据恢复

在 Google BigQuery 中,可以检索过去(至少在过去 7 天)的表(快照)行:

对于 Legacy SQL,我们可以使用快照装饰器

#legacySQL
SELECT * FROM [PROJECT_ID:DATASET.TABLE@-3600000]
Run Code Online (Sandbox Code Playgroud)

对于标准 SQL,我们可以使用FOR SYSTEM_TIME AS OFinFROM子句

#standardSQL
SELECT *
FROM `PROJECT_ID.DATASET.TABLE`
  FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
Run Code Online (Sandbox Code Playgroud)

这两个示例都返回一小时前的快照PROJECT_ID.DATASET.TABLE

但我想知道是否有任何保证检索过去的表数据。一位同事告诉我,他在某处读到(但他再也找不到了)这是一个“尽力而为”的功能,因此可能会丢失一些数据。

此功能是否可以在生产环境中用于数据恢复(例如,如果有人无意中截断了重要的表),只要在错误发生后的 7 天内完成恢复即可?是否能保证我们可以访问特定时间存储的全部数据?

更新

正如 @Pentium10 在评论中正确指出的那样,CREATE OR REPLACE在表上执行作业后恢复旧数据是不可能的。经过一番尝试,我什至会添加使用以下语句类型之一执行作业:

  • CREATE_TABLE( CREATE OR REPLACE)
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE

完全消除了及时检索该特定表数据的能力。

但是,假设我们只使用以下语句类型来修改表数据:

  • INSERT
  • UPDATE
  • DELETE
  • MERGE

是否能保证t时刻的快照数据正是t时刻表中包含的数据?或者这是一个“尽力而为”的功能?

google-bigquery

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