可能是一个菜鸟问题,但是除了复制到本地并通过 unix 读取之外,还有其他方法可以读取 hdfs 中的文件内容吗?
所以现在我正在做的是:
bin/hadoop dfs -copyToLocal hdfs/path local/path
nano local/path
我想知道我是否可以直接将文件打开到 hdfs 而不是在本地复制它然后打开它。
可能是一个菜鸟问题,但是除了复制到本地并通过 unix 读取之外,还有其他方法可以读取 hdfs 中的文件内容吗?
所以现在我正在做的是:
bin/hadoop dfs -copyToLocal hdfs/path local/path
nano local/path
我想知道我是否可以直接将文件打开到 hdfs 而不是在本地复制它然后打开它。
我相信hadoop fs -cat <file>
应该做这项工作。
如果文件很大(大多数时候都是这种情况),通过执行“cat”,您不想通过抛出文件的全部内容来炸毁终端。相反,使用管道并只获取文件的几行。
要获取文件的前 10 行,hadoop fs -cat 'file path' | 头-10
要获取文件的最后 5 行,hadoop fs -cat 'file path' | 尾-5
如果您使用的是 hadoop 2.x ,则可以使用
hdfs dfs -cat <file>
hadoop dfs -cat <filename> or hadoop dfs -cat <outputDirectory>/*
ssh hadoop@emrClusterIpAddress -i yourPrivateKey.ppk
/usr/lib/spark/bin/spark-shell --conf spark.eventLog.enabled=true --conf spark.eventLog.dir=hdfs://yourEmrClusterIpAddress:8020/eventLogging --class org.apache.spark.examples.SparkPi --master yarn --jars /usr/lib/spark/examples/jars/spark-examples_2.11-2.4.0.jar
列出我们刚刚创建的那个目录的内容,它现在应该有一个来自我们刚刚运行的新日志文件
[hadoop@ip-1-2-3-4 bin]$ hdfs dfs -ls /eventLogging 找到 1 项 -rwxrwx--- 1 hadoop hadoop 53409 2019-05-21 20:56 /eventLogging/application_1557435401803_0106
现在查看文件运行hdfs dfs -cat /eventLogging/application_1557435401803_0106
资源: https ://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html
我通常使用
$ hdfs dfs -cat <filename> | less
这也有助于我在查看内容时搜索单词以找到我感兴趣的内容。
对于上下文无关的目的,例如了解文件中是否存在特定单词或计算单词出现次数,我使用。
$ hdfs dfs -cat <filename> | grep <search_word>
注意:grep
还有-C
上下文选项,匹配后/前的行-A
和行。-B