@JackChen I apologize for the delay on this one, but I'll attempt to answer your question. HDFS snapshots, I believe, are very similar to HBase Snapshots, so I think some of the same principals apply. In essence, when you make a snapshot of a specific directory in HDFS, it just creates a .snapshot directory underneath the directory that you snapshotted. Inside that .snapshot directory will be some small metadata files that reference the contents of the directory that you snapshotted. The HDFS Snapshots wiki I linked above explains it in detail.
So, for your #2 question, yes, you can use just a regular "hadoop fs -get" on those snapshotted files to copy them out of HDFS and onto local storage.
Once you have copied the data out of HDFS, you can always restore it manually by just putting whatever file you want back in HDFS. This adds a lot of manual work to the picture, but should accomplish your goal.
Thanks for your response. How to manually restore HDFS with snapshot files? Is there a command or API to restore it? I know there is API and command to create snapshot. In Cloudera Manager web console, it seems it deleted all the current file in HDFS snapshottable directory then copy these files from snapshot to snapshottable HDFS directory. But if my snapshottable directory is the HDFS root directory, it will cost huge time to finish the manual copy.