2015-01-25 2 views
1

python 프로그램 내에서 hydfs 파일 시스템에 연결하기 위해 Pydoop을 사용하고 있습니다. 이 python 프로그램은 hdfs에서 파일을 읽고 쓰려고합니다. 실행하려고하면 오류가 발생합니다.python pydoop 프로그램에서 HADOOP_CONF_DIR 오류를 찾을 수 없습니다.

명령은 실행하는 데 사용 : 명령 :

hadoop jar /usr/share/bigdata/hadoop-1.2.0/contrib/streaming/hadoop-streaming-1.2.0.jar -file ./Methratio.py -mapper './Methratio.py -d /user/hadoop/gnome.fa -r -g -o hdfs://ai-ole6-main.ole6.com:54311/user/hadoop/bsmapout.txt hdfs://ai-ole6-main.ole6.com:54311/user/hadoop/Example.bam ' -input sampleinput.txt -output outfile 

오류 :

역 추적 (마지막으로 가장 최근 통화) :

File "/tmp/hadoop-hadoop/mapred/local/taskTracker/hadoop/jobcache/job_201501251859_0001/attempt_201501251859_0001_m_000000_1/work/./Methratio.py", line 2, in <module> 
    import sys, time, os, array, optparse,pydoop.hdfs as hdfs 
    File "/usr/local/lib/python2.7/site-packages/pydoop-1.0.0_rc1-py2.7.egg/pydoop/hdfs/__init__.py", line 98, in <module> 
    init() 
    File "/usr/local/lib/python2.7/site-packages/pydoop-1.0.0_rc1-py2.7.egg/pydoop/hdfs/__init__.py", line 92, in init 
    pydoop.hadoop_classpath(), _ORIG_CLASSPATH, pydoop.hadoop_conf() 
    File "/usr/local/lib/python2.7/site-packages/pydoop-1.0.0_rc1-py2.7.egg/pydoop/__init__.py", line 103, in hadoop_classpath 
    return _PATH_FINDER.hadoop_classpath(hadoop_home) 
    File "/usr/local/lib/python2.7/site-packages/pydoop-1.0.0_rc1-py2.7.egg/pydoop/hadoop_utils.py", line 551, in hadoop_classpath 
    jars.extend([self.hadoop_native(), self.hadoop_conf()]) 
    File "/usr/local/lib/python2.7/site-packages/pydoop-1.0.0_rc1-py2.7.egg/pydoop/hadoop_utils.py", line 493, in hadoop_conf 
    PathFinder.__error("hadoop conf dir", "HADOOP_CONF_DIR") 
    File "/usr/local/lib/python2.7/site-packages/pydoop-1.0.0_rc1-py2.7.egg/pydoop/hadoop_utils.py", line 385, in __error 
    raise ValueError("%s not found, try setting %s" % (what, env_var)) 
ValueError: hadoop conf dir not found, try setting HADOOP_CONF_DIR 
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 
    at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:362) 
    at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:576) 
    at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:135) 
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57) 
    at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:430) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:366) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190) 
    at org.apache.hadoop.mapred.Child.main(Child.java:249) 

코드 :

with hdfs.open(options.reffile) as hdfsfile: 
    for line in hdfsfile.open(options.reffile): 
     if line[0] == '>': 
     #some processing 

답변

3

HADOOP_CONF_DIR 환경 변수는 core-site.xml, mapred-site.xml, hdfs-site.xml 등과 같은 파일을 포함하는 폴더의 경로와 같은 적절한 위치로 설정되어야합니다. 일반적으로 이러한 파일은 hadoop/etc/ 폴더.
내 경우에는 tarball에서 Hadoop 2.6을 설치하고 추출 된 폴더를/usr/local에 두었습니다.
나는 에 다음 줄을 추가 ~/.bashrc에
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
그런 다음 명령을 터미널에서 source ~/.bashrc을 제공합니다.