当前位置:首页 » 文件传输 » 访问hdfs
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

访问hdfs

发布时间: 2022-03-03 07:03:22

❶ Hadoop集群以外的机器如何访问Hadoop集群,进行提交文件,下载文件

集群以外的机器如何访问Hadoop集群,并像集群中提交作业和传送数据
(1)首先,在机器上安装nutch或者hadoop
(2)配置两个文件
hadoop-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://gc04vm12:9000</value>
<description> </description>
</property>
<property>
<name>mapred.job.tracker</name>
<value>gc04vm12:9001</value>
<description> </description>
</property>
</configuration>
(3)这样便能执行命令,查看集群状态,向集群提交作业

(4)hdfs中的用户
使用root登陆而hadoop中没有创建root用户时,使用如下命令时,查看到的就不是nutch用户主目录 /user/root了
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls 执行此命令时,即是列出/user/root(root用户主目录)目录下的文件或目录
ls: Cannot access .: No such file or directory. 没有此目录
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls /
Found 3 items
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:42 /tmp
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:53 /user
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:55 /usr 这个是什么?
[root@gc03vm12 nutch-1.0]# bin/hadoop dfs -mkdir x 主目录(/user/root)中创建x目录,提示以下信息
mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="user":nutch:supergroup:rwxr-xr-x
这是因为root用户对/user/目录没有写权限(drwxr-xr-x - nutch supergroup 0 2010-05-21 00:53 /user)

hdfs中的nutch用户是启动hadoop集群的这个用户,当客户机中也存在nutch用户时,登陆后访问hdfs时,进入的是home目录(/user/nutch)。
hdfs中文件和目录的权限类似linux,可以修改其权限,改变其所属组
nutch用户格式化namenode,启动hadoop集群(会用到nutch用户的公钥信息,ssh配置)后,执行命令,
[nutch@gc03vm12 nutch-1.0]# bin/hadoop dfs -ls 执行此命令时,即是列出/user/nutch(nutch用户主目录)目录下的文件或目录
ls: Cannot access .: No such file or directory.
因为没有/user/nutch目录,所以不能访问,而此时若创建一个文件,如使用以下命令
[nutch@gc03vm12 nutch-1.0]# bin/hadoop dfs -mkdir x 则可以顺利执行,此时它将创建/user/nutch/x目录。
而使用root用户不行,是因为 root用户对/user/目录没有写权限。
那么如何创建一个root用户呢,可以这样做
超级用户nutch在hdfs中创建目录/user/root,即 bin/hadoop dfs -mkdir /user/root
更改/user/root目录所属用户和组, bin/hadoop dfs -chown -R root:root /user/root (若此处没有指定组,则默认root属于supergroup组, bin/hadoop dfs -chown -R root /user/root)
这样就相当于在hdfs中创建了用户root,组root;
用户权限和Linux类似,nutch是超级用户。
例如nutch在root的home目录下创建目录s,则s的权限如下,属于nutch,组是root
drwxr-xr-x - nutch root 0 2010-05-21 04:41 /user/root/s
root用户此时就不能写s目录了
[root@gc04vm14 nutch-1.0]# bin/hadoop dfs -mkdir s/x
mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="s":nutch:root:rwxr-xr-x

root用户属于root组,并且执行作业,会提示错误,如下
[root@gc03vm12 nutch-1.0]# bin/nutch crawl /user/nutch/urls -dir data2 -depth 5 -topN 8
提示如下错误
org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="tmp":nutch:supergroup:rwxr-xr-x
这是因为root用户对/tmp目录(hdfs目录)没有写权限,因为作业执行时,会在/tmp目录下生成相应的job文件,
/tmp的权限如下:
drwxr-xr-x - nutch supergroup 0 2010-05-21 00:42 /tmp
因此非超级用户提交作业时,用户问题是一个很麻烦的问题
注:
hadoop有些命令只能在namenode上执行

❷ “HDFS 采用数据流方式来访问文件,只支持单个客户端向一个文件追加数据”是什么意思啊

