Question 1
If you use partition by key(image_id,site_id), you cannot be sure that each partition will only contain separated site_id's because this kind of partitionning will use a integrated hashing function on (image_id,site_id) and the result of this will determinate in wich partition the row will be inserted into.
If you want to ensure separation you should use RANGE or LIST partitionning.
Question 2
If using RANGE or LIST partitionning, you will have to define the number of partitions you want. ie :
PARTITION BY RANGE (site_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
);
LIST and RANGE requires a bit of maintenance. If new site_id are added / removed, you will have to adapt your partition scheme.
KEY partitioning will ensure a balanced row repartition across the number of partitions specified:
PARTITION BY KEY(image_id,site_id)
PARTITIONS 10;
Hope it helps.