0

我正在尝试使用定义的自己的 .yaml 文件运行 cassandra-strees,但我仍然遇到错误:

java.io.IOError: java.io.FileNotFoundException: /home/kenik/Documents/stress.yaml (No such file or directory)

这对我来说很麻烦。让我解释一下为什么。

首先是我的 stress.yaml 文件:

# Keyspace name and create CQL
#

CREATE KEYSPACE weatherteller
WITH REPLICATION = { 
    'class' : 'SimpleStrategy',
    'datacenter1' : 1
};
#
# Table name and create CQL
#
table: weather
table_definition:
  CREATE TABLE weatherteller.weather (
        weatherid bigint,
        measurementdate timestamp,
        summary varchar,
        preciptype varchar,
        temperature double,
        apparenttemperature double, 
        humidity double,
        windspeed double,
        windbearing double,
        visibility double,
        pressure double,
        dailysummary varchar,
        city varchar,
        PRIMARY KEY (weatherid, measurementdate, city)
   )
#
columnspec:
  - name: weatherid
    size: uniform(1..64)
  - name: measurementdate
    cluster: uniform(20...40)
  - name: summary
    size: gaussian(100...500)
  - name: preciptype
    size: uniform(1..32)
  - name: temperature
    size: uniform(1..32)
  - name: apparenttemperature
    size: uniform(1..32)
  - name: humidity
    size: uniform(1..10)
  - name: windspeed
    size: uniform(1..10)
  - name: windbearing
    size: uniform(1..10)
  - name: visibility
    size: uniform(1..10)
  - name: pressure
    size: uniform(1..10)  
  - name: dailysummary
    size: uniform(1..100)  
  - name: city
    size: uniform(1..100)  


insert:
  partitions: fixed(1)
  select: fixed(1)/500 
  batchtype: UNLOGGED

queries:
  weather:
    cql: select * from weather where weatherid = ? and measurementdate = ? and city = ?
    fields: samerow

我运行的命令:

docker exec -it cassandra cassandra-stress user profile=file:///home/kenik/Documents/stress.yaml no-warmup ops\(insert=1,weather=1\) n=10000 -graph file=./stress.html

'cassandra' 是我当前正在运行的容器。

文件的绝对路径stress.yaml/home/kenik/Documents/stress.yaml我使用命令检查过的:readlink -f stress.yaml。我在放置stress.yaml 的目录中。如您所见,路径似乎很好,但 cassandra-stress 无论如何都找不到它。

您知道运行此 cassandra 压力测试的任何方法吗?

//更新当启动容器时我使用命令:

docker run -e DS_LICENSE=accept -e CASSANDRA_CLUSTER_NAME=MyCluster -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_DC=datacenter1 -v /home/kenik/Documents/dir -p 9042:9042 --name cassandra -m 2g -d modified-cassandra

或者

docker run -e DS_LICENSE=accept -e CASSANDRA_CLUSTER_NAME=MyCluster -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_DC=datacenter1 -v /home/kenik/Documents/:/dir -p 9042:9042 --name cassandra -m 2g -d modified-cassandra

并尝试执行测试:

docker exec -it cassandra cassandra-stress user profile=file:///dir/stress.yaml ops\(insert=1\) n=10000 -graph file=stress.html

结果是一样的:找不到文件异常。我已经更新了帖子,因为我可能会做出某种类型或没有正确理解答案。

4

1 回答 1

0

您通过 Docker 运行它,并且来自运行 Docker 映像的进程无法访问您的文件系统,除非您明确挂载它。启动镜像时需要将目录挂载到 Docker 中,使用 的-v命令开关docker run,然后从 中引用docker exec,例如:

docker run ... -v /home/kenik/Documents/:/somedir ...
docker exec ... profile=file:///somedir/stress.yaml

您可以在 Docker 文档中阅读有关卷的更多信息。

更新:这是完全有效的解决方案:

docker run -v /var/tmp/123/:/data/ --name stress-test cassandra
sudo cp sales-stress-exampl.yaml /var/tmp/123
docker exec -ti stress-test cassandra-stress user \
  profile=file:///data/sales-stress-exampl.yaml \
  ops\(insert=3,read1=1\) no-warmup
于 2019-05-11T18:12:54.403 回答