Hadoop 、hdfs命令应用

上一篇文章我们搭建了ambari管理集群,现在我们利用平台来做一些小实验。

  • 我们的hd0-hdp作为主节点执行命令测试

三种命令的区别

  • 1.hadoop fs:

意思是说该命令可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命

令的使用范围更广

  • 2.hadoop dfs

专门针对hdfs分布式文件系统

  • 3.hdfs dfs

和上面的命令作用相同,相比于上面的命令更为推荐,并且当使用hadoop dfs时内部会被转为hdfs dfs命令

7.1登录hdfs用户

[root@nd0-hdp ~\]# su - hdfs

7.2 -ls <path>

  • 列出指定目录下的内容
[hdfs@nd0-hdp ~\]# hadoop fs -ls /

7.3 -du <path>

  • 显示目录中所有文件大小,或者指定一个文件时,显示此文件大小
\[hdfs@nd0-hdp ~\]\$ hadoop fs -du /

7.4 -count <path>

  • 统计文件个数及占空间情况
[hdfs@nd0-hdp ~\]\$ hadoop fs -count /

7.5 -mkdir

  • 新建目录
[hdfs@nd0-hdp ~\]\$ hadoop fs -mkdir /mvtest

7.6 -mv

  • 移动目录

7.7 -touchz <path>

  • 在指定目录创建一个新文件
[hdfs@nd0-hdp ~\]\$ hdfs dfs -touchz /mvtest/123

7.8 -rm<path>

  • 删除指定目录的文件
[hdfs@nd0-hdp ~\]\$ hdfs dfs -rm /mvtest/123

7.9 -chmod

  • 类似于linux命令,用来修改权限
[hdfs@nd0-hdp ~\]\$ hdfs dfs -chmod 777 /mvtest/123

7.10 -put

  • 从本地系统拷贝到dfs中

[hdfs@nd0-hdp ~]$ hdfs dfs -put -f mvtest/test /mvtest/

7.11 -get

  • 从dfs拷贝到本地系统中

[hdfs@nd0-hdp ~]$ hdfs dfs -get -f /mvtest/test ./

7.12 -cat

  • 和Linux的cat一样查看文件内的内容

[hdfs@nd0-hdp ~]$ hdfs dfs -cat /mvtest/test

8. Wordcount词频统计方法一:

  • Map阶段

– 主要完成key-value对生成,这里是每看到一个单词,就输出(单词,1)的kv对

  • 排序阶段

– 对刚才的kv对进行排序,这样相同单词就在一块儿了

  • Reduce阶段

– 对同一个单词的次数进行汇总,得到(词,频次)对

  • 错误解决

在开始前需要检查mapreduce和yarn的服务是否成功启动

实验最后执行作业任务时出现了内存不足的报错

需要在ambari控制台中将yarn和mapreduce的内存增大,需要将内存调到灰色小三角的默认位置

8.1 map程序:

[root@nd1-hdp mapreduce\]# vi map.py  #输入以下内容
import sys  
# 从标准输入过来的数据  
for line in sys.stdin:  
    # 把首位的空格去掉  
    line = line.strip()  
    # 把这一行文本切分成单词(按照空格)  
    words = line.split()  
    # 对见到的单词进行次数标注(出现1次)  
   	for word **in** words:  
    	print '%s\t%s' % (word, 1)  

8.2 reduce程序

[root@nd1-hdp mapreduce\]# vi reduce.py
#coding: utf-8
# !/usr/bin/env python

from operator import itemgetter
import sys

current_word = None
current_count = 0
word = None

# 依旧是标准输入过来的数据
for line in sys.stdin:
    # 去除左右空格
    line = line.strip()
    # 按照tab键对行切分,得到word和次数1
     word, count = line.split('\t', 1)
    # 你得到的1是一个字符串,需要对它进行类型转化
    try:
    	count = int(count)
    except ValueError:
    #如果不能转成数字,输入有问题,调到下一行
    	continue
    	
    # 如果本次读取的单词和上一次一样,对次数加1
    if current_word == word:
    	current_count += count
    else:
        if current_word:
        # 输出统计结果
            print '%s\t%s' % (current_word, current_count)
        current_count = count
        current_word = word

    # 不要忘了最后一个词哦,也得输出结果
if current_word == word:
print '%s\t%s' % (current_word, current_count)

8.3本地测试程序

  • 给编写的程序添加权限
[root@nd1-hdp mapreduce]# chmod a+x map.py

[root@nd1-hdp mapreduce]# chmod a+x reduce.py

  • 测试执行
[root@nd1-hdp mapreduce\]# echo "hello world son fk usa god dont bless you world son fk usa god" | python map.py |sort|python reduce.py

8.4 编写wcdata.txt

  • 上传到Hadoop
[root@nd1-hdp mapreduce]# su hdfs

[hdfs@nd1-hdp mapreduce]$ hdfs dfs -mkdir /hdfs_wc   #新建文件目录

[hdfs@nd1-hdp mapreduce]$ hdfs dfs -put wcdata.txt /hdfs_wc

[hdfs@nd0-hdp root]$ hdfs dfs -ls /hdfs_wc

#编写程序这里在nd1、nd0都可以只要上传文件到hdfs就行

  • 回到root

8.5 执行mapreduce任务

[root@nd0-hdp ~]# cd /usr/hdp/3.1.0.0-78/hadoop-mapreduce/   #找到Hadoop安装mapreduce的目录

[root@nd0-hdp hadoop-mapreduce]# ls

  • 找到需要的包hadoop-streaming.jar

  • 切换到hdfs用户

[root@nd0-hdp ~]# su hdfs

[hdfs@nd0-hdp root]$ hadoop jar /usr/hdp/3.1.0.0-78/hadoop-mapreduce/hadoop-streaming.jar -mapper "python map.py" -reducer "python reduce.py" -input /hdfs_wc/* -output /hdfs_wc1 -file /opt/hadoop/mapreduce/map.py -file /opt/hadoop/mapreduce/reduce.py

#在wordcount 后面的两个路径,前者是我们上传的数据路径后者则是输出job的路径

  • 查看目录下生成的文件

9.WordCount词频统计方法二:

  • 再次进入mapreduce的目录
[hdfs@nd0-hdp hadoop-mapreduce\]$ cd /usr/hdp/3.1.0.0-78/hadoop-mapreduce

这里使用Hadoop自带的包hadoop-mapreduce-examples-3.1.1.3.1.0.0-78.jar,这个包里面包含了word count程序所以我们就省略了编程的过程。

9.1执行命令

[hdfs@nd0-hdp hadoop-mapreduce]$ hadoop jar /usr/hdp/3.1.0.0-78/hadoop-mapreduce/hadoop-mapreduce-examples-3.1.1.3.1.0.0-78.jar wordcount /hdfs_wc/ /hdfsout1

#在wordcount 后面的两个路径,前者是我们上传的数据路径后者则是输出job的路径

  • 执行完成后查看目录下的文件
[hdfs@nd0-hdp hadoop-mapreduce]$ hadoop fs -ls /hdfsout1/

Found 2 items

-rw-r--r-- 3 hdfs hdfs 0 2020-11-11 16:16 /hdfsout1/\_SUCCESS

-rw-r--r-- 3 hdfs hdfs 115 2020-11-11 16:16 /hdfsout1/part-r-00000

[hdfs@nd0-hdp hadoop-mapreduce]$ hadoop fs -cat /hdfsout1/part-r-00000

至此本次实验结束。