hadoop 常用命令、参数

hadoop 常用命令、参数,第1张

注意:与mapred.min.split.size、mapred.max.split.size、block_size和minSplitSize几个值有关。

如果只设置mapred.min.split.size,计算方式可以简化为:

如果不进行兄宽任何设置,默认的map个数是和blcok_size相关的。 default_num = total_size / block_size

可以通过参数mapred.map.tasks来设置程序员期望的map个数,但是这个个数只有在大于default_num的时候,才会生效。 goal_num = mapred.map.tasks

可以通过mapred.min.split.size 设置每个task处理的文件大小,羡稿亮但是这个大小只有在大于block_size的时候才会生效。

通过公式 compute_map_num = min(split_num, max(default_num, goal_num)) 可以计算出 map 数。除了这些配置以外,mapreduce还要遵循一些原则。 mapreduce的每一个map处理敬庆的数据是不能跨越文件的,也就是说min_map_num >= input_file_num。 所以,最终的map个数应该为: final_map_num = max(compute_map_num, input_file_num)

实际上只设置 mapred.map.tasks 和 mapred.min.split.size 这两个参数,如果想增加map个数,则设置mapred.map.tasks 为一个较大的值,如果想减少 map 数,则设置mapred.min.split.size 为一个较大的值。

环境变陵册脊量原因。hadoop文件复制到其它节点尺渗时,需要对程序进行调试,ssh无法解析主机名,是因为在程序中的环境变量没有设置好,没有变量名,需要加入etcprofile语句。hadoop是一个由Apache基金会所开姿悔发的分布式系统基础架构。

集群以外的机器如何访问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上执行


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12251135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存