• 使用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  ")  # 删除文件
    
  • 相关阅读:
    Load与onload的区别
    理解.NET中的CLR原理(二)
    用JS实现网站的繁体简体版
    JQUERY获取text,areatext,radio,checkbox,select值
    SQL Server 存储过程的分页方案比拼
    理解.NET中的CLR原理(三)
    请慎用ASP.Net的validateRequest="false"~
    请慎用ASP.Net的validateRequest="false"~
    GridView中的超链接
    GridView中的超链接
  • 原文地址:https://www.cnblogs.com/hziwei/p/12801867.html
Copyright © 2020-2023  润新知