如何通过R访问HDFS



因此,我正试图在Windows机器上通过R远程连接到HDFS服务器。

然而,我将RStudio与"rhdfs"包一起使用,由于我必须创建HADOOP_CMD环境变量,我将Hadoop下载到我的机器上,以便提供环境变量,并更改core-site.xml。

以前我尝试过,成功地用Keytab连接Kerberized Hive服务器。

这是我的代码:

Sys.setenv(HADOOP_STREAMING = 
"C:/Users/antonio.silva/Desktop/hadoop-2.7.3/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar")
Sys.setenv(HADOOP_CMD = 
"C:/Users/antonio.silva/Desktop/hadoop-2.7.3/bin/hadoop")
Sys.setenv(HADOOP_HOME = 
"C:/Users/antonio.silva/Desktop/hadoop-2.7.3")
Sys.getenv("HADOOP_STREAMING")
Sys.getenv("HADOOP_CMD")
Sys.getenv("HADOOP_HOME")
#loading libraries
library(rJava)
library(rmr2)
library(rhdfs)
#init of the classpath 
hadoop.class.path <- list.files(path = c("C:/Users/antonio.silva/Desktop/jars/hadoop/"), 
pattern = "jar", full.names = T)
.jinit(classpath=hadoop.class.path)
hdfs.init()

在执行hdfs.int((方法和hdfs.devaluts((之后,fs变量和工作目录是同一目录。

我做错了什么?

我找到了一个解决方案。

如果服务器具有Kerberos身份验证方法,则keytab身份验证对访问服务器非常有用。请参阅如何使用Kerberos keytab通过R连接HIVE?。

之后,它需要下载到您的机器,在本例中,是一台Windows机器,集群中存在相同版本的Hadoop,并将Hadoop放置在Windows目录中。

然后,要配置Hadoop,您需要遵循这些步骤,直到"Hadoop配置"。在Window 10 上逐步安装Hadoop 2.8.0

集群中的Hadoop包含一些将在本地计算机中使用的配置文件。这些文件是core-site.xml、yarn-site.xml和hdfs-site.xml。它们包含有关集群的信息,例如默认FS、集群中使用的凭据类型、主机名和使用的端口。

附加:要在连接到Datanodes时使用主机名,需要在hdfs-site.xml文件中添加这些行。

<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
<description>Whether clients should use datanode hostnames when
connecting to datanodes.
</description>
</property>

最后,在R中使用以下代码来执行连接:

#set The Environment variables in R
Sys.setenv(HADOOP_HOME = "C:/Users/antonio.silva/Desktop/hadoop-2.7.3/bin/winutils.exe")
Sys.setenv(HADOOP_CMD = "C:/Users/antonio.silva/Desktop/hadoop-2.7.3/bin/hadoop")
Sys.setenv(HADOOP_STREAMING = "C:/Users/antonio.silva/Desktop/hadoop-2.7.3/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar")
library(rhdfs)

hdfs.init()
hdfs.ls("/")

所有这些都需要执行到Kerberized Hadoop集群的连接。

您需要重新启动R环境。如果使用Rstudio执行会话-->重新启动R

现在加载库并进行

hdfs.init().

最新更新