복붙노트

[HADOOP] JDBC API를 사용하여 하이브 종료 상태 또는 오류 코드를 캡처하는 방법

HADOOP

JDBC API를 사용하여 하이브 종료 상태 또는 오류 코드를 캡처하는 방법

JDBC API를 사용하여 하이브에서 삽입 쿼리를 실행합니다. 그러나 쿼리가 실행되고 있지 않습니다. 누군가가 잘못 될 것을 제안 할 수 있습니까? 또한 쿼리를 실행하는 동안 하이브가 던진 오류 코드를 캡처하는 방법을 알려주십시오. 하이브 버전 0.13.0

명령 줄에서 로그에 생성 된 쿼리를 실행하면 정상적으로 작동합니다.

public static void onSuccess() {
        // Write to log on Success
        LOGGER.info("Job Succeeded, Updating the " + hiveDB + "." + logTable + " with status SUCCESS");
        String insertOnSuccess = "insert into table " + hiveDB + "." + logTable + " select " + currentJobID + "," + "'"
                + startTime + "'" + "," + "'" + stopTime + "'" + "," + runTime + "," + "\'SUCCESS\' from " + hiveDB
                + "." + "dual" + " limit 1; ";
        commonDB.InsertToTable(insertOnSuccess);
        JobMailer.PostMail("IB Load Successfully completed", "Load completed");

    }


public void InsertToTable(String insertquery) {
        try {

            stm = hiveConn.createStatement();
            stm.executeUpdate(insertquery);
        } catch (SQLException e) {
            LOGGER.error("Running the insert query for :" + insertquery);
        } catch (Exception e) {
            LOGGER.error(e.getMessage());
        } finally {
            if (stm != null) {
                try {
                    stm.close();
                } catch (SQLException e) {
                    LOGGER.error(e.getMessage());
                    ;
                }
            }
        }
    }

다음은 내 오류 로그입니다.

해결법

  1. ==============================

    1.하이브 인서트 / 업데이트 / 삭제 기능에 여전히 몇 가지 문제가 있다고 생각합니다. 1.2.1 하이브입니다. 그러나 당신은 하이브 0.14에서 아직도있는 것처럼 보입니다. 따라서 아직 이러한 기능을 사용하지 않는 것이 좋습니다. 다른 사용자에게 유사한 문제가 발생했는지 확인하십시오.

    하이브 인서트 / 업데이트 / 삭제 기능에 여전히 몇 가지 문제가 있다고 생각합니다. 1.2.1 하이브입니다. 그러나 당신은 하이브 0.14에서 아직도있는 것처럼 보입니다. 따라서 아직 이러한 기능을 사용하지 않는 것이 좋습니다. 다른 사용자에게 유사한 문제가 발생했는지 확인하십시오.

    삭제 명령시 하이브 1.2.1 오류

  2. ==============================

    2.당신이 Hive 0.13과 함께 붙어있어서 너무 나쁘다. 왜냐하면 ...

    당신이 Hive 0.13과 함께 붙어있어서 너무 나쁘다. 왜냐하면 ...

    일단 로그 디스패치가 서버 측에서 활성화되면 Java 코드에서 이러한 로그 항목을 검색 할 수 있습니다. 비동기식으로 또는 실행이 끝나면 대량으로 처리 할 수 ​​있습니다.

      private static void DumpHiveMessages (java.sql.Statement stmtGeneric)
      { org.apache.hive.jdbc.HiveStatement stmtExtended ;
        try
        { stmtExtended =(org.apache.hive.jdbc.HiveStatement)stmtGeneric ;
          for (String sLogMessage : stmtExtended.getQueryLog())
          { JustTraceIt("HIVE SAYS>" +sLogMessage) ;    } 
          if (stmtExtended.hasMoreLogs())
          { JustTraceIt("WARNING>(...log stream still open...") ; }
        }
        catch (Exception duh)
        { JustTraceIt("WARNING>Error while accessing Hive log stream");
          JustTraceIt("WARNING>" +MakeSenseOfDirtyHadoopException(duh)) ;
        }
      }
    

    그 내용은 실제로 문서화되어 있지는 않지만, getQueryLog 및 hasMoreLogs와 같은 몇 가지 비 JDBC 표준 메소드를 보여주는 HiveStatement의 소스 코드가 있습니다. Hive 2+ 용 YarnATSGuid 및 Hive 3+ 용 기타 자료도 있습니다. 다음은 GitHub의 "master"브랜치에 대한 링크입니다. 사용중인 버전으로 전환하십시오 (아마도 Spark과의 호환을 위해 이전 1.2 버전으로 전환 할 수 있습니다).

  3. from https://stackoverflow.com/questions/35356788/how-to-capture-a-hive-exit-status-or-error-code-using-jdbc-api by cc-by-sa and MIT license