使用pyhdfs连接HDFS进行操作

一、pyhdfs.HdfsClient

pyhdfs.HdfsClient(hosts: Union[str, Iterable[str]] = 'localhost', 
randomize_hosts: bool = True,
user_name: Optional[str] = None,
timeout: float = 20, 
max_tries: int = 2, 
retry_delay: float = 5, 
requests_session: Optional[requests.sessions.Session] = None,
requests_kwargs: Optional[Dict[str, Any]] = None)

参数:

  • hosts(list 或str)– NameNode HTTP host:port字符串的列表,可以list是逗号分隔的字符串。如果未指定,则端口默认为50070。请注意,在Hadoop 3中,默认的NameNode HTTP端口已更改为9870。旧版本的默认值50070保持向后兼容。
  • randomize_hosts(bool)–默认情况下,随机选择主机。
  • user_name –以什么Hadoop用户身份运行。默认为HADOOP_USER_NAME环境变量(如果存在),否则为getpass.getuser()。
  • timeout(float)–等待一个NameNode持续多长时间(以秒为单位)。在某些情况下,备用NameNode可能无响应(例如,加载fsimage或检查点),因此我们不想对其进行阻止。
  • max_tries(int)–对每个NameNode重试请求的次数。如果NN1处于待机状态,而NN2处于活动状态,则我们可能首先联系NN1,然后在联系NN2时观察到故障转移到NN1。在这种情况下,我们要针对NN1重试。
  • retry_delay(float)–再次经历NameNodes之前要等待的时间(以秒为单位)
  • requests_session –一个requests.Session高级用法的对象。如果不存在,则此类将使用默认请求行为,即每个HTTP请求进行新会话。呼叫者负责关闭会话。
  • request_kwargs – **kwargs传递给请求的附加项
    使用pyhdfs连接hdfs,需要注意连接时需要修改本机hosts文件中的IP地址与主机名的映射,不然会报错。
    文件路径:C:WINDOWSsystem32driversetc 下的hosts文件中添加hadoop集群主机的映射关系
    例如 添加一下主机映射:
    192.168.160.100 hdp-100
import pyhdfs

fs = pyhdfs.HdfsClient(hosts="192.168.130.163,50070", user_name="root")  # 这两种连接方式都可以
fs = pyhdfs.HdfsClient(hosts="192.168.130.163,9000", user_name="root")

二、返回用户的根目录

print(fs.get_home_directory())
>> /user/root

三、返回可用的namenode节点

print(fs.get_active_namenode())
>> 192.168.160.100:50070

四、返回指定目录下的所有文件

print(fs.listdir("/"))  # 目录下的文件夹
>> ['image', 'mp4', 'tmp']

五、从本地上传文件至集群、从集群上copy到本地

fs.copy_to_local("D:PYTHNON/hadoop/3.mp4", '/mp4/3.mp4')  # 从hadoop下载到本地
fs.copy_from_local("D:PYTHNON/hadoop/3.mp4", '/mp4/3.mp4')  # 从本地上传到hadoop上

六、判断目录、文件是否存在

fs.exists('/mp4')  # 存在返回True,不存在返回False
print(fs.exists("/mp4/3.mp4"))  # 文件是否存,在存在返回True,不存在返回False

七、返回目录下的所有目录,路径,文件名

print(list(fs.walk('/mp4')))
>> [('/mp4', [], ['3.mp4'])]

八、删除目录、文件

fs.delete("/mp4", recursive=True)  # 删除目录  recursive=True
fs.delete("/mp4/3.mp4  ")  # 删除文件
原文地址:https://www.cnblogs.com/hziwei/p/12801867.html