我每天有大约 100 GB 的数据,我使用 Spark 将这些数据写入 S3。写入格式为镶木地板。编写此程序的应用程序运行 Spark 2.3
100 GB 的数据被进一步分区,其中最大的分区是 30 GB。对于这种情况,让我们只考虑 30 GB 的分区。
我们计划在 Spark 2.4 中迁移整个数据并重写到 S3。最初我们在写入 S3 时没有决定文件大小和块大小。现在我们要重写所有内容,我们要考虑最佳文件大小和镶木地板块大小。
[操作系统 - macOS,外壳 - Bash]
我有一个小的 bash 脚本,它根据输入参数生成 ssh 命令。生成的命令是:
ssh -o ProxyCommand='ssh <bastion_name> -W %h:%p' -A -D <port> <username>@<destination_host_name>
Run Code Online (Sandbox Code Playgroud)
该脚本将此命令存储在变量 cmd 中,其中
cmd="ssh -o ProxyCommand='ssh $1 -W %h:%p' -A -D $3 $4@$2"
Run Code Online (Sandbox Code Playgroud)
其中 $1 = 堡垒名称、$2 = 目标主机名称、$3 = 端口、$4 = 用户名。
然后它尝试执行命令,例如
echo "Executing --> $cmd"
$cmd
Run Code Online (Sandbox Code Playgroud)
但它因以下错误而终止,
Bad stdio forwarding specification '%h:%p''
Run Code Online (Sandbox Code Playgroud)
但由于我回显了 cmd,因此我直接在终端中复制粘贴,并且它运行时没有任何错误。
请注意,bastion_name 是通过 ssh 配置解析的,该配置具有为该堡垒主机定义的用户名和其他属性。
因为显然命令是正确的,所以这里有什么问题?