如何通过R访问HDFS?

时间:2018-12-06 09:59:52

标签: r hadoop hdfs

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

但是,我将RStudio与“ rhdfs”软件包一起使用,并且由于必须创建HADOOP_CMD环境变量,因此我将Hadoop下载到了我的机器上以提供环境变量,并更改了核心- site.xml。

以前,我尝试过将Kerberized Hive服务器与Keytab进行成功连接。

这是我的代码:

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.init()方法并执行hdfs.defaluts()之后,fs变量和工作目录位于同一目录。

我在做什么错?

2 个答案:

答案 0 :(得分:0)

我想出了一个解决方案。

如果服务器具有Kerberos身份验证方法,则密钥表身份验证对于访问服务器很有用。 参见How to connect with HIVE via R with Kerberos keytab?

此后,需要下载到您的计算机(在本例中为Windows计算机),该计算机与群集中存在的Hadoop相同版本,并将Hadoop放置在Windows目录中。

然后,要配置Hadoop,您需要执行以下步骤,直到“ Hadoop配置”为止。 Step by step Hadoop 2.8.0 installation on Window 10

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

其他:在连接到Datanode时要使用主机名,您需要在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集群的连接。

答案 1 :(得分:0)

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

现在加载库并执行

 hdfs.init().