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)