📜  使用Python Snakebite 从 HDFS 检索文件数据

📅  最后修改于: 2021-10-27 06:44:52             🧑  作者: Mango

先决条件: Hadoop安装,HDFS

Python Snakebite是一个非常流行的Python库,我们可以使用它与 HDFS 进行通信。使用 Snakebite 包提供的Python客户端库,我们可以轻松编写适用于 HDFS 的Python代码。它使用protobuf消息直接与 NameNode 通信。 Python客户端库直接与 HDFS 配合使用,无需对hdfs dfs进行系统调用。 Snakebite 不支持 python3。

hdfs dfs 提供了多个命令,我们可以通过这些命令对 HDFS 执行多项操作。 Snakebite 提供的客户端库将包含允许我们从 HDFS 检索数据的各种方法。 text()方法用于从我们的 HDFS 上可用的文件中简单地读取数据。因此,让我们执行一项快速任务来了解如何从 HDFS 的文件中检索数据。

任务:从 HDFS 检索文件数据。

第 1 步:创建一个名为data.txt的文本文件并向其中添加一些数据。

cd Documents/        # Changing directory to Documents(You can choose as per your requirement)

touch data.txt         # touch command is used to create file in linux enviournment

nano data.txt        # nano is a command line text editor for Unix and Linux operating system

cat data.txt         # to see the content of a file 

第 2 步:在 copyFromLocal 命令的帮助下将此data.txt文件发送到 Hadoop HDFS。  

句法:

hdfs dfs -copyFromLocal /path 1 /path 2 .... /path n /destination

使用命令将data.txt发送到HDFS的根目录。

hdfs dfs -copyFromLocal /home/dikshant/Documents/data.txt / 

现在,借助以下命令检查文件是否到达 HDFS 的根目录。

hdfs dfs -ls /

您可以通过访问http://localhost:50070/然后Utilities -> Browse the file system手动检查它

第 3 步:现在我们的任务是从我们发送到 HDFS 的data.txt 中读取数据。因此,在您的本地文件系统中创建一个文件data_read.py并将以下Python代码添加到其中。

Python
# importing the library
from snakebite.client import Client
  
# the below line create client connection to the HDFS NameNode
client = Client('localhost', 9000)
  
# iterate over data.txt file and will show all the content of data.txt
for l in client.text(['/data.txt']):
        print l


Python
from snakebite.client import Client
client = Client('localhost', 9000)
for a in client.copyToLocal(['/data.txt'], '/home/dikshant/Desktop'):
        print a


Client() 方法说明:

Client() 方法可以接受下面列出的所有参数:

  • host(字符串): NameNode的IP地址。
  • port(int): Namenode的RPC端口。
  • hadoop_version (int): Hadoop协议版本(默认为:9)
  • use_trash (boolean):删除文件时使用垃圾桶。
  • Effective_use (字符串): HDFS 操作的有效用户(默认用户是当前用户)。

第四步:运行read_data.py文件,观察结果。

python read_data.py

我们已经在客户端库的帮助下成功地从data.txt 中获取了数据。

我们还可以在 Snakebite 的帮助下将任何文件从 HDFS 复制到我们的本地文件系统。要从 HDFS 复制文件,请创建文件fetch_file.py并将以下Python代码复制到其中。 copyToLocal()方法用于实现此目的。

Python

from snakebite.client import Client
client = Client('localhost', 9000)
for a in client.copyToLocal(['/data.txt'], '/home/dikshant/Desktop'):
        print a

现在,运行此Python文件,您将看到以下输出。

python fetch_file.py

我们可以观察到文件现在已经复制到我的/home/dikshant/desktop目录中。