2012-07-16 4 views
1

HBase importTSV hadoop 작업을 실행하여 TSV 파일에서 HBase로 데이터를로드하려고합니다. 다음 코드를 사용하고 있습니다.원격으로 Hbase ImportTSV 작업 실행

Configuration config = new Configuration(); 
    Iterator iter = config.iterator(); 
    while(iter.hasNext()) 
    { 
     Object obj = iter.next(); 
     System.out.println(obj); 
    } 

    Job job = new Job(config); 
    job.setJarByClass(ImportTsv.class); 
    job.setJobName("ImportTsv"); 
    job.getConfiguration().set("user", "hadoop"); 
    job.waitForCompletion(true); 

이 오류를

오류 security.UserGroupInformation 무엇입니까 : PriviledgedActionException 등 : E317376 원인 : org.apache.hadoop.security.AccessControlException : org.apache.hadoop.security.AccessControlException : 권한이 거부 : user = E317376, access = 쓰기, inode = "스테이징": hadoop : supergroup : rwxr-xr-x

어떻게 사용자 이름 E317376이 설정되는지 알지 못합니다. 이것은 원격 클러스터에서이 작업을 실행하려고하는 내 Windows 컴퓨터 사용자입니다. 리눅스 머신의 나의 haddop 사용자 계정은 hadoop 사용자 계정하에 Hadoop 클러스터의 일부인 리눅스 머신에서 실행할 때 "hadoop"

입니다. 모든 것이 잘 작동합니다. 하지만 자바 웹 애플리케이션에서이 작업을 프로그램 적으로 실행하고 싶습니다. 나는 잘못된 일을하고있다. 도와주세요 ...

답변

0

나는이 솔루션을 테스트를 havent,하지만 작업 구성이 뭔가를 추가하려고

conf.set("hadoop.job.ugi", "hadoop"); 

당신은 또한 하둡 로 설정 사용자와 다음 시도 할 수 있도록 위의 abolete 될 수있다 (http://hadoop.apache.org/common/docs/r1.0.3/Secure_Impersonation.html의 코드) : 당신이 당신의 mapred-site.xml 파일에 우는 소리 같은 속성을 가지고 있어야

UserGroupInformation ugi = 
        UserGroupInformation.createProxyUser(user, UserGroupInformation.getLoginUser()); 
      ugi.doAs(new PrivilegedExceptionAction<Void>() { 
       public Void run() throws Exception { 
       //Submit a job 
       JobClient jc = new JobClient(conf); 
       jc.submitJob(conf); 
       //OR access hdfs 
       FileSystem fs = FileSystem.get(conf); 
       fs.mkdir(someFilePath); 
       } 
      } 
+0

지금이 오류가 발생합니다. hadoop 설정 파일에서 무엇인가를 변경해야합니까? 고마워요 ERROR security.UserGroupInformation : PriviledgedActionException as : hadoop via E317376 원인 : org.apache.hadoop.ipc.RemoteException : 사용자 : E317376 hasoop을 가장 할 수 없습니다 – user131476

2

<property> 
<name>mapreduce.jobtracker.staging.root.dir</name> 
<value>/user</value> 
<property> 

어쩌면 777

/정지가 당신의 jobtrackers 및 tasktrackers (쉬 stop-mapred.sh을 시작하는 것을 잊지 마세요 및 SH 시작-mapred

에 DFS 파일 시스템의/사용자 폴더를 chmod를하는 것이 필요하다 .sh)

+0

이것을 알려 주셔서 감사합니다! 내가 한 일은 기본 스테이징 디렉토리의 권한을 777로 변경하는 것이었다. 나의 경우, HADOOP_USER_NAME = <...> with hodfs : //.../tmp/hadoop-hadoop/mapred/staging hadoop fs -chmod 777/tmp/hadoop -hadoop/mapred/staging' –

관련 문제