读取 hdfs 上的文件,需要指定节点名以及配置好环境变量。
比如:
filename_queue = tf.train.string_input_producer([
"hdfs://namenode:8020/path/to/file1.csv",
"hdfs://namenode:8020/path/to/file2.csv",
])
或者
filename_queue = tf.data.Dataset.list_files([
"hdfs://namenode:8020/path/to/file1*csv",
])
dataset = tf.data.TextLineDataset(filename_queue, compression_type = 'compression_type')
或者获取其他的文件方式,获取其他文件格式的 dataset 都可以
这一步是为了指明数据在 hdfs 中的位置,所以一定要知道自己的文件在集群中的什么位置。(文件的路径前缀类似 hdfs://default/
)
第二步就是指明 tf 运行是需要的环境变量:
JAVA_HOME:这个只要安装了 java,一般环境里都有
HADOOP_HDFS_HOME:使用 which hadoop 看一下 hadoop 的安装路径
LD_LIBRARY_PATH:包括 libjvm.so 和 libhdfs.so(可选)的路径。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${JAVA_HOME}/jre/lib/amd64/server
如果运行是出现了找不到 libjvm.so 或者 libhdfs.so,我一般会在这里手动添加一下缺失库文件的路径。
CLASSP