背景:
希望通过挂载方式,能够像使用本地文件系统一样,访问与操作hdfs数据。
同时为容灾,可以考虑进行hdfs的数据备份。
以下操作依赖hadoop3.x源码项目提前编译好:
传送门:
一、构建工具包
构建一个fuse_dfs_tools工具包,后续将使用该工具包进行hdfs与本地磁盘的挂载。
工具包目录结构如下:
fuse_hdfs_tools
├── fuse_dfs
├── fuse_dfs_wrapper.sh
├── lib
│ ├── libhdfs.a
│ ├── libhdfs.so -> libhdfs.so.0.0.0
│ └── libhdfs.so.0.0.0
└── test_fuse_dfs
将如下文件拷贝至工具包中:
|
说明:
1、fuse_dfs、test_fuse_dfs 这2个文件,请从编译后hadoop的如下目录中获取:
/opt/hadoop-3.0.2-src/hadoop-hdfs-project/hadoop-hdfs-native-client/target/main/native/fuse-dfs
2、lib库包,请从hadoop编译后的如下目录中获取:
/opt/hadoop-3.0.2-src/hadoop-hdfs-project/hadoop-hdfs-native-client/target/native/target/usr/local/lib。
3、fuse_dfs_wrapper.sh文件,请从github的如下位置获取:
下载后,请按如下修订提示进行本地环境适配修改:
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/fuser_hdfs/lib #修改为实际hadoop根路径 export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop #export JAVA_HOME=/usr/java/jdk1.8.0_191/ if [ "$HADOOP_HOME" = "" ]; then echo "HADOOP_HOME is empty. Set it to the root directory of Hadoop source code" exit 1 fi export FUSEDFS_PATH="/opt/fuser_hdfs" #修改为本地fuser_hdfs文件夹路径 export LIBHDFS_PATH="/opt/fuser_hdfs/lib" #修改为本地fuser_hdfs下单lib库路径
if [ "$OS_ARCH" = "" ]; then export OS_ARCH=amd64 fi
if [ "$JAVA_HOME" = "" ]; then export JAVA_HOME=/usr/local/java fi
if [ "$LD_LIBRARY_PATH" = "" ]; then export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$OS_ARCH/server:/usr/local/lib fi
while IFS= read -r -d '' file do export CLASSPATH=$CLASSPATH:$file #替换为本地hadoop路径的client目录下 done < <(find "$HADOOP_HOME/client" -name "*.jar" -print0)
while IFS= read -r -d '' file do export CLASSPATH=$CLASSPATH:$file #替换为本地hadoop-hdfs路径 done < <(find "$HADOOP_HOME/../hadoop-hdfs" -name "*.jar" -print0)
export CLASSPATH=$HADOOP_CONF_DIR:$CLASSPATH export PATH=$FUSEDFS_PATH:$PATH export LD_LIBRARY_PATH=$LIBHDFS_PATH:$JAVA_HOME/jre/lib/$OS_ARCH/server
#fuse_dfs "$@" #注释原先代码,修改为第二行代码。 #加入hdfs根路径,并添加优化参数。 #“$@”部分,接收待挂载的本地磁盘路径,如/mnt/hdfs。 #此部分配置,详见如下文档: fuse_dfs dfs://123.123.123.123:8020 -obig_writes ro "$@" |
2、使用fuse_dfs工具挂载hdfs到本地磁盘
/opt/fuser_hdfs_tools/fuse_dfs_wrapper.sh /mnt/hdfs_mirror1 |
3、引申:使用nfs-gateway方式挂载
如果使用CM方式安装的CDH集群(如5.1x/6.x),还有一种更为方便的挂载方式,即nfs-gateway方式挂载。
操作步骤如下:
3.1 ClouderaManager6中添加Nfs-Gateway角色
HDFS-》实例-》添加Nfs-Gateway角色
3.2 执行挂载命令
mount -t nfs -o vers=3,proto=tcp,nolock 123.123.123.123:/ /mnt/hdfs_mirror2
说明:
①、123.123.123.123:/ 为HDFS集群根目录,不同于fuse_hdfs模式,这里可以指定到hdfs任一目录下。
②、/mnt/hdfs_mirror2,挂载点,需提前创建好。