代码之家  ›  专栏  ›  技术社区  ›  plainter

如何在shell脚本中读取所需文件

  •  0
  • plainter  · 技术社区  · 8 年前

    对不起,问题不清楚,我是Hadoop研究的新手。 我再次编辑了这个问题。

    然后写下跑步记录。sh在HDFS上继续使用使用Hadoop流的MapReduce。

    我需要在HDFS上读取半年的数据,文件名:20170101-20170630。

    HDFS中的文件路径:

    /user/name/20161231
    /user/name/20170101
    /user/name/20170102
    .....
    /user/name/20170630
    /user/name/20170701
    

    run.sh中的脚本部分:

    #! /bin/bash 
    HPHOME=/opt/cloudera/parcels/CDH
    JAR_PACKAGE=/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar
    #it dosen't work, how to read selected file:20170101-20170630
    IN_PATH=/user/name/20170[101-630] 
    OUT_PATH=/user/out
    MAP_FILE=/home/map.py
    RED_FILE=/home/red.py
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   sumitya    8 年前

    不确定你是否在阅读 local 文件或 hdfs 文件夹。但将提出这两种解决方案。

    从本地unix系统读取6个月的文件。

    local_files=`ls /user/name/2017[0][1-6][0-9][0-9]`
    for IN_PATH in `echo $local_files`;
    do 
       echo "LOCAL FILE IS: $IN_PATH"
    done
    

    从hdfs系统读取6个月的文件。

    hdfs_files=`hdfs dfs -ls /user/hduser/|grep /user/hduser/2016[0][1]|awk '{print $8}'`
    for IN_PATH in `echo $hdfs_files`;
    do 
      echo "HDFS FILE IS: $IN_PATH"
    done
    
    推荐文章