fuse_dfs挂载HDFS到本地

28 篇文章 2 订阅
4 篇文章 0 订阅

背景:

希望通过挂载方式,能够像使用本地文件系统一样,访问与操作hdfs数据。

同时为容灾,可以考虑进行hdfs的数据备份。

 

以下操作依赖hadoop3.x源码项目提前编译好:

传送门:

编译apache hadoop3.0.2

 

一、构建工具包

构建一个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

 

将如下文件拷贝至工具包中:

  • fuse_dfs:可执行文件
  • fuse_dfs_wrapper.sh: 主入口执行脚本
  • lib: 库依赖文件(文件格式如:*.so)
  • 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的如下位置获取:

https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/fuse-dfs/fuse_dfs_wrapper.sh

下载后,请按如下修订提示进行本地环境适配修改:

#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。

#此部分配置,详见如下文档:

#https://github.com/apache/hadoop/tree/trunk/hadoop-hdfs-project/hadoop-hdfs-native-#client/src/main/native/fuse-dfs/doc

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,挂载点,需提前创建好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
fuse_lowlevel 是一个基于 FUSE (Filesystem in Userspace) 的低级编程接口。它提供了更底层的文件系统操作,允许开发者直接与文件系统交互,而不仅仅是提供一个虚拟文件系统。fuse_lowlevel 具有更大的灵活性和控制权,能够更好地满足个性化需求。 fuse_lowlevel 的主要特点包括: 1. 直接访问底层操作:与传统的高级抽象接口不同,fuse_lowlevel 允许开发者以更低级的方式操作文件系统。这意味着可以更精确地控制文件系统的行为,包括处理文件请求、修改文件属性、处理权限等。 2. 多线程支持:fuse_lowlevel 能够同时处理多个文件系统请求,并且支持多线程操作。这意味着可以在执行文件系统操作时,同时处理其他请求,提高了系统的并发性能。 3. 自定义事件处理:通过 fuse_lowlevel,开发者可以定义自己的事件处理程序,以响应文件系统事件,如文件读写、目录遍历等。这样可以对文件系统的操作进行自定义的处理和逻辑控制。 4. 向后兼容:fuse_lowlevel 设计时考虑了向后兼容性,可以在旧版本的 FUSE 上使用,并且可以适应新版本 FUSE 的更新和改进。 总结来说,fuse_lowlevel 是一个基于 FUSE 的低级编程接口,提供了更底层的文件系统操作能力。它具有更大的灵活性和控制权,可以满足个性化的文件系统需求,支持多线程操作和自定义事件处理。不过,由于其更底层的特性,使用 fuse_lowlevel 需要对文件系统有较深入的理解,并具备编程和调试的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值