关于如何从hdfs上导大数据到本地

时间:2020-12-03 19:53:31
  1. 使用命令
    将hdfs上文件拷到本地:
    hadoop fs -get url localurl

    rm -rf url 删除文件及目录。
    du -sm * | sort -n 统计当前目录下的文件大小并排序
    hadoop fs -du url 显示hadoop 路径下的文件大小及路径

  2. 保护进程

    使用上边的hadoop fs -get url localurl 来拷贝大文件到本地的话很容易中途断掉。原因是:文件过大,拷贝时间过长,一旦shell客户端的网络状况不良则会拷贝中断。(..+ &)将当前任务提交给后台,让后台去执行。从而使这个任务在本地执行,不停止/重启hadoop则不会拷贝中断。
    解决方法:在命令末尾加 & 符号。
    eg:hadoop fs -get /xxx/bb /yyy/aa &

    其他思想
    关于这样用命令来拷贝文件其实是很慢的(特别是大文件时,问题更突出),一般1TB 的文件使用这样的命令拷贝完成时间一般为10小时左右。所以最好的处理这类的方法是对一个大文件进行多个线程的处理,使用编程来做到。这样就快多了。

    文件名长度影响拷贝
    一般在liunx系统中文件命不能超过255字符,长度超过则文件拷贝时报错:fileName is too long!从而拷贝中断。这个问题就要先查下文件中是否存在这样的过长文件名。

另:在拷贝过程中有些文件会报错,但只要程序还在继续运行就不用管这些错(我是因为没有找到原因和解决的方法,有谁知道请多指教,以后明白原因后再回来改过。)。