上半句话,访问文件不外乎读和写,需要读写时调用函数FileSystem&open()和FileSystem&create(),返回的对象是FSDataInputStream和FSDataOutputStream。 data直译成中文就是数据,stream直译成中文就是流。 这两个对象分别继承于java.io.DataInputStream和java.io.DataOutputStream, 是java的常用的文件读写类。 需要读时用DataInputStream的函数readInt(), readFloat()...,写时也差不多。

下半句话,两个关键词, ”单个客户“和”追加“。单个客户指不能有两个线程同时写;追加指写的形式只能是在文件后加内容(append),不能覆盖(overwrite)。 这两个限制都是设计上简化考虑。 多个线程同时append时,由于hdfs是一份文件存于多个机器,保证在每台机器上两个线程写的顺序一致(从而结果一致)是一个很难的问题(当然不是做不到), 出于简单考虑, 就不这么做了。 多个线程同时overwrite就更麻烦。

❸ hadoop程序怎么访问hdfs路径

先用hdfsGetPathInfo 得到一个hdfsFileInfo类型的结构体, get_real_path(dsh, s, real_path); hdfsFileInfo * pt_hdfs_file_info = hdfsGetPathInfo(hdfs,real_path);// 这个结构体中有个kind属性,就是来区分是文件还是目录 typedef struct
~如果你认可我的回答,请及时点击【采纳为满意回答】按钮
~~手机提问的朋友在客户端右上角评价点【满意】即可。
~你的采纳是我前进的动力
~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。

❹ hdfs 流式数据怎么理解那一般的数据访问模式是怎样的

收集到部分数据就开始处理,不是收集到全部数据再处理。每次分析都涉及数据集的大部分数据,收集全部数据延迟大,也会消耗大量内存。

❺ 无法通过URL访问HDFS,SHELL可以弄,配置的是hdfs://hadoop(换成ip也不行):9000

看看50030
看看live node
在看看 iptables

❻ 能不能通过浏览器输入一个URL来访问hadoop下的图片

应该不能,只能通过http请求获取文件内容,然后自己进行处理转成图片格式显示

❼ 用python的hdfs库libpyhdfs访问hdfs的时候怎么设置用户名和用户组

用thrift的接口去实现
from hdfs import hadoopthrift_cli
用do_chown这个方法可以

❽ python访问hdfs

  1. 将当前的python脚本名称改为test_pyhdfs之类,总之不要和包的名字一样。

  2. import后,执行dir(pyhdfs),贴出结果看看。

❾ 如何远程读取CDH的hadoop上的HDFS数据

static Configuration conf=new Configuration();
static FileSystem fs=null;
static{
try {
//默认的hadoop的fs.defaultFS的端口号为8020,这里需要跟集群里面的配置一致
conf.set("fs.defaultFS","hdfs://dnode1:8020/");
fs=FileSystem.get(conf);
} catch (IOException e) {
log.error("初始化FileSystem失败!",e);
}
}

OK,只需要这简单的一行,我们就可以读取HDFS上的数据了,另外如要注意的是,需要把hadoop的对应的host也配置在win上的host文件里,避免访问文件系统出错,只要上面这一步打通,下面的对于HDFS系统上文件和目录增删改查,以及对文件内容的读取和写入,散仙在这里就不多写了,这个很简单,大家看看FileSystem这个类的Api就能很容易掌握的。

❿ hadoop怎么访问hdfs路径

先用hdfsGetPathInfo 得到一个hdfsFileInfo类型的结构体,
get_real_path(dsh, s, real_path);
hdfsFileInfo * pt_hdfs_file_info = hdfsGetPathInfo(hdfs,real_path);//
这个结构体中有个kind属性,就是来区分是文件还是目录
typedef struct {
tObjectKind mKind; /* file or directory */
char *mName; /* the name of the file */
tTime mLastMod; /* the last modification time for the file in seconds */
tOffset mSize; /* the size of the file in bytes */
short mReplication; /* the count of replicas */
tOffset mBlockSize; /* the block size for the file */
char *mOwner; /* the owner of the file */
char *mGroup; /* the group associated with the file */
short mPermissions; /* the permissions associated with the file */
tTime mLastAccess; /* the last access time for the file in seconds */
} hdfsFileInfo;