Сценарий оболочки не работает над crontab, но работами иначе

У меня есть сценарий, который объединяет весь маленький подарок файлов в почасовых каталогах в hdfs в один единственный большой файл. Сценарий работает хорошо при выполнении через CLI. Я затем установил сценарий для выполнения в 1:30 каждый день для слияния файлов предыдущего дня. Но это не работает. Я экспортировал ПУТЬ, HADOOP_HOME, HADOOP_CONF_DIR наверху моего сценария. Измененные полномочия от пользователя базироваться. Но никакой справки. Вот мой сценарий:

#!/bin/bash

export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/java/jdk1.8.0/bin:/home/hadoopuser/hadoop/bin:/home/hadoopuser/zookeeper/bin:/home/hadoopuser/hive/bin:/home/hadoopuser/derby/bin:/home/hadoopuser/maven/bin:/home/hadoopuser/pig/bin:/home/hadoopuser/spark/bin:/home/hadoopuser/flume/bin:/home/hadoopuser/.local/bin:/home/hadoopuser/bin:/home/hadoopuser/user1/tmp

export HADOOP_HOME=/home/hadoopuser/hadoop
export HADOOP_CONF_DIR=/home/hadoopuser/hadoop/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=/home/hadoopuser/hadoop/lib/native
export HADOOP_OPTS="-Djava.library.path=/home/hadoopuser/hadoop/lib/native"

echo $HADOOP_HOME
echo $HADOOP_CONF_DIR
echo $PATH
mnth=$(date +%m)
day=$(date -d "1 day ago" +"%d")
echo "Running for $day-$mnth-2017"
for k in $mnth
do
     for j in $day
     do
         for i in 17 18 19 20 21 22 23
         do

           hadoop fs -cat /topics/topic1/year=2017/month=$k/day=$j/hour=$i/* | hadoop fs -put - /merged/topic1/2017"_"$k"_"$j"_"$i
           hadoop fs -du -s /merged/topic1/2017"_"$k"_"$j"_"$i > /home/hadoopuser/user1/merge_test/size.txt
           x=`awk '{ print $1 }' /home/hadoopuser/user1/merge_test/size.txt`
           if [ $x -eq 0 ]
           then
           hadoop fs -rm /merged/topic1/2017"_"$k"_"$j"_"$i
           else
           echo "MERGE DONE!!! All files generated at hour $i of $j-$k-2017 merged into one"
           fi
         done
    done
done

rm -f /home/hadoopuser/user1/merge_test/size.txt

Вот то, в чем я упоминаю crontab -e

30 1 * * * /home/hadoopuser/user1/tmp/cron-merge-generalevents.sh > /home/hadoopuser/user1/tmp/cron-merge-generalevents.txt

Все я вижу в /home/hadoopuser/user1/tmp/cron-merge-generalevents.txt в течение всех часов дня

/home/hadoopuser/hadoop
/home/hadoopuser/hadoop/etc/hadoop
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/java/jdk1.8.0/bin:/home/hadoopuser/hadoop/bin:/home/hadoopuser/zookeeper/bin:/home/hadoopuser/hive/bin:/home/hadoopuser/derby/bin:/home/hadoopuser/maven/bin:/home/hadoopuser/pig/bin:/home/hadoopuser/spark/bin:/home/hadoopuser/flume/bin:/home/hadoopuser/.local/bin:/home/hadoopuser/bin:/home/hadoopuser/user1/tmp
Running for 19-07-2017
MERGE DONE!!! All files generated at hour 17 of 19-07-2017 merged into one
MERGE DONE!!! All files generated at hour 18 of 19-07-2017 merged into one
MERGE DONE!!! All files generated at hour 19 of 19-07-2017 merged into one
MERGE DONE!!! All files generated at hour 20 of 19-07-2017 merged into one
MERGE DONE!!! All files generated at hour 21 of 19-07-2017 merged into one
MERGE DONE!!! All files generated at hour 22 of 19-07-2017 merged into one
MERGE DONE!!! All files generated at hour 23 of 19-07-2017 merged into one
1
задан 16 November 2017 в 14:24

1 ответ

В таком случае хороший совет состоит в том, чтобы экспортировать также JAVA_HOME поскольку Вы используете hadoop, который зависит от Java. Но лучшее должно импортировать/получить все переменные из bash_profile

(на начинании сценария)

. /path/to/.bash_profile

или

source /path/to/.bash_profile
0
ответ дан 8 December 2019 в 04:39

Другие вопросы по тегам:

Похожие вопросы: