<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pwiki.pic.es/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sbogaart</id>
	<title>Public PIC Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://pwiki.pic.es/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sbogaart"/>
	<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=Special:Contributions/Sbogaart"/>
	<updated>2026-11-01T12:35:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://pwiki.pic.es/index.php?title=JupyterHub&amp;diff=1382</id>
		<title>JupyterHub</title>
		<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=JupyterHub&amp;diff=1382"/>
		<updated>2026-09-17T12:34:14Z</updated>

		<summary type="html">&lt;p&gt;Sbogaart: /* Sidecar Apps: Remote desktop &amp;amp; Visual Studio IDE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;tldr; Connect to https://jupyter.pic.es/ . Enjoy!&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
PIC offers a service for running Jupyter notebooks on CPU or GPU resources. This service is primarily thought for code developing or prototyping rather than data processing. The usage is similar to running notebooks on your personal computer but offers the advantage of developing and testing your code on different hardware configurations, as well as facilitating the scalability of the code since it is being tested in the same environment in which it would run on a mass scale. &lt;br /&gt;
&lt;br /&gt;
Since the service is strictly thought for development and small scale testing tasks, a shutdown policy for the sessions has been put in place:&lt;br /&gt;
&lt;br /&gt;
# The maximum duration for a session is 48h.&lt;br /&gt;
# After an idle period of 2 hours, the session will be closed. &lt;br /&gt;
&lt;br /&gt;
In practice that  means that you should estimate the test data volume that you work with during a session to be able to be processed in less than 48 hours.&lt;br /&gt;
&lt;br /&gt;
== How to connect to the service ==&lt;br /&gt;
&lt;br /&gt;
Got to [https://jupyter.pic.es jupyter.pic.es] to see your login screen.&lt;br /&gt;
&lt;br /&gt;
[[File:login.png|700px|Login screen]]&lt;br /&gt;
&lt;br /&gt;
Sign in with your PIC user credentials. This will prompt you to the following screen.&lt;br /&gt;
&lt;br /&gt;
[[File:ScreenshotJupyterSpawn.png|700px|current]]&lt;br /&gt;
&lt;br /&gt;
Here you can choose the hardware configuration for your Jupyter session. Also, you have to choose the experiment (project) you are working on during the Jupyter session. After choosing a configuration and pressing start the next screen will show you the progress of the initialisation process. Keep in mind that a job containing your Jupyter session is actually sent to the HTCondor queuing system and waiting for available resources before being started. This usually takes less than a minute but can take up to a few depending on our resource usage.&lt;br /&gt;
&lt;br /&gt;
[[File:screen02.png|900px]]&lt;br /&gt;
&lt;br /&gt;
In the next screen you can choose the tool that you want to use for your work: a Python notebook, a Python console or a plain bash terminal.&lt;br /&gt;
For the Python environment (either notebook or environment) you have two default options:&lt;br /&gt;
* the ipykernel version of Python 3&lt;br /&gt;
* the XPython version of Python 3.9, this one allows you to use the integrated debugging module.&lt;br /&gt;
&lt;br /&gt;
== Terminate your session and logout ==&lt;br /&gt;
&lt;br /&gt;
It is important that you terminate your session before you log out. In order to do so, go to the top page menu &amp;quot;'''File''' -&amp;gt; '''Hub Control Panel'''&amp;quot; and you will see the following screen.&lt;br /&gt;
&lt;br /&gt;
[[File:screen04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Here, click on the '''Stop My Server''' button. After that you can log out by clicking the '''Logout''' button in the right upper corner.&lt;br /&gt;
&lt;br /&gt;
=  Python virtual environments =&lt;br /&gt;
&lt;br /&gt;
This section covers the use of Python virtual environments with Jupyter.&lt;br /&gt;
&lt;br /&gt;
== Prebuilt environments == &lt;br /&gt;
&lt;br /&gt;
PIC's jupyterhub service comes with a collection of prebuilt environments located at '''/data/jupyter/software/envs'''.&lt;br /&gt;
&lt;br /&gt;
The master environment located at '''/data/jupyter/software/envs/master''' is the one used to start the jupyterlab service and the default for new notebooks.&lt;br /&gt;
&lt;br /&gt;
This is a non-extensive list of the packages included:&lt;br /&gt;
  - astropy=6.1.0&lt;br /&gt;
  - bokeh=3.4.1&lt;br /&gt;
  - dash=2.17.0&lt;br /&gt;
  - dask=2024.5.1&lt;br /&gt;
  - findspark=2.0.1&lt;br /&gt;
  - matplotlib=3.8.4&lt;br /&gt;
  - numpy=1.26.4&lt;br /&gt;
  - pandas=2.2.2&lt;br /&gt;
  - pillow=10.3.0&lt;br /&gt;
  - plotly=5.22.0&lt;br /&gt;
  - pyhive=0.7.0&lt;br /&gt;
  - python=3.12&lt;br /&gt;
  - pywavelets=1.4.1&lt;br /&gt;
  - scikit-image=0.22.0&lt;br /&gt;
  - scikit-learn=1.5.0&lt;br /&gt;
  - scipy=1.13.1&lt;br /&gt;
  - seaborn=0.13.2&lt;br /&gt;
  - statsmodels=0.14.2&lt;br /&gt;
&lt;br /&gt;
== Initialize conda (we highly recommend the use of mamba/micromamba) ==&lt;br /&gt;
&lt;br /&gt;
Before using conda/mamba in your bash session, you have to initialize it.&lt;br /&gt;
* For access to an available conda/mamba installation, please get in contact with your project liaison at PIC. He/she will give you the actual value for the '''/path/to/conda/mamba''' placeholder.&lt;br /&gt;
* If you want to use your own conda/mamba/micromamba installation, there are two recommended options&lt;br /&gt;
** '''miniforge''': a distribution with conda and mamba executables in a minimal base environment, instructions [https://github.com/conda-forge/miniforge here]&lt;br /&gt;
** '''micromamba''': a self-contained executable (micromamba) with no base environment, instructions [https://mamba.readthedocs.io/en/latest/installation/micromamba-installation.html here]&lt;br /&gt;
&lt;br /&gt;
Log onto Jupyter and start a session. On the homepage of your Jupyter session, click on the terminal button on the session dashboard on the right to open a bash terminal.&lt;br /&gt;
&lt;br /&gt;
In order to use conda/mamba/micromamba you need to intialize the shell. This initialization can be persistent, which will do some changes to your '''~/.bashrc''' file, or you can do it every time you want to use it.&lt;br /&gt;
&lt;br /&gt;
Run the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
eval &amp;quot;$(/data/astro/software/miniforge3/bin/conda shell.bash hook)&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, if you are using miniforge and you want to persist the initialization:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/data/astro/software/miniforge3/bin/mamba init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This actually changes the .bashrc file in your home directory in order to activate the base environment on login.&lt;br /&gt;
To avoid that the base environment is activated every time you log on to a node, run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ conda config --set auto_activate_base false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Link an existing environment to Jupyter ==&lt;br /&gt;
&lt;br /&gt;
You can find instructions on how to create your own environments, e.g. [[#Create_virtual_environments_with_venv_or_conda | here]].&lt;br /&gt;
&lt;br /&gt;
Log into Jupyter, start a session. From the session dashboard choose the bash terminal.&lt;br /&gt;
&lt;br /&gt;
Inside the terminal, activate your environment.&lt;br /&gt;
&lt;br /&gt;
For '''conda/mamba''' environments:&lt;br /&gt;
* if you created the environment without a prefix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ mamba activate environment&lt;br /&gt;
(...) [neissner@td110 ~]$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The parenthesis (...) in front of your bash prompt show the name of your environment. &lt;br /&gt;
* if you created the environment with a prefix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ mamba activate /path/to/environment&lt;br /&gt;
(...) [neissner@td110 ~]$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The parenthesis (...) in front of your bash prompt show the absolute path of your environment. &lt;br /&gt;
&lt;br /&gt;
For '''venv''' environments:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ source /path/to/environment/bin/activate&lt;br /&gt;
(...) [neissner@td110 ~]$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Link the environment to a Jupyter kernel. For both, '''conda/mamba''' and '''venv''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(...) [neissner@td110 ~]$ python -m  ipykernel install --user --name=whatever_kernel_name&lt;br /&gt;
Installed kernelspec whatever_kernel_name in &lt;br /&gt;
                         /nfs/pic.es/user/n/neissner/.local/share/jupyter/kernels/whatever_kernel_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don't have the '''ipykernel''' module installed in your environment you may receive an error message like the one below when trying to run the previous command.&lt;br /&gt;
&amp;lt;pre&amp;gt;No module named ipykernel&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this is the case, you need to install it by running: '''pip install ipykernel'''&lt;br /&gt;
&lt;br /&gt;
Deactivate your environment. &lt;br /&gt;
&lt;br /&gt;
For conda:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(...) [neissner@td110 ~]$ mamba deactivate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For venv:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(...) [neissner@td110 ~]$ deactivate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can exit the terminal. After refreshing the Jupyter page your whatever_kernel_name appears in the dashboard. In this example '''test''' has been used for whatever_kernel_name&lt;br /&gt;
&lt;br /&gt;
[[File:screen05.png|700px]]&lt;br /&gt;
&lt;br /&gt;
== Unlink an environment from Jupyter ==&lt;br /&gt;
Log onto Jupyter, start a session and from the session dashboard choose the bash terminal. To remove your environment/kernel from Jupyter run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ jupyter kernelspec uninstall whatever_kernel_name&lt;br /&gt;
Kernel specs to remove:&lt;br /&gt;
  whatever_kernel_name     /nfs/pic.es/user/n/neissner/.local/share/jupyter/kernels/whatever_kernel_name&lt;br /&gt;
Remove 1 kernel specs [y/N]: y&lt;br /&gt;
[RemoveKernelSpec] Removed /nfs/pic.es/user/n/neissner/.local/share/jupyter/kernels/whatever_kernel_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Keep in mind that, although not available in Jupyter anymore, the environment still exists. Whenever you need it, you can link it again.&lt;br /&gt;
&lt;br /&gt;
== Create virtual environments with venv or conda ==&lt;br /&gt;
&lt;br /&gt;
Before creating a new environment, please get in contact with your project liaison at PIC as there may be already a suitable environment for your needs in place.&lt;br /&gt;
&lt;br /&gt;
If none of the existing environments suits your needs, you can create a new environment.&lt;br /&gt;
First, create a directory in a suitable place to store the environment. For single-user environments, place them in your home under ~/env. For environments that will be shared with other project users, contact your project liaison and ask him/her for a path in a shared storage volume that is visible to all of them.&lt;br /&gt;
&lt;br /&gt;
Once you have the location (i.e. /path/to/env/folder), create the environment with the following commands:&lt;br /&gt;
&lt;br /&gt;
For '''venv''' environments '''(recommended)'''&lt;br /&gt;
&lt;br /&gt;
If your_env is installed at /path/to/env/your_env&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ cd /path/to/env&lt;br /&gt;
[neissner@td110 ~]$ python3 -m venv your_env&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now you should be able to activate your environment and install additional modules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ cd /path/to/env&lt;br /&gt;
[neissner@td110 ~]$ source your_env/bin/activate&lt;br /&gt;
(...)[neissner@td110 ~]$ pip install additional_module1 additional_module2 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For '''conda/mamba''' environments&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ mamba create --prefix /path/to/env/your_env&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The list of modules (module1, module2, ...) is optional. For instance, for a python3 environment with scipy you would specify: ''python=3 scipy'' &lt;br /&gt;
&lt;br /&gt;
Now you should be able to activate your environment and install additional modules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[neissner@td110 ~]$ mamba activate /path/to/env/folder/your_env&lt;br /&gt;
(...)[neissner@td110 ~]$ mamba install additional_module1 additional_module2 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can use pip install inside a mamba environment, however, resolving dependencies might require installing additional packages manually.&lt;br /&gt;
&lt;br /&gt;
== Conda / mamba configuration ==&lt;br /&gt;
&lt;br /&gt;
The behaviour of conda/mamba can be configured through the &amp;quot;$HOME/.condarc&amp;quot; file, described [https://docs.conda.io/projects/conda/en/latest/configuration.html here]. Some interesting parameters:&lt;br /&gt;
&lt;br /&gt;
* envs_dirs: The list of directories to search for named environments. E.g.: different locations where you created environments&lt;br /&gt;
&lt;br /&gt;
  envs_dirs:&lt;br /&gt;
    - /data/pic/scratch/torradeflot/envs&lt;br /&gt;
    - /data/astro/scratch/torradeflot/envs&lt;br /&gt;
    - /data/aai/scratch/torradeflot/envs&lt;br /&gt;
&lt;br /&gt;
* pkgs_dirs: Folder where to store conda packages&lt;br /&gt;
&lt;br /&gt;
  pkgs_dirs:&lt;br /&gt;
  - /data/aai/scratch_ssd/torradeflot/pkgs&lt;br /&gt;
  - /data/aai/scratch/torradeflot/pkgs&lt;br /&gt;
  - /data/pic/scratch/torradeflot/pkgs&lt;br /&gt;
&lt;br /&gt;
if `pkgs_dirs` and `envs_dirs` are in the same storage, conda will use hard links, thus optimizing the disk space.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Jupyterlab user guide =&lt;br /&gt;
&lt;br /&gt;
You can find the official documentation of the currently installed version of jupyterlab (3.6) [https://jupyterlab.readthedocs.io/en/4.2.x/ here], there you will find instruction on how to &lt;br /&gt;
* [https://jupyterlab.readthedocs.io/en/4.2.x/user/commands.html Access the command palette]&lt;br /&gt;
* [https://jupyterlab.readthedocs.io/en/4.2.x/user/toc.html Build a Table Of Contents]&lt;br /&gt;
* [https://jupyterlab.readthedocs.io/en/4.2.x/user/debugger.html Debug your code]&lt;br /&gt;
&lt;br /&gt;
A set of non-official jupyterlab extensions are installed to provide additional functionalities&lt;br /&gt;
&lt;br /&gt;
== Sidecar Apps: Remote desktop &amp;amp; Visual Studio IDE ==&lt;br /&gt;
Further you see an icon with a &amp;quot;D&amp;quot; - desktop, this one starts a VNC session that allows the use of programs with graphical user interfaces.&lt;br /&gt;
&lt;br /&gt;
You can also find the icon of Visual Studio, an integrated development environment.&lt;br /&gt;
&lt;br /&gt;
[[File:ScreenshotJupyterlab20231103.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Remote Clipboard ===&lt;br /&gt;
&lt;br /&gt;
The Remote Desktop includes a '''Remote Clipboard (RC)''' field that allows text to be copied and pasted between the server and the local computer.&lt;br /&gt;
&lt;br /&gt;
The contents of the '''Remote Clipboard''' are automatically synchronized with the clipboard of the server session.&lt;br /&gt;
&lt;br /&gt;
==== Server → PC ====&lt;br /&gt;
&lt;br /&gt;
To copy text from the server to the local computer:&lt;br /&gt;
&lt;br /&gt;
# Select the text you want to copy in the Remote Desktop.&lt;br /&gt;
# The selected text will automatically appear in the '''Remote Clipboard''' field.&lt;br /&gt;
# In the '''Remote Clipboard''', select the text and copy it using:&lt;br /&gt;
#* the browser's context menu, or&lt;br /&gt;
#* the standard keyboard shortcut:&lt;br /&gt;
#** '''Windows/Linux:''' &amp;lt;code&amp;gt;Ctrl + C&amp;lt;/code&amp;gt;&lt;br /&gt;
#** '''macOS:''' &amp;lt;code&amp;gt;⌘ + C&amp;lt;/code&amp;gt;&lt;br /&gt;
# You can now paste the text on your local computer using the standard paste shortcut of the target application.&lt;br /&gt;
&lt;br /&gt;
=== PC → Server ===&lt;br /&gt;
&lt;br /&gt;
To copy text from the local computer to the server:&lt;br /&gt;
&lt;br /&gt;
# Copy the text on the local computer.&lt;br /&gt;
# Place the cursor inside the '''Remote Clipboard''' field.&lt;br /&gt;
# Paste the text using:&lt;br /&gt;
#* the browser's context menu, or&lt;br /&gt;
#* the standard keyboard shortcut:&lt;br /&gt;
#** '''Windows/Linux:''' &amp;lt;code&amp;gt;Ctrl + V&amp;lt;/code&amp;gt;&lt;br /&gt;
#** '''macOS:''' &amp;lt;code&amp;gt;⌘ + V&amp;lt;/code&amp;gt;&lt;br /&gt;
# The contents of the '''Remote Clipboard''' are automatically synchronized with the clipboard of the server session.&lt;br /&gt;
# To paste the text into an application running on the server, the standard keyboard shortcuts (&amp;lt;code&amp;gt;Ctrl + V&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Shift + Ctrl + V&amp;lt;/code&amp;gt;) may be intercepted by the browser and may therefore not work.&lt;br /&gt;
&lt;br /&gt;
===== Alternative ways to paste into the server =====&lt;br /&gt;
&lt;br /&gt;
* '''Windows/Linux:''' middle mouse button or &amp;lt;code&amp;gt;Shift + Insert&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''macOS:''' middle mouse button.&lt;br /&gt;
&lt;br /&gt;
== Jupytext ==&lt;br /&gt;
Pair your notebooks with text files to enhance version tracking.&lt;br /&gt;
https://jupytext.readthedocs.io&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
If you had a notebook (.ipynb file) containing only the cell below, tracked in a git repository&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%matplotlib inline&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
plt.imshow(np.random.random([10, 10]))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Different executions of the cell would produce different images, and the images are embedded in a pseudo-binary format inside the notebook file. In this case, doing a '''git diff''' of the .ipynb file would produce a huge output (because the image changed), even if there wasn't any change in the code. It is thus convenient to sync the notebook with a text file (e.g. a .py script) using the jupytext extension and track this one with git. The outputs, including images, as well as some additional metadata, won't be added to the synced text file. So in the case of different executions of the same notebook, the diff will always be empty.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
Sidebar GUI to git repo management&lt;br /&gt;
https://github.com/jupyterlab/jupyterlab-git&lt;br /&gt;
&lt;br /&gt;
== Variable inspector ==&lt;br /&gt;
Variable Inspector provides an interactive interface for inspecting the current state of variables in a JupyterLab session. It allows users to view variable names, types, shapes, and values in a structured table, facilitating exploratory analysis and debugging workflows similar to variable inspection tools available in environments such as MATLAB.&lt;br /&gt;
&lt;br /&gt;
https://github.com/jupyterlab-contrib/jupyterlab-variableInspector&lt;br /&gt;
&lt;br /&gt;
== Jupyter server proxy ==&lt;br /&gt;
&lt;br /&gt;
This extension is installed in PIC's jupyter environment and it is used to be able to access network/web services running on the same host as the jupyterlab server from outside through the &amp;quot;https://jupyter.pic.es/user/{username}/proxy/{port}&amp;quot; URL.&lt;br /&gt;
&lt;br /&gt;
Full documentation here: https://jupyter-server-proxy.readthedocs.io/en/latest/index.html&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Software of particular interest ==&lt;br /&gt;
&lt;br /&gt;
=== ROOT ===&lt;br /&gt;
&lt;br /&gt;
Using ROOT from a jupyter notebook needs to do some tricks.&lt;br /&gt;
&lt;br /&gt;
Environment creation and kernel installation&lt;br /&gt;
&lt;br /&gt;
    $ micromamba env create -p /data/pic/scratch/torradeflot/envs/mcdata root ipykernel&lt;br /&gt;
    $ micromamba activate mcdata&lt;br /&gt;
    $ python -m ipykernel install --user --name mcdata&lt;br /&gt;
&lt;br /&gt;
After doing this ROOT can be imported from a python shell, but it does not work from a notebook.&lt;br /&gt;
&lt;br /&gt;
* ROOT uses JIT compilation with Cling: https://root.cern/cling/&lt;br /&gt;
* conda provides it's own set of compilation tools: gcc, gxx, fortran&lt;br /&gt;
* Some environment variables are necessary to ensure that these two pieces work well together:&lt;br /&gt;
** PATH: to be able to find the compiler tools&lt;br /&gt;
** CONDA_BUILD_SYSROOT: needed to configure the compiler call&lt;br /&gt;
&lt;br /&gt;
These environment variables are not propagated to the notebook, because they are set by .bashrc conda activate, ... so we need to explicitly set them in the notebook.&lt;br /&gt;
&lt;br /&gt;
     import os&lt;br /&gt;
     import sys&lt;br /&gt;
     from pathlib import Path&lt;br /&gt;
     bin_dir = Path(sys.executable).parent&lt;br /&gt;
     os.environ['PATH'] = f'{bin_dir}:{os.environ['PATH']}'&lt;br /&gt;
     os.environ['CONDA_BUILD_SYSROOT'] = str(bin_dir.parent / 'x86_64-conda-linux-gnu/sysroot')&lt;br /&gt;
&lt;br /&gt;
=== SageMath ===&lt;br /&gt;
&lt;br /&gt;
[https://www.sagemath.org/ SageMath] is particularly interesting for Cosmology because it allows symbolic calculations, e.g. deriving the equations of motions for the scale factor starting from a customised space-time metric. &lt;br /&gt;
&lt;br /&gt;
'''Standard cosmology examples'''&lt;br /&gt;
&lt;br /&gt;
* The Friedman equations for the FLRW solution of the Einstein equations.&lt;br /&gt;
You can find the corresponding Notebook in any PIC terminal at '''/data/astro/software/notebooks/FLRW_cosmology.ipynb'''&lt;br /&gt;
&lt;br /&gt;
* The notebook you can find at '''/data/astro/software/notebooks/FLRW_cosmology_solutions.ipynb''' uses known analytical solutions of the FLRW cosmology and produces this image for the evolution of the scale factor:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot_Sage05.png|300px]]&lt;br /&gt;
&lt;br /&gt;
* The notebook you can find at '''/data/astro/software/notebooks/Interior_Schwarzschild.ipynb''' shows the formalism for the interior Schwarzschild metric and displays the solutions for density and pressure of a static celestial object that is sufficiently larger than its Schwarzschild radius. The pressure for an object with constant density id shown in the image:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot_Sage06.png|300px]]&lt;br /&gt;
&lt;br /&gt;
'''Enabling SageMath environment in Jupyter'''&lt;br /&gt;
&lt;br /&gt;
If you have never initialized mamba, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ /data/astro/software/centos7/conda/mambaforge_4.14.0/bin/mamba init&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ conda config --set auto_activate_base false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that you can enable SageMath for its use in a Jupyter notebook session: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~] mamba activate /data/astro/software/envs/sage&lt;br /&gt;
(/data/astro/software/envs/sage) [&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ python -m  ipykernel install --user --name=sage&lt;br /&gt;
....&lt;br /&gt;
(/data/astro/software/envs/sage) [&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ mamba deactivate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates a file in you home '''~/.local/share/jupyter/kernels/sage/kernel.json'''&lt;br /&gt;
which has to be modified to look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;argv&amp;quot;: [&lt;br /&gt;
  &amp;quot;/data/astro/software/envs/sage/bin/sage&amp;quot;,&lt;br /&gt;
  &amp;quot;--python&amp;quot;,&lt;br /&gt;
  &amp;quot;-m&amp;quot;,&lt;br /&gt;
  &amp;quot;sage.repl.ipython_kernel&amp;quot;,&lt;br /&gt;
  &amp;quot;-f&amp;quot;,&lt;br /&gt;
  &amp;quot;{connection_file}&amp;quot;&lt;br /&gt;
 ],&lt;br /&gt;
 &amp;quot;display_name&amp;quot;: &amp;quot;sage&amp;quot;,&lt;br /&gt;
 &amp;quot;language&amp;quot;: &amp;quot;sage&amp;quot;,&lt;br /&gt;
 &amp;quot;metadata&amp;quot;: {&lt;br /&gt;
  &amp;quot;debugger&amp;quot;: true&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next time you go to your Jupyter dashboard you will find the sage environment listed there.&lt;br /&gt;
&lt;br /&gt;
== Dask ==&lt;br /&gt;
Dask supports parallel computations in Python. The PIC Jupyterlab has an extension for launching&lt;br /&gt;
your own Dask clusters. For more information, see [[Dask|Dask documentation]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using a Singularity image as a Jupyter kernel ==&lt;br /&gt;
&lt;br /&gt;
In some projects, the software stack is provided as a Singularity image. In such cases, it can be convenient to use this image directly as a Jupyter kernel, allowing notebooks on jupyter.pic.es to run within the same controlled software environment.&lt;br /&gt;
&lt;br /&gt;
To be used as a Jupyter kernel, the Singularity image must satisfy certain requirements. These depend on the programming language used inside the notebook.&lt;br /&gt;
&lt;br /&gt;
The singularity image needs to have the '''python''' and the '''ipykernel''' module installed. &lt;br /&gt;
&lt;br /&gt;
* Create the folder that will host the kernel definition&lt;br /&gt;
&lt;br /&gt;
  mkdir -p $HOME/.local/share/jupyter/kernels/singularity&lt;br /&gt;
&lt;br /&gt;
* Create the '''kernel.json''' file inside it with the following content:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;argv&amp;quot;: [&lt;br /&gt;
     &amp;quot;singularity&amp;quot;,&lt;br /&gt;
     &amp;quot;exec&amp;quot;,&lt;br /&gt;
     &amp;quot;--cleanenv&amp;quot;,&lt;br /&gt;
     &amp;quot;/path/to/the/singularity/image.sif&amp;quot;,&lt;br /&gt;
     &amp;quot;python&amp;quot;,&lt;br /&gt;
     &amp;quot;-m&amp;quot;,&lt;br /&gt;
    &amp;quot;ipykernel&amp;quot;,&lt;br /&gt;
     &amp;quot;-f&amp;quot;,&lt;br /&gt;
     &amp;quot;{connection_file}&amp;quot;&lt;br /&gt;
   ],&lt;br /&gt;
   &amp;quot;language&amp;quot;: &amp;quot;python&amp;quot;,&lt;br /&gt;
   &amp;quot;display_name&amp;quot;: &amp;quot;singularity-kernel&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Refresh or start the jupyterlab interface and the singularity kernel should appear in the launcher tab&lt;br /&gt;
&lt;br /&gt;
== GPUs ==&lt;br /&gt;
&lt;br /&gt;
The GPUs that are assigned to your job are listed in the environment variable CUDA_VISIBLE_DEVICES. In a terminal run &amp;quot;echo $CUDA_VISIBLE_DEVICES&amp;quot;. The environment variable contains a list of comma-separated GPU ids. With this you will already know how many gpus are assigned to your job. If the variable does not exist, there are no gpus assigned to the job&lt;br /&gt;
&lt;br /&gt;
    [torradeflot@gpu05 ~]$ echo $CUDA_VISIBLE_DEVICES &lt;br /&gt;
    GPU-a2361e9d-c520-684b-b21b-60cc3a59b05b&lt;br /&gt;
&lt;br /&gt;
You can track the GPU utilization (memory and load) using the GPU Dashboard in the left sidebar&lt;br /&gt;
&lt;br /&gt;
[[File:GPU_utilization_20260408.png|700px]]&lt;br /&gt;
&lt;br /&gt;
== Code samples ==&lt;br /&gt;
&lt;br /&gt;
A repository with sample code can be found here: https://gitlab.pic.es/services/code-samples/&lt;br /&gt;
&lt;br /&gt;
== Running notebooks through HTCondor ==&lt;br /&gt;
After developing a notebook, you might want to run it as a script with different configurations. The&lt;br /&gt;
following documentation explains  &lt;br /&gt;
&lt;br /&gt;
[[notebook_htcondor|how to run a notebook through HTCondor.]]&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
== Logs ==&lt;br /&gt;
&lt;br /&gt;
The log files for the jupyterlab server are stored in &amp;quot;~/.jupyter&amp;quot;. The log files will be created once the jupyter lab server job is finished.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean workspaces ==&lt;br /&gt;
&lt;br /&gt;
Jupyterlab stores the workspace status in the &amp;quot;~/.jupyter/lab/workspaces&amp;quot; folder. If you want to start with a fresh (empty) workspace, delete all the content of this folder before launching the notebook.&lt;br /&gt;
&lt;br /&gt;
    cd ~/.jupyter/lab/workspaces&lt;br /&gt;
    rm *&lt;br /&gt;
&lt;br /&gt;
= Known problems =&lt;br /&gt;
&lt;br /&gt;
== HOME folder is full ==&lt;br /&gt;
&lt;br /&gt;
Your HOME folder located at &amp;quot;/nfs/pic.es/user/X/XYZTUV&amp;quot; has a quota assigned, usually 25GB. &lt;br /&gt;
&lt;br /&gt;
If you see the error message &amp;quot;Disk quota exceeded&amp;quot; when spawning a notebook server or a generic 500 error, it could be because your $HOME folder is full. Log in to &amp;quot;ui.pic.es&amp;quot; (through SSH) and run &amp;quot;quota&amp;quot; to check the usage vs quota. If it is full you'll have to free up space.&lt;br /&gt;
&lt;br /&gt;
== Error 500: Internal Server Error ==&lt;br /&gt;
&lt;br /&gt;
This is a generic error. Means that the jupyterlab server failed. This could be for different reasons:&lt;br /&gt;
&lt;br /&gt;
* [[#HOME_folder_is_full|Your HOME folder is full]]&lt;br /&gt;
&lt;br /&gt;
== 504 Gateway timeout ==&lt;br /&gt;
&lt;br /&gt;
The notebook job is running in HTCondor but the user can not access the notebook server. Ultimately a 504 error is received.&lt;br /&gt;
&lt;br /&gt;
This is probably because there's some error when starting the jupyterlab server. First of all, shutdown the notebook server and [[#Logs|check the logs]] to better identify the problem. If you don't see the source of the error, try to [[#Clean_workspaces|clean the workspaces]] and launch a notebook again.&lt;br /&gt;
&lt;br /&gt;
== Loading libraries is very slow ==&lt;br /&gt;
Conda environments at storage using hard drives can be extremely slow to load. If you encounter this problem, please ask &lt;br /&gt;
your support contact for a &amp;quot;SSD scratch&amp;quot; location to store environments. Currently this service is being tested and&lt;br /&gt;
deployed as needed.&lt;br /&gt;
&lt;br /&gt;
== Spawn failed: The 'ip' trait of a PICCondorSpawner instance expected a unicode string, not the NoneType None ==&lt;br /&gt;
&lt;br /&gt;
Jupyterhub could not get the host name from HTCondor's stdout, because it didn't match the expected regular expression.&lt;br /&gt;
&lt;br /&gt;
This error happens randomly from time to time, it does not imply any major problem in any of the services.&lt;br /&gt;
&lt;br /&gt;
Try to request a new notebook server.&lt;br /&gt;
&lt;br /&gt;
== 403 : Forbidden. XSRF cookie does not match POST argument ==&lt;br /&gt;
&lt;br /&gt;
The value of the &amp;quot;_xsrf&amp;quot; cookie sent by the browser does not match the expected value. This could be for many reasons: temporary high load on the server, race conditions, temporary network unstability, many open tabs in the browser, etc.&lt;br /&gt;
&lt;br /&gt;
In general it can be solved by closing all tabs pointing to &amp;quot;jupyter.pic.es&amp;quot;, cleaning the cookies and connecting back to &amp;quot;jupyter.pic.es&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Proper usage of X509 based proxies ==&lt;br /&gt;
&lt;br /&gt;
We found recently that the usage of proxies within a Jupyter session might cause problems because the environment changes certain standard locations such as '''/tmp'''&lt;br /&gt;
&lt;br /&gt;
For a correct functioning please create the proxy the following way, example for Virgo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ /bin/voms-proxy-init --voms virgo:/virgo/ligo --out ./x509up_u$(id -u)&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ export X509_USER_PROXY=./x509up_u$(id -u)&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ ls /cvmfs/ligo.osgstorage.org&lt;br /&gt;
ls: cannot access /cvmfs/ligo.osgstorage.org: Permission denied&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here the proxy cannot properly be located. Therefore we have to put the complete path into the variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ pwd&lt;br /&gt;
/nfs/pic.es/user/&amp;lt;letter&amp;gt;/&amp;lt;user&amp;gt;&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ export X509_USER_PROXY=/nfs/pic.es/user/&amp;lt;letter&amp;gt;/&amp;lt;user&amp;gt;/x509up_u$(id -u)&lt;br /&gt;
[&amp;lt;user&amp;gt;@&amp;lt;hostname&amp;gt; ~]$ ls /cvmfs/ligo.osgstorage.org&lt;br /&gt;
frames  powerflux  pycbc  test_access&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sbogaart</name></author>
	</entry>
	<entry>
		<id>https://pwiki.pic.es/index.php?title=HDFS_Access_via_VOSpace&amp;diff=1238</id>
		<title>HDFS Access via VOSpace</title>
		<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=HDFS_Access_via_VOSpace&amp;diff=1238"/>
		<updated>2025-07-23T11:30:50Z</updated>

		<summary type="html">&lt;p&gt;Sbogaart: Created page with &amp;quot;= Introduction =  PIC provides access to the distributed file system HDFS through a '''VOSpace server''', following the IVOA standard described in [https://www.ivoa.net/docume...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
PIC provides access to the distributed file system HDFS through a '''VOSpace server''', following the IVOA standard described in [https://www.ivoa.net/documents/VOSpace/20180502/PR-VOSpace-2.1-20180502.html VOSpace 2.1].&lt;br /&gt;
&lt;br /&gt;
This service is an alternative to WebDAV access, allowing users to manage their data programmatically and in a structured way using tools compatible with the Virtual Observatory (VO) ecosystem. It is especially aimed at users who require data management operations such as reading, writing, moving, and metadata querying within a standardized environment.&lt;br /&gt;
&lt;br /&gt;
= How to connect to the service =&lt;br /&gt;
&lt;br /&gt;
== VOSpace Endpoint ==&lt;br /&gt;
&lt;br /&gt;
The VOSpace server is available at the following URL:&lt;br /&gt;
&lt;br /&gt;
    https://vospace.pic.es/vospace&lt;br /&gt;
&lt;br /&gt;
== Compatible clients ==&lt;br /&gt;
&lt;br /&gt;
You can access the service using tools compatible with the VOSpace 2.1 standard:&lt;br /&gt;
&lt;br /&gt;
* [https://pypi.org/project/vos/ '''vos''' client by CADC]&lt;br /&gt;
: Install with pip:&lt;br /&gt;
    pip install vos&amp;gt;=3.6.3&lt;br /&gt;
&lt;br /&gt;
* '''curl''':&lt;br /&gt;
: Can be used to perform HTTP operations following the examples defined in the [https://www.ivoa.net/documents/VOSpace/20180502/PR-VOSpace-2.1-20180502.html VOSpace 2.1 standard], including node creation, file transfers, and property queries.&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
&lt;br /&gt;
The VOSpace server allows both anonymous and authenticated access.&lt;br /&gt;
To access restricted data or personal space, users must specify their '''PIC username and password'''.&lt;br /&gt;
&lt;br /&gt;
= Usage Guidelines =&lt;br /&gt;
&lt;br /&gt;
Once connected to the service, users can perform a variety of operations defined by the VOSpace standard. Supported functionalities include:&lt;br /&gt;
&lt;br /&gt;
* '''getProtocols''': Query supported transfer protocols.&lt;br /&gt;
* '''getViews''': View available data formats (views).&lt;br /&gt;
* '''getProperties''': Obtain node properties.&lt;br /&gt;
* '''createNode''': Create files or folders.&lt;br /&gt;
* '''getNode''': Retrieve node information.&lt;br /&gt;
* '''deleteNode''': Delete files or folders.&lt;br /&gt;
* '''moveNode''': Move nodes inside the VOSpace.&lt;br /&gt;
* '''put / get''': Upload or download files.&lt;br /&gt;
* '''pushToVoSpace / pullFromVoSpace''': Transfer files via external URLs.&lt;br /&gt;
&lt;br /&gt;
= Best Practices =&lt;br /&gt;
&lt;br /&gt;
* Avoid using the '''!''' character in file or folder names, as it may cause compatibility issues with the CADC '''vos''' client.&lt;br /&gt;
* Use tools that comply with the VOSpace standard to ensure compatibility and avoid transfer errors.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
'''Cannot access the server:'''&lt;br /&gt;
* Verify the URL is correct: &amp;lt;code&amp;gt;https://vospace.pic.es/vospace&amp;lt;/code&amp;gt;&lt;br /&gt;
* Make sure PIC credentials are set correctly.&lt;br /&gt;
* Check client configuration (e.g., '''vos''', '''curl''').&lt;br /&gt;
&lt;br /&gt;
'''Problems with properties:'''&lt;br /&gt;
* The '''setProperties''' operation is '''not allowed''' due to permission restrictions on HDFS.&lt;br /&gt;
&lt;br /&gt;
= Security and Data Management =&lt;br /&gt;
&lt;br /&gt;
* Protect PIC credentials. Do not share or store them in plain text.&lt;br /&gt;
* For automation, consider using secure credential managers or temporary storage.&lt;br /&gt;
&lt;br /&gt;
= Usage Examples =&lt;br /&gt;
&lt;br /&gt;
== Using the CADC '''vos''' client (Python) ==&lt;br /&gt;
&lt;br /&gt;
This server supports [https://pypi.org/project/vos/ the CADC vos client] and operations like '''listdir''', '''mkdir''', '''copy''', '''move''', and '''delete'''. Minimum version: '''vos &amp;gt;= 3.6.3'''.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
* Create a config file (e.g. &amp;lt;code&amp;gt;vos-config.ini&amp;lt;/code&amp;gt;):&lt;br /&gt;
    [vos]&lt;br /&gt;
    resourceID = https://vospace.pic.es/vospace http&lt;br /&gt;
&lt;br /&gt;
* Export the file path as an environment variable:&lt;br /&gt;
&lt;br /&gt;
    export VOSPACE_CONFIG_FILE=/path/to/vos-config.ini&lt;br /&gt;
&lt;br /&gt;
* Create &amp;lt;code&amp;gt;~/.netrc&amp;lt;/code&amp;gt; for authentication:&lt;br /&gt;
&lt;br /&gt;
    machine https://vospace.pic.es/vospace&lt;br /&gt;
      login USERNAME&lt;br /&gt;
      password PASSWORD&lt;br /&gt;
&lt;br /&gt;
* Set permissions:&lt;br /&gt;
&lt;br /&gt;
    chmod 600 ~/.netrc&lt;br /&gt;
=== Python usage examples ===&lt;br /&gt;
&lt;br /&gt;
    import vos&lt;br /&gt;
&lt;br /&gt;
    client = vos.Client()&lt;br /&gt;
&lt;br /&gt;
    # List contents&lt;br /&gt;
    files = client.listdir(&amp;quot;https://vospace.pic.es/vospace/nodes/user/my_user/&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Contents:&amp;quot;, files)&lt;br /&gt;
&lt;br /&gt;
    # Create directory&lt;br /&gt;
    client.mkdir(&amp;quot;https://vospace.pic.es/vospace/nodes/user/my_user/mydir&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Upload file&lt;br /&gt;
    client.copy(&amp;quot;localfile.txt&amp;quot;, &amp;quot;https://vospace.pic.es/vospace/user/my_user/mydir/localfile.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Download file&lt;br /&gt;
    client.copy(&amp;quot;https://vospace.pic.es/vospace/user/my_user/mydir/localfile.txt&amp;quot;, &amp;quot;downloaded.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Move file&lt;br /&gt;
    client.move(&lt;br /&gt;
        &amp;quot;https://vospace.pic.es/vospace/user/my_user/mydir/localfile.txt&amp;quot;,&lt;br /&gt;
        &amp;quot;https://vospace.pic.es/vospace/user/my_user/mydir/renamedfile.txt&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    # Get node info&lt;br /&gt;
    node = client.get_node(&amp;quot;https://vospace.pic.es/vospace/nodes/user/my_user/mydir/renamedfile.txt&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Properties:&amp;quot;, node.props)&lt;br /&gt;
&lt;br /&gt;
    # Delete resource&lt;br /&gt;
    client.delete(&amp;quot;https://vospace.pic.es/vospace/nodes/user/my_user/mydir&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
'''Note''': Ensure configuration is properly set.&lt;br /&gt;
&lt;br /&gt;
== Using curl ==&lt;br /&gt;
&lt;br /&gt;
You can also interact with the server using '''curl''' or other HTTP tools.&lt;br /&gt;
&lt;br /&gt;
These must follow the [https://www.ivoa.net/documents/VOSpace/20180502/PR-VOSpace-2.1-20180502.html VOSpace 2.1] specification.&lt;br /&gt;
&lt;br /&gt;
'''Important:'''&lt;br /&gt;
* Avoid using '''!''' in URLs.&lt;br /&gt;
* Use full HTTP paths like &amp;lt;code&amp;gt;/vospace/nodes/...&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= VOSpace Server Endpoints =&lt;br /&gt;
&lt;br /&gt;
The server provides the following REST endpoints per the VOSpace 2.1 specification:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/protocols&amp;lt;/code&amp;gt; || Retrieves supported transfer protocols&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/views&amp;lt;/code&amp;gt; || Retrieves available data views&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/properties&amp;lt;/code&amp;gt; || Retrieves node properties&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/capabilities&amp;lt;/code&amp;gt; || Retrieves server capabilities&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/{job_id}&amp;lt;/code&amp;gt; || Retrieves job information&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/{job_id}/phase&amp;lt;/code&amp;gt; || Retrieves job phase&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/{job_id}/error&amp;lt;/code&amp;gt; || Retrieves job error info&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/{job_id}/results/transferDetails&amp;lt;/code&amp;gt; || Retrieves transfer details&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/{path}&amp;lt;/code&amp;gt; || Retrieves a file/folder node&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/vospace/{path}&amp;lt;/code&amp;gt; || Downloads a file (streaming)&lt;br /&gt;
|-&lt;br /&gt;
| PUT || &amp;lt;code&amp;gt;/vospace/{path}&amp;lt;/code&amp;gt; || Creates a file or folder&lt;br /&gt;
|-&lt;br /&gt;
| PUT || &amp;lt;code&amp;gt;/vospace/{path}&amp;lt;/code&amp;gt; || Uploads a file&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/vospace/&amp;lt;/code&amp;gt; || Moves or copies a node (returns 303 redirect)&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/vospace/synctrans&amp;lt;/code&amp;gt; || Push/pull transfer&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/vospace/{path}&amp;lt;/code&amp;gt; || Set properties (''not supported'')&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/vospace/{job_id}/phase&amp;lt;/code&amp;gt; || Change job phase&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || &amp;lt;code&amp;gt;/vospace/{path}&amp;lt;/code&amp;gt; || Deletes a file or folder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* &amp;lt;code&amp;gt;{path}&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;{job_id}&amp;lt;/code&amp;gt; are dynamic parameters.&lt;br /&gt;
* The server uses standard HTTP error codes: 400, 403, 404, 409, 500.&lt;br /&gt;
* '''PUT''' supports uploads and node creation.&lt;br /&gt;
* '''POST /vospace/''' moves or copies nodes (responds with '''303 See Other''').&lt;br /&gt;
* '''setProperties''' is disabled due to HDFS permissions.&lt;br /&gt;
* File downloads return streamed content with '''GET'''.&lt;br /&gt;
* Avoid using '''!''' in paths for full compatibility with the CADC client.&lt;/div&gt;</summary>
		<author><name>Sbogaart</name></author>
	</entry>
	<entry>
		<id>https://pwiki.pic.es/index.php?title=Main_Page&amp;diff=1237</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=Main_Page&amp;diff=1237"/>
		<updated>2025-07-23T10:50:15Z</updated>

		<summary type="html">&lt;p&gt;Sbogaart: /* Storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting started ==&lt;br /&gt;
* [[PIC description|PIC in an image]]&lt;br /&gt;
* [[PIC account|Get a PIC account]]&lt;br /&gt;
* [[PIC_User_Manual | User manual]]&lt;br /&gt;
* [[faq| Frequently asked questions]]&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
=== Distributed computing ===&lt;br /&gt;
* [[HTCondor]]&lt;br /&gt;
* [[Dask]]&lt;br /&gt;
* Spark:&lt;br /&gt;
** [[Spark on Hadoop|on Hadoop]]&lt;br /&gt;
** [[Spark_on_farm|on HTCondor]]&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
* [[Hadoop Distributed File System (HDFS)]]&lt;br /&gt;
* [[HDFS Access via VOSpace]]&lt;br /&gt;
* [[Transferring data to/from PIC]]&lt;br /&gt;
&lt;br /&gt;
=== User interfaces ===&lt;br /&gt;
* [[Login machines]]&lt;br /&gt;
* [[JupyterHub]]&lt;br /&gt;
&lt;br /&gt;
=== Other services ===&lt;br /&gt;
* [[Gitlab]]&lt;br /&gt;
* [[CosmoHub]]&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
&lt;br /&gt;
* [[Euclid]]&lt;br /&gt;
* [[AGN ICE]]&lt;br /&gt;
* [[ICFO]]&lt;br /&gt;
&lt;br /&gt;
== More technical information ==&lt;br /&gt;
&lt;br /&gt;
* [[Storage Department]]&lt;/div&gt;</summary>
		<author><name>Sbogaart</name></author>
	</entry>
	<entry>
		<id>https://pwiki.pic.es/index.php?title=Hadoop_Distributed_File_System_(HDFS)&amp;diff=1225</id>
		<title>Hadoop Distributed File System (HDFS)</title>
		<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=Hadoop_Distributed_File_System_(HDFS)&amp;diff=1225"/>
		<updated>2025-05-19T08:41:00Z</updated>

		<summary type="html">&lt;p&gt;Sbogaart: /* How to connect to the service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PIC offers a WebDAV service over WebHDFS for seamless file transfer and management. This service is designed for users who need to upload, download, and manage large files on HDFS through a familiar file management interface. The WebDAV protocol allows users to access the HDFS in a way that mimics the experience of working with local file systems, offering the flexibility and ease of use of tools like Finder, File Explorer, and rclone, among others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
WebDAV-compatible clients allow for the management of large datasets and offer multithreaded operations for enhanced performance. This makes the WebDAV service ideal for handling large-scale data uploads and downloads, with support for efficient file transfers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The service also provides a simple and effective way to interface with HDFS, especially for users who prefer a file-system-like experience for managing their data, rather than relying on more technical methods like command-line tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to connect to the service =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to the WebDAV service, follow the steps below:&lt;br /&gt;
&lt;br /&gt;
# '''Use a WebDAV-compatible client:'''&lt;br /&gt;
#*Finder (macOS)&lt;br /&gt;
#*File Explorer (Windows)&lt;br /&gt;
#*Linux File System (Linux)&lt;br /&gt;
#*rclone (CLI)&lt;br /&gt;
#*Cyberduck&lt;br /&gt;
#*CrossFTP&lt;br /&gt;
#*curl&lt;br /&gt;
# '''Mount the WebDAV endpoint:'''&lt;br /&gt;
#: The WebDAV server is accessible via the following URL: https://webdav-hdfs.pic.es/ [https://webdav.pic.es/]&lt;br /&gt;
# '''Authenticate with your PIC credentials:'''&lt;br /&gt;
#: When prompted, enter your PIC user credentials to authenticate your session. This ensures that only authorized users have access to the HDFS.&lt;br /&gt;
# '''Browse, upload, and download files:'''&lt;br /&gt;
#: Once connected, you will be able to manage your files in the same way you would with any local file system. You can drag and drop files, create directories, and manage large datasets directly on the HDFS.&lt;br /&gt;
**''Tip'': Using a multithreaded client like rclone or Cyberduck will help improve upload and download speeds for large files.&lt;br /&gt;
&lt;br /&gt;
= Usage Guidelines=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File Uploads:&lt;br /&gt;
&lt;br /&gt;
** The WebDAV service allows you to upload files of any size to HDFS.&lt;br /&gt;
** For large datasets, it is recommended to use a multithreaded client, as this will optimize the upload process and make it faster and more efficient.&lt;br /&gt;
&lt;br /&gt;
* File Downloads:&lt;br /&gt;
&lt;br /&gt;
** You can also download files from the HDFS to your local machine.&lt;br /&gt;
** Multithreading is supported, allowing you to download large files quickly.&lt;br /&gt;
&lt;br /&gt;
* File Management:&lt;br /&gt;
&lt;br /&gt;
** Files and directories can be created, deleted, or renamed directly within your WebDAV-compatible client.&lt;br /&gt;
&lt;br /&gt;
** You can also move files around within your HDFS storage, making file management easier.&lt;br /&gt;
&lt;br /&gt;
=Best Practices=&lt;br /&gt;
'''Optimize large file transfers:'''&lt;br /&gt;
&lt;br /&gt;
: To improve performance, use tools like rclone or Cyberduck for multithreaded file transfers. This helps manage the upload and download of large files or large quantities of files more efficiently.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
&lt;br /&gt;
'''Cannot Connect to the WebDAV Service:'''&lt;br /&gt;
:If you're unable to connect to the WebDAV server, ensure that you're using the correct URL and that your PIC credentials are entered properly. Also, verify that your WebDAV-compatible client is configured correctly.&lt;br /&gt;
&lt;br /&gt;
'''Slow Uploads or Downloads:'''&lt;br /&gt;
:If you experience slow file transfer speeds, check if your client supports multithreaded transfers and consider using a tool like rclone or Cyberduck, which support multiple threads for faster transfers.&lt;br /&gt;
&lt;br /&gt;
'''File Uploads Fail'''&lt;br /&gt;
:If file uploads fail, try splitting large files into smaller chunks or use an alternative tool that supports better error handling and retry capabilities, such as rclone.&lt;br /&gt;
&lt;br /&gt;
=Security and Data Management=&lt;br /&gt;
&lt;br /&gt;
'''PIC Credentials:'''&lt;br /&gt;
: Always ensure that your PIC credentials are secure. Do not share your credentials with others or store them in insecure locations.&lt;/div&gt;</summary>
		<author><name>Sbogaart</name></author>
	</entry>
	<entry>
		<id>https://pwiki.pic.es/index.php?title=Hadoop_Distributed_File_System_(HDFS)&amp;diff=1224</id>
		<title>Hadoop Distributed File System (HDFS)</title>
		<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=Hadoop_Distributed_File_System_(HDFS)&amp;diff=1224"/>
		<updated>2025-05-14T13:14:30Z</updated>

		<summary type="html">&lt;p&gt;Sbogaart: /* How to connect to the service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PIC offers a WebDAV service over WebHDFS for seamless file transfer and management. This service is designed for users who need to upload, download, and manage large files on HDFS through a familiar file management interface. The WebDAV protocol allows users to access the HDFS in a way that mimics the experience of working with local file systems, offering the flexibility and ease of use of tools like Finder, File Explorer, and rclone, among others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
WebDAV-compatible clients allow for the management of large datasets and offer multithreaded operations for enhanced performance. This makes the WebDAV service ideal for handling large-scale data uploads and downloads, with support for efficient file transfers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The service also provides a simple and effective way to interface with HDFS, especially for users who prefer a file-system-like experience for managing their data, rather than relying on more technical methods like command-line tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to connect to the service =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to the WebDAV service, follow the steps below:&lt;br /&gt;
&lt;br /&gt;
# '''Use a WebDAV-compatible client:'''&lt;br /&gt;
#*Finder (macOS)&lt;br /&gt;
#*File Explorer (Windows)&lt;br /&gt;
#*Linux File System (Linux)&lt;br /&gt;
#*rclone (CLI)&lt;br /&gt;
#*Cyberduck&lt;br /&gt;
#*CrossFTP&lt;br /&gt;
#*curl&lt;br /&gt;
# '''Mount the WebDAV endpoint:'''&lt;br /&gt;
#: The WebDAV server is accessible via the following URL: https://webdav.pic.es/ [https://webdav.pic.es/]&lt;br /&gt;
# '''Authenticate with your PIC credentials:'''&lt;br /&gt;
#: When prompted, enter your PIC user credentials to authenticate your session. This ensures that only authorized users have access to the HDFS.&lt;br /&gt;
# '''Browse, upload, and download files:'''&lt;br /&gt;
#: Once connected, you will be able to manage your files in the same way you would with any local file system. You can drag and drop files, create directories, and manage large datasets directly on the HDFS.&lt;br /&gt;
**''Tip'': Using a multithreaded client like rclone or Cyberduck will help improve upload and download speeds for large files.&lt;br /&gt;
&lt;br /&gt;
= Usage Guidelines=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File Uploads:&lt;br /&gt;
&lt;br /&gt;
** The WebDAV service allows you to upload files of any size to HDFS.&lt;br /&gt;
** For large datasets, it is recommended to use a multithreaded client, as this will optimize the upload process and make it faster and more efficient.&lt;br /&gt;
&lt;br /&gt;
* File Downloads:&lt;br /&gt;
&lt;br /&gt;
** You can also download files from the HDFS to your local machine.&lt;br /&gt;
** Multithreading is supported, allowing you to download large files quickly.&lt;br /&gt;
&lt;br /&gt;
* File Management:&lt;br /&gt;
&lt;br /&gt;
** Files and directories can be created, deleted, or renamed directly within your WebDAV-compatible client.&lt;br /&gt;
&lt;br /&gt;
** You can also move files around within your HDFS storage, making file management easier.&lt;br /&gt;
&lt;br /&gt;
=Best Practices=&lt;br /&gt;
'''Optimize large file transfers:'''&lt;br /&gt;
&lt;br /&gt;
: To improve performance, use tools like rclone or Cyberduck for multithreaded file transfers. This helps manage the upload and download of large files or large quantities of files more efficiently.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
&lt;br /&gt;
'''Cannot Connect to the WebDAV Service:'''&lt;br /&gt;
:If you're unable to connect to the WebDAV server, ensure that you're using the correct URL and that your PIC credentials are entered properly. Also, verify that your WebDAV-compatible client is configured correctly.&lt;br /&gt;
&lt;br /&gt;
'''Slow Uploads or Downloads:'''&lt;br /&gt;
:If you experience slow file transfer speeds, check if your client supports multithreaded transfers and consider using a tool like rclone or Cyberduck, which support multiple threads for faster transfers.&lt;br /&gt;
&lt;br /&gt;
'''File Uploads Fail'''&lt;br /&gt;
:If file uploads fail, try splitting large files into smaller chunks or use an alternative tool that supports better error handling and retry capabilities, such as rclone.&lt;br /&gt;
&lt;br /&gt;
=Security and Data Management=&lt;br /&gt;
&lt;br /&gt;
'''PIC Credentials:'''&lt;br /&gt;
: Always ensure that your PIC credentials are secure. Do not share your credentials with others or store them in insecure locations.&lt;/div&gt;</summary>
		<author><name>Sbogaart</name></author>
	</entry>
	<entry>
		<id>https://pwiki.pic.es/index.php?title=Hadoop_Distributed_File_System_(HDFS)&amp;diff=1223</id>
		<title>Hadoop Distributed File System (HDFS)</title>
		<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=Hadoop_Distributed_File_System_(HDFS)&amp;diff=1223"/>
		<updated>2025-05-14T13:13:32Z</updated>

		<summary type="html">&lt;p&gt;Sbogaart: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PIC offers a WebDAV service over WebHDFS for seamless file transfer and management. This service is designed for users who need to upload, download, and manage large files on HDFS through a familiar file management interface. The WebDAV protocol allows users to access the HDFS in a way that mimics the experience of working with local file systems, offering the flexibility and ease of use of tools like Finder, File Explorer, and rclone, among others.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
WebDAV-compatible clients allow for the management of large datasets and offer multithreaded operations for enhanced performance. This makes the WebDAV service ideal for handling large-scale data uploads and downloads, with support for efficient file transfers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The service also provides a simple and effective way to interface with HDFS, especially for users who prefer a file-system-like experience for managing their data, rather than relying on more technical methods like command-line tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= How to connect to the service =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To connect to the WebDAV service, follow the steps below:&lt;br /&gt;
&lt;br /&gt;
# '''Use a WebDAV-compatible client:'''&lt;br /&gt;
#*Finder (macOS)&lt;br /&gt;
#*File Explorer (Windows)&lt;br /&gt;
#*Linux File System (Linux)&lt;br /&gt;
#*rclone (CLI)&lt;br /&gt;
#*Cyberduck (macOS, Windows)&lt;br /&gt;
#*CrossFTP (macOS, Windows, Linux)&lt;br /&gt;
# '''Mount the WebDAV endpoint:'''&lt;br /&gt;
#: The WebDAV server is accessible via the following URL: https://webdav.pic.es/ [https://webdav.pic.es/]&lt;br /&gt;
# '''Authenticate with your PIC credentials:'''&lt;br /&gt;
#: When prompted, enter your PIC user credentials to authenticate your session. This ensures that only authorized users have access to the HDFS.&lt;br /&gt;
# '''Browse, upload, and download files:'''&lt;br /&gt;
#: Once connected, you will be able to manage your files in the same way you would with any local file system. You can drag and drop files, create directories, and manage large datasets directly on the HDFS.&lt;br /&gt;
**''Tip'': Using a multithreaded client like rclone or Cyberduck will help improve upload and download speeds for large files.&lt;br /&gt;
&lt;br /&gt;
= Usage Guidelines=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* File Uploads:&lt;br /&gt;
&lt;br /&gt;
** The WebDAV service allows you to upload files of any size to HDFS.&lt;br /&gt;
** For large datasets, it is recommended to use a multithreaded client, as this will optimize the upload process and make it faster and more efficient.&lt;br /&gt;
&lt;br /&gt;
* File Downloads:&lt;br /&gt;
&lt;br /&gt;
** You can also download files from the HDFS to your local machine.&lt;br /&gt;
** Multithreading is supported, allowing you to download large files quickly.&lt;br /&gt;
&lt;br /&gt;
* File Management:&lt;br /&gt;
&lt;br /&gt;
** Files and directories can be created, deleted, or renamed directly within your WebDAV-compatible client.&lt;br /&gt;
&lt;br /&gt;
** You can also move files around within your HDFS storage, making file management easier.&lt;br /&gt;
&lt;br /&gt;
=Best Practices=&lt;br /&gt;
'''Optimize large file transfers:'''&lt;br /&gt;
&lt;br /&gt;
: To improve performance, use tools like rclone or Cyberduck for multithreaded file transfers. This helps manage the upload and download of large files or large quantities of files more efficiently.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
&lt;br /&gt;
'''Cannot Connect to the WebDAV Service:'''&lt;br /&gt;
:If you're unable to connect to the WebDAV server, ensure that you're using the correct URL and that your PIC credentials are entered properly. Also, verify that your WebDAV-compatible client is configured correctly.&lt;br /&gt;
&lt;br /&gt;
'''Slow Uploads or Downloads:'''&lt;br /&gt;
:If you experience slow file transfer speeds, check if your client supports multithreaded transfers and consider using a tool like rclone or Cyberduck, which support multiple threads for faster transfers.&lt;br /&gt;
&lt;br /&gt;
'''File Uploads Fail'''&lt;br /&gt;
:If file uploads fail, try splitting large files into smaller chunks or use an alternative tool that supports better error handling and retry capabilities, such as rclone.&lt;br /&gt;
&lt;br /&gt;
=Security and Data Management=&lt;br /&gt;
&lt;br /&gt;
'''PIC Credentials:'''&lt;br /&gt;
: Always ensure that your PIC credentials are secure. Do not share your credentials with others or store them in insecure locations.&lt;/div&gt;</summary>
		<author><name>Sbogaart</name></author>
	</entry>
	<entry>
		<id>https://pwiki.pic.es/index.php?title=Hadoop_Distributed_File_System_(HDFS)&amp;diff=1222</id>
		<title>Hadoop Distributed File System (HDFS)</title>
		<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=Hadoop_Distributed_File_System_(HDFS)&amp;diff=1222"/>
		<updated>2025-05-14T12:47:13Z</updated>

		<summary type="html">&lt;p&gt;Sbogaart: The WebDAV service over WebHDFS offered by PIC provides a user-friendly and efficient way to interact with your data on HDFS. Whether you're uploading large files, managing your datasets, or downloading files, this service simplifies the process by integrating with common file management tools.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
PIC offers a WebDAV service over WebHDFS for seamless file transfer and management. This service is designed for users who need to upload, download, and manage large files on HDFS through a familiar file management interface. The WebDAV protocol allows users to access the HDFS in a way that mimics the experience of working with local file systems, offering the flexibility and ease of use of tools like Finder, File Explorer, and rclone, among others.&lt;br /&gt;
&lt;br /&gt;
WebDAV-compatible clients allow for the management of large datasets and offer multithreaded operations for enhanced performance. This makes the WebDAV service ideal for handling large-scale data uploads and downloads, with support for efficient file transfers.&lt;br /&gt;
&lt;br /&gt;
The service also provides a simple and effective way to interface with HDFS, especially for users who prefer a file-system-like experience for managing their data, rather than relying on more technical methods like command-line tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to connect to the service ==&lt;br /&gt;
To connect to the WebDAV service, follow the steps below:&lt;br /&gt;
&lt;br /&gt;
1. Use a WebDAV-compatible client:&lt;br /&gt;
Finder (macOS)&lt;br /&gt;
File Explorer (Windows)&lt;br /&gt;
Linux File System (Linux)&lt;br /&gt;
rclone (CLI)&lt;br /&gt;
Cyberduck (macOS, Windows)&lt;br /&gt;
CrossFTP (macOS, Windows, Linux)&lt;br /&gt;
&lt;br /&gt;
2. Mount the WebDAV endpoint:&lt;br /&gt;
The WebDAV server is accessible via the following URL: [https://webdav.pic.es/hdfs]&lt;br /&gt;
&lt;br /&gt;
3. Authenticate with your PIC credentials:&lt;br /&gt;
When prompted, enter your PIC user credentials to authenticate your session. This ensures that only authorized users have access to the HDFS.&lt;br /&gt;
&lt;br /&gt;
4. Browse, upload, and download files:&lt;br /&gt;
Once connected, you will be able to manage your files in the same way you would with any local file system. You can drag and drop files, create directories, and manage large datasets directly on the HDFS.&lt;br /&gt;
Tip: Using a multithreaded client like rclone or Cyberduck will help improve upload and download speeds for large files.&lt;br /&gt;
&lt;br /&gt;
==Usage Guidelines==&lt;br /&gt;
- File Uploads:&lt;br /&gt;
· The WebDAV service allows you to upload files of any size to HDFS.&lt;br /&gt;
· For large datasets, it is recommended to use a multithreaded client, as this will optimize the upload process and make it faster and more efficient.&lt;br /&gt;
- File Downloads:&lt;br /&gt;
· You can also download files from the HDFS to your local machine.&lt;br /&gt;
· Multithreading is supported, allowing you to download large files quickly.&lt;br /&gt;
- File Management:&lt;br /&gt;
· Files and directories can be created, deleted, or renamed directly within your WebDAV-compatible client.&lt;br /&gt;
· You can also move files around within your HDFS storage, making file management easier.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
1. Optimize large file transfers:&lt;br /&gt;
To improve performance, use tools like rclone or Cyberduck for multithreaded file transfers. This helps manage the upload and download of large files or large quantities of files more efficiently.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
1. Cannot Connect to the WebDAV Service:&lt;br /&gt;
If you're unable to connect to the WebDAV server, ensure that you're using the correct URL and that your PIC credentials are entered properly. Also, verify that your WebDAV-compatible client is configured correctly.&lt;br /&gt;
2. Slow Uploads or Downloads:&lt;br /&gt;
If you experience slow file transfer speeds, check if your client supports multithreaded transfers and consider using a tool like rclone or Cyberduck, which support multiple threads for faster transfers.&lt;br /&gt;
3. File Uploads Fail:&lt;br /&gt;
If file uploads fail, try splitting large files into smaller chunks or use an alternative tool that supports better error handling and retry capabilities, such as rclone.&lt;br /&gt;
&lt;br /&gt;
==Security and Data Management==&lt;br /&gt;
&lt;br /&gt;
- PIC Credentials:&lt;br /&gt;
Always ensure that your PIC credentials are secure. Do not share your credentials with others or store them in insecure locations.&lt;/div&gt;</summary>
		<author><name>Sbogaart</name></author>
	</entry>
	<entry>
		<id>https://pwiki.pic.es/index.php?title=Main_Page&amp;diff=1221</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pwiki.pic.es/index.php?title=Main_Page&amp;diff=1221"/>
		<updated>2025-05-14T12:27:44Z</updated>

		<summary type="html">&lt;p&gt;Sbogaart: /* Services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Getting started ==&lt;br /&gt;
* [[PIC description|PIC in an image]]&lt;br /&gt;
* [[PIC account|Get a PIC account]]&lt;br /&gt;
* [[PIC_User_Manual | User manual]]&lt;br /&gt;
* [[faq| Frequently asked questions]]&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
* [[HTCondor]]&lt;br /&gt;
* [[Storage]]&lt;br /&gt;
* [[JupyterHub]]&lt;br /&gt;
* [[Gitlab]]&lt;br /&gt;
* [[CosmoHub]]&lt;br /&gt;
* [[Hadoop Distributed File System (HDFS)]]&lt;br /&gt;
* Spark:&lt;br /&gt;
** [[Spark on Hadoop|on Hadoop]]&lt;br /&gt;
** [[Spark_on_farm|on HTCondor]]&lt;br /&gt;
* [[Transferring data to/from PIC]]&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
&lt;br /&gt;
* [[Euclid]]&lt;br /&gt;
* [[AGN ICE]]&lt;br /&gt;
* [[ICFO]]&lt;br /&gt;
&lt;br /&gt;
== More technical information ==&lt;br /&gt;
&lt;br /&gt;
* [[Storage Department]]&lt;/div&gt;</summary>
		<author><name>Sbogaart</name></author>
	</entry>
</feed>