通过Shell脚本运行Java程序时遇到的一些问题

通过Shell脚本运行Java程序时遇到的一些问题,java,shell,Java,Shell,我已经为自动编程编写了一个shell脚本 1) 启动hadoop服务(namenode、datanode、jobtracker、tasktracker、secondary namenode), 2) 正在从配置单元中删除所有表 3) 再次从SQL SERVER导入配置单元中的所有表 我从java中调用这个shel脚本。下面是Shell脚本的代码和Java代码 Shell脚本: export HADOOP_HOME=/home/hadoop/hadoop-0.20.2-cdh3u2/ export

我已经为自动编程编写了一个shell脚本 1) 启动hadoop服务(namenode、datanode、jobtracker、tasktracker、secondary namenode), 2) 正在从配置单元中删除所有表 3) 再次从SQL SERVER导入配置单元中的所有表

我从java中调用这个shel脚本。下面是Shell脚本的代码和Java代码

Shell脚本:

export HADOOP_HOME=/home/hadoop/hadoop-0.20.2-cdh3u2/
export HIVE_HOME=/home/hadoop/hive-0.7.1/
export SQOOP_HOME=/home/hadoop/sqoop-1.3.0-cdh3u1/
export MSSQL_CONNECTOR_HOME=/home/hadoop/sqoop-sqlserver-1.0
export HBASE_HOME=/home/hadoop/hbase-0.90.1-cdh3u0
export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.3.1+10
export SQOOP_CONF_DIR=/home/hadoop/sqoop-1.3.0-cdh3u1/conf/

/home/hadoop/hadoop-0.20.2-cdh3u2/bin/hadoop/start-all.sh
/home/hadoop/hadoop-0.20.2-cdh3u2/bin/hadoop -rmr /user/hadoop/*

/home/hadoop/hive-0.7.1/bin/hive -e 'show tables' > TablesToDelete.txt
while read line1
do
    echo 'drop table '$line1
    /home/hadoop/hive-0.7.1/bin/hive -e 'drop table '$line1
done < TablesToDelete.txt

while read line
do
    echo $line" ------------------------------"
/home/hadoop/sqoop-1.3.0-cdh3u1/bin/sqoop-import --connect 'jdbc:sqlserver://192.168.1.1;username=abcd;password=12345;database=HadoopTest' --table line --hive-table $line  --create-hive-table --hive-import -m 1 --hive-drop-import-delims --hive-home /home/hadoop/hive-0.7.1 --verbose
done < /home/hadoop/sqoop-1.3.0-cdh3u1/bin/tables.txt
但当我运行程序时,我在控制台上看不到任何东西,程序仍处于运行模式。 如果我把下面的代码放在shell脚本中:

/home/hadoop/hive-0.7.1/bin/hive -e 'show tables' > TablesToDelete.txt
while read line1
do
    echo 'drop table '$line1
    /home/hadoop/hive-0.7.1/bin/hive -e 'drop table '$line1
done < TablesToDelete.txt
/home/hadoop/hive-0.7.1/bin/hive-e'show tables'>TablesToDelete.txt
读第1行时
做
回显“放置表”$line1
/home/hadoop/hive-0.7.1/bin/hive-e'drop table'$line1
完成
然后输出为:

找不到hadoop安装:$hadoop\u HOME必须设置或hadoop必须位于路径中


我的程序/脚本有什么问题?在哪里以及如何在我的脚本中设置HADOOP_HOME和所有路径?

调用
waitFor
是一个阻塞调用,正如名称所示。它将停止进一步执行,直到流程完成。但是,由于您的代码也是进程标准输出的接收器,所以整个过程都会阻塞。处理完脚本的输出后,只需将
waitFor
移动到

/home/hadoop/hive-0.7.1/bin/hive -e 'show tables' > TablesToDelete.txt
while read line1
do
    echo 'drop table '$line1
    /home/hadoop/hive-0.7.1/bin/hive -e 'drop table '$line1
done < TablesToDelete.txt