我正在尝试用来spark-submit在spark集群中执行我的python代码.
通常我们spark-submit使用如下的python代码运行.
# Run a Python application on a cluster
./bin/spark-submit \
--master spark://207.184.161.138:7077 \
my_python_code.py \
1000
Run Code Online (Sandbox Code Playgroud)
但我想my_python_code.py通过传递几个参数来运行是否有聪明的方法来传递参数?
问题:我们在群集模式下启动pm2,并且pm2启动的进程数量与cpu核心一样多,pm2也尝试启动与cpu核心一样多的节点服务器,但问题是它无法启动尽可能多的服务器,因为它们所有尝试并在3000的同一端口上启动,该端口已被第一个节点服务器占用
我们使用nginx并代理它到3000端口.
我们在集群模式下使用pm2,配置如下:
{
"apps" : [{
"script" : "npm",
"instances" : "max",
"cwd":"/home/nginx/my-pwa" ,
"args" : "run start:server:prod",
"exec_mode" : "cluster",
"wait_ready": true,
"kill_timeout" : 4000,
"watch" : true
}]
}
Run Code Online (Sandbox Code Playgroud)
run start:server:prod是我们启动服务器的脚本
我们的快递服务器
var app = require('../src/app');
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
const http = require('http');
server = http.createServer(app);
server.listen(port));
server.on('error', onError);
server.on('listening', onListening);
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? …Run Code Online (Sandbox Code Playgroud) 我有一个简单的 Pyspark 代码
导入 pyarrow fs = pyarrow.hdfs.connect()
如果我在“客户端”模式下使用spark-submit运行它,它工作正常,但在“集群”模式下,会抛出错误
Traceback (most recent call last):
File "t3.py", line 17, in <module>
fs = pa.hdfs.connect()
File "/opt/anaconda/3.6/lib/python3.6/site-packages/pyarrow/hdfs.py", line 181, in connect
kerb_ticket=kerb_ticket, driver=driver)
File "/opt/anaconda/3.6/lib/python3.6/site-packages/pyarrow/hdfs.py", line 37, in __init__
self._connect(host, port, user, kerb_ticket, driver)
File "io-hdfs.pxi", line 99, in pyarrow.lib.HadoopFileSystem._connect
File "error.pxi", line 79, in pyarrow.lib.check_status
pyarrow.lib.ArrowIOError: HDFS connection failed
Run Code Online (Sandbox Code Playgroud)
所有必需的 python 库都安装在我的 Hadoop 集群中的每个节点上。我已经通过在 pyspark 每个节点上单独测试此代码来进行验证。
但无法通过集群模式下的spark-submit使其工作?
有任何想法吗?
香卡尔
以前,我们使用 Redis 时通过 AWS ElastiCache 禁用了集群模式。
我们使用 Jedis 的 Java 代码指向主单节点端点,用于读取和写入。
我们现在已经启用了集群模式。
我们现在已更改代码以指向新 Redis 集群的配置端点,但是现在每当接收请求时都会抛出错误,请参见下文:
Redis 不可用。继续使用队列 requestMessage 代替。org.springframework.data.redis.ClusterRedirectException:重定向:插槽 2356 到 [ipaddress]:6379。嵌套异常是 redis.clients.jedis.exceptions.JedisMovedDataException: MOVED 2356 [ipaddress]:6379
我们的配置代码如下:
@Bean(name = "redisTemplate")
public RedisTemplate<String, String> getRedisTemplate(JedisConnectionFactory jedisConnectionFactory) {
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(jedisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
@Bean
JedisConnectionFactory jedisConnectionFactory(Configuration config) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName(config.get(HOST));
jedisConnectionFactory.setPort(config.getInt(PORT));
jedisConnectionFactory.setUsePool(true);
jedisConnectionFactory.setPoolConfig(createJedisPoolConfig(config));
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
}
JedisPoolConfig createJedisPoolConfig(Config config) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(config.getInt(MAX, …Run Code Online (Sandbox Code Playgroud) cluster-mode ×4
apache-spark ×1
express ×1
java ×1
jedis ×1
node.js ×1
pm2 ×1
pyspark ×1
python ×1
redis ×1
spark-submit ×1