1

有一个正在运行的 Hadoop 集群。我已经下载了 Hadoop 发行版(在本例中为 0.20.205.0)

我需要创建一些能够在该集群上调用 Hadoop 的 shell 脚本(bash/zsh/perl)。理想情况下,它应该能够以这种方式从 Sqoop 脚本中调用:

exec ${HADOOP_HOME}/bin/hadoop com.cloudera.sqoop.Sqoop "$@"

如何调用 Hadoop 并提供 namenode/jobtracker URI?如何为 Sqoop 和 DB 驱动程序提供额外的库?

4

2 回答 2

1

使用 hadoop 通用选项应该足够简单 - 我假设您已经${HADOOP_HOME}/conf为集群配置了内容(即 core-site.xml 和 mapred-site.xml)

exec ${HADOOP_HOME}/bin/hadoop com.cloudera.sqoop.Sqoop \
    -libjars myjar1.jar,myjar2,jar "$@"

在这里,您通过-libjars选项传递要放置在类路径中的 jar。

如果您有多个要定位的集群,那么您只需为每个集群创建不同的 conf 文件夹并HADOOP_CONF_DIR在调用 hadoop 脚本之前设置环境变量,或者您可以使用-Dkey=value通用参数来适当地设置fs.default.namemapred.job.tracker

exec ${HADOOP_HOME}/bin/hadoop com.cloudera.sqoop.Sqoop \
    -libjars myjar1.jar,myjar2,jar \
    -Dfs.default.name=hdfs://namenode-servername:9000 \
    -Dmapred.job.jobtracker=jobtracker-servername:9001 \
    "$@"
于 2013-02-27T01:05:54.373 回答
0

我的问题实际上是运行 Sqoop。所以我通过简单地提供 -fs 和 -jt 参数作为 Sqoop 命令的第一个参数来解决它(例如 sqoop-import)

sqoop-import \
    -fs $HADOOP_FILESYSTEM -jt $HADOOP_JOB_TRACKER  \
    --connect $DB_CONNECTION_STRING --username $DB_USER -P \
    --outdir /home/user/sqoop/generated_code \
    "$@" # <- other parameters
于 2013-02-27T04:40:18.667 回答