windows 平台上使用 pyarrow 连接 hdfs 详细教程

windows 平台上使用 pyarrow 连接 hdfs 详细教程

因篇幅太长,因此先直接说结论,若有兴趣知道这个结论是怎么来的,可以跳到章节:踩坑记录,中进行细节上的阅览。

转载请注明出处,蟹蟹。

连接教程

  1. 使用 pip 安装 pyarrow
  2. 下载 JDK ,解压后设置环境变量 JAVA_HOMEJDK_HOME 指向解压后的路径。
  3. 下载 hadoop 的预发布压缩包,并解压。解压后设置环境变量 HADOOP_HOME 指向解压后的路径。
  4. 下载与步骤 3 对应的 hadoop 源码包,准备编译 windows 平台上的 hdfs.dll 文件。
  5. 在解压后的 hadoop 源码 hadoop-2.9.2-src\hadoop-hdfs-project\hadoop-hdfs-native-client\src 下,存在 CMakeLists.txt 文件,使用该 CMake 文件进行编译,以此编译出 sln 文件。
    • 若在编译过程中出现报错:JVM_ARCH_DATA_MODEL 未定义,则可在编译命令中加入以下参数 -DJVM_ARCH_DATA_MODEL=64 (指定 java 的平台版本,存疑)。
    • 若在编译过程中出现报错:OpenSSL_ROOT_DIR not defined (missing: OpenSSL_include_dir) ,则需进行第六步。
  6. (若步骤 5 出现了报错 ,则进行该步骤,否则可跳过)根据 OpenSSL 的官方编译文档,在本机上编译,以此得到 include 文件夹。
  7. 使用 Visual Studio 打开 CMake 编译出的 sln 文件。打开后设置为 Release 和对应的平台版本(x64/x32)后,在解决方案中选中 hdfs ,右键后点击生成;即可在当前目录下的 bin 文件夹中得到编译后的 dll 文件。(举个例子:./bin/Release/hdfs.dll
  8. 将生成的 hdfs.dll, hdfs.exp, hdfs.lib 三个文件放置在一个新的文件夹中,并设置环境变量 ARROW_LIBHDFS_DIR 指向该路径。
  9. winutils上下载对应版本的 hadoop 文件夹,将 bin 文件夹里面的文件拷贝覆盖到原有 hadoop\bin 文件夹。
  10. 每次连接前使用 set_hadoop_classpath 函数设置环境变量后即可使用。
    import os
    import subprocess
    from pyarrow import fs
    
    # Thanks to: https://stackoverflow.com/a/66651006
    def set_hadoop_classpath():
    
    	if 'hadoop' in os.environ.get('CLASSPATH', ''):
    		return
    
    	if 'HADOOP_HOME' in os.environ:
    		hadoop_bin = os.path.normpath(os.environ['HADOOP_HOME']) + "/bin/" # '{0}/bin/hadoop'.format(os.environ['HADOOP_HOME'])
    	else:
    		hadoop_bin = 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值