执行Sqoop作业出现FileNotFoundException及本地依赖配置需求
解决Sqoop作业中FileNotFoundException(HDFS错误查找本地jar)的问题
这个问题我之前也碰到过,核心原因就是Sqoop误把本地lib路径当成了HDFS路径去查找依赖jar包,给你几个靠谱的解决方法:
方法1:运行Sqoop命令时指定本地jar路径(快速临时解决)
直接在你的Sqoop命令中添加--libjars参数,明确指向本地的postgresql驱动jar的绝对路径,这样Sqoop会优先加载这个本地文件,不会再去HDFS错误路径查找:
sqoop import --libjars /home/hduser/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/postgresql-9.2-1002-jdbc4.jar \ --connect jdbc:postgresql://your-db-host:5432/your-db-name \ --username your-username \ --password your-password \ --query 'SELECT * FROM your-table WHERE $CONDITIONS' \ --target-dir /your-hdfs-target-dir \ [其他你的Sqoop参数]
注意:把上述命令中的其他参数替换成你实际的作业配置
方法2:配置HADOOP_CLASSPATH环境变量(永久生效)
把本地的jdbc驱动jar路径添加到HADOOP_CLASSPATH中,这样Sqoop在运行时会自动从这个路径加载依赖,不需要每次命令都加参数:
临时生效(当前终端会话)
export HADOOP_CLASSPATH=/home/hduser/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/postgresql-9.2-1002-jdbc4.jar:$HADOOP_CLASSPATH
永久生效(所有会话)
编辑你的bash配置文件(比如~/.bashrc或~/.bash_profile),在文件末尾添加上述export命令,然后执行以下命令让配置生效:
source ~/.bashrc
方法3:修正Sqoop的lib目录配置
检查Sqoop的配置文件,确保sqoop.lib.dir指向本地的lib目录,而不是HDFS路径:
方式A:修改sqoop-env.sh
找到Sqoop安装目录下的conf/sqoop-env.sh文件(如果没有就复制sqoop-env-template.sh并重命名),添加以下配置:
export SQOOP_LIB_DIR=/home/hduser/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib
方式B:修改sqoop-site.xml
在Sqoop的conf/sqoop-site.xml中添加或修改以下配置项:
<property> <name>sqoop.lib.dir</name> <value>/home/hduser/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib</value> <description>Directory containing extra libraries for Sqoop.</description> </property>
配置完成后,重启相关的Hadoop/Sqoop服务(如果有运行的守护进程),让配置生效。
内容的提问来源于stack exchange,提问作者dark_shadow
相关产品推荐
相关产品推荐

