HDFS
HDFS 插件可以从 Hadoop 的 hdfs 之中读取文件的信息,或者是将hdfs上的文件传至本地。
目前支持版本:relsease200, release130, release120。您当前查看的插件版本为 release200,请使用 DolphinDB 2.00.X 版本 server。若使用其它版本 server,请切换至相应插件分支。
预编译安装
预先编译的插件文件存放在 DolphinDBPlugin/hdfs/bin/linux64 目录下。将其下载至 /DolphinDB/server/plugins/hdfs。
执行 Linux 命令,指定插件运行时需要的动态库路径
export LD_LIBRARY_PATH=/path/to/plugins/hdfs:$LD_LIBRARY_PATH
find /usr/ -name "libjvm.so" //寻找系统上libjvm.so库的所在文件夹位置。
export LD_LIBRARY_PATH=/path/to/libjvm.so/:$LD_LIBRARY_PATH
启动 DolphinDB,加载插件:
cd DolphinDB/server //进入DolphinDB server目录
./dolphindb //启动 DolphinDB server
loadPlugin("/path/to/plugins/hdfs/PluginHdfs.txt");
编译安装
编译环境搭建
#从Hadoop的官网下载Hadoop软件
https://hadoop.apache.org
# 对于ubuntu用户来说
sudo apt install cmake
# 对于Centos用户来说
sudo yum install cmake
编译安装
cd hdfs
mkdir build
cd build
cmake .. -DHADOOP_DIR=/path/to/your/hadoop/home
make
用户接口
connect
语法
conn=hdfs::connect(nameMode, port, [userName], [kerbTicketCachePath] )
参数
- nameMode:hdfs所在的IP地址,如果是本地的也可以使用“localhost”
- port:hdfs开放的端口号,如果是本地一般为9000
- userName:可以选择的登录的用户名
- kerbTicketCachePath:可选,连接到hdfs时要使用的Kerberos路径
详情
返回值是一个建立链接之后的句柄,如果建立连接失败则会抛出异常
disconnect
语法
disconnect(hdfsFS)
参数
- hdfsFS:connect()函数返回的句柄
详情
用以取消已经建立的连接
exists
语法
exists(hdfsFS, path )
参数
- hdfsFS:connect()函数返回的句柄
- path:你想判断是否存在的路径
详情
用来判断某一个指定的路径是否存在,如果不存在则报错,如果存在则没有返回值
copy
语法
copy(hdfsFS1, src, hdfsFS2, dst)
参数
- hdfsFS1:connect()函数返回的句柄
- src:源文件的路径
- hdfsFS2:connect()函数返回的句柄
- dst:是目标文件的路径
详情
用来将一个hdfs中某一路径的文件拷贝到另一hdfs的某一路径之中,如果未成功则报错,如果成功则没有返回值
move
语法
move(hdfsFS1,src,hdfsFS2,dst)
参数
- hdfsFS1:connect()函数返回的句柄
- src:源文件的路径
- hdfsFS2:connect()函数返回的句柄
- dst:目标文件的路径
详情
用来将一个hdfs中某一路径的文件移动到另一hdfs的某一路径之中,如果未成功则报错,如果成功则没有返回值
delete
语法
delete(hdfsFS, path, recursive )
参数
- hdfsFS:connect()函数返回的句柄
- path:想要删除的文件的路径
- recursive:表示是否递归删除想要删除的目录
详情
用来删除某一个目录或文件,如果未成功则报错,如果成功则没有返回值
rename
语法
rename(hdfsFS, oldPath, newPath )
参数
- hdfsFS:connect()函数返回的句柄
- oldPath:重命名之前文件的路径
- newPath:重命名之后文件的路径。如果路径已经存在并且是一个目录,源文件将被移动到其中;如果路径存在并且是一个文件,或者缺少父级目录,则会报错。
详情
用来将文件重命名,也可用于移动文件,如果未成功则报错,如果成功则没有返回值
createDirectory
语法
createDirectory(hdfsFS, path)
参数
- hdfsFS:connect()函数返回的句柄
- path:想要创建的文件夹的路径
详情
用来创建一个空文件夹,如果未成功则报错,如果成功则没有返回值
chmod
语法
chmod(hdfsFS, path, mode)
参数
- hdfsFS:connect()函数返回的句柄
- path:想要修改权限的文件的路径
- mode:想要修改成为的权限值
详情
用来修改某一文件或某一文件夹的使用权限,如果未成功则报错,如果成功则没有返回值
getListDirectory
语法
fileInfo=getListDirectory(hdfsFS, path)
参数
- hdfsFS:connect()函数返回的句柄
- path:目标目录
详情
返回一个包含目标目录所有信息的句柄,如果未成功则报错,如果成功则没有返回值
listDirectory
语法
listDirectory(fileInfo)
参数
- fileInfo:getListDirectory()函数返回的句柄
详情
列出目标目录下所有文件的详细信息
freeFileInfo
语法
freeFileInfo(fileInfo)
参数
- fileInfo:getListDirectory()函数返回的句柄
详情
用来释放目录信息所占用的空间
readFile
语法
readFile(hdfsFS, path, handler)
参数
- hdfsFS:connect()函数返回的句柄
- path:想要读取的文件所在的路径
- handler:只能够接受两个传入参数的用来处理文件字节流的函数
详情
从hdfs的服务器中读取数据,调用handler函数将数据处理后存放在内存表中,返回值为该内存表。
writeFile
语法
writeFile(hdfsFS, path, tb, handler)
参数
- hdfsFS:connect()函数返回的句柄
- path:想要读取的文件所在的路径
- tb:要保存的内存表
- handler:接受一个内存表作为参数,将内存表转换为数据流的函数
详情
将内存表以特定格式存放在hdfs中。
附录
loadPlugin("/path/to/PluginHdfs.txt");
fs=hdfs::connect("default",9000);
hdfs::exists(fs,"/user/name");
hdfs::exists(fs,"/user/name1");
hdfs::copy(fs,"/tmp/testfile.txt",fs,"/tmp/testfile.txt.bk");
hdfs::copy(fs,"/tmp/testfile1.txt",fs,"/tmp/testfile.txt.bk");
hdfs::move(fs,"/tmp/testfile.txt.bk",fs,"/user/name/input/testfile.txt");
hdfs::move(fs,"/user/name/input/testfile.txt",fs,"/user/name1/testfile.txt");
hdfs::rename(fs,"/user/name1/testfile.txt","/user/name1/testfile.txt.rename");
hdfs::createDirectory(fs,"/user/namme");
hdfs::chmod(fs,"/user/namme",600);
hdfs::delete(fs,"/user/namme",1);
hdfs::disconnect(fs);
fileInfo=hdfs::getListDirectory(fs,"/user/name/input/");
hdfs::listDirectory(fileInfo);
hdfs::freeFileInfo(fileInfo);
loadPlugin("/path/to/PluginOrc.txt")
re=hdfs::readFile(conn,'/tmp/testfile.orc',orc::loadORCHdfs)
loadPlugin("/path/to/PluginParquet.txt")
hdfs::writeFile(conn,'/tmp/testfile.parquet',re,parquet::saveParquetHdfs)