**Description**

It appears that [`SparkSubmitHook`](https://airflow.apache.org/docs/stable/_api/airflow/contrib/operators/spark_submit_operator/index.html)'s [implementation](https://github.com/apache/airflow/blob/master/airflow/providers/apache/spark/hooks/spark_submit.py) of kerberos support is orthogonal to the `airflow kerberos` support. It requires us to specify a keytab in the task which will not work for us because our worker container intentionally does not have a volume mount for the keytab. This means we will have to modify SparkSubmit[Hook/Operator] to [use ticket cache](https://spark.apache.org/docs/latest/security.html#using-a-ticket-cache).

**Use case / motivation**

I want to use spark submit operator natively w/ ccache. 

**Proposed Changes **


I think this should be an addition of "use_krb5ccache" variable to hook and operator that defaults to 'False' for backwards compatibility.
When it is `True` we should add the following to the spark submit command construction:
```python3
if self.use_krb5ccache:
    if not os.getenv('KRB5CCNAME'):
        raise AirflowException("KRB5CCNAME environment variable not set while trying to us ticket from ccache.")
    connection_cmd += [
         "--conf",
         "spark.kerberos.renewal.credentials=ccache"
     ]
```

We should also fall back to use principal from security kerberos config if not specified in the task.
```
   self._principal = principal if principal else conf.get('kerberos', 'principal')
```

Note I've tested something similar via cluster policy as a workaround in my current project:
```python3
def spark_tasks_use_ccache(task: BaseOperator):
    """Configure SparkSubmitOperator tasks to use kerberos ticket cache."""
    if isinstance(task, SparkSubmitOperator):
        # pylint: disable=protected-access
        if task._conf:  # noqa
            task._conf["spark.kerberos.renewal.credentials"] = "ccache"  # noqa
        task._principal = conf.get('kerberos', 'principal')
```


cc: @mik-laj @potiuk WDYT about contributing this sort of thing back to airflow? should we change this in the hook? would it be interesting to contribute useful example cluster policies to airflow?
"""
    Wrap the spark-submit binary to kick off a spark-submit job; requires "spark-submit" binary in the PATH.
    :param conf: Arbitrary Spark configuration properties
    :param spark_conn_id: The :ref:`spark connection id <howto/connection:spark>` as configured
        in Airflow administration. When an invalid connection_id is supplied, it will default
        to yarn.
    :param files: Upload additional files to the executor running the job, separated by a
        comma. Files will be placed in the working directory of each executor.
        For example, serialized objects.
    :param py_files: Additional python files used by the job, can be .zip, .egg or .py.
    :param archives: Archives that spark should unzip (and possibly tag with #ALIAS) into
        the application working directory.
    :param driver_class_path: Additional, driver-specific, classpath settings.
    :param jars: Submit additional jars to upload and place them in executor classpath.
    :param java_class: the main class of the Java application
    :param packages: Comma-separated list of maven coordinates of jars to include on the
        driver and executor classpaths