一、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 ") # 删除文件