복붙노트

[HADOOP] 필수 입력란 'client_protocol'이 설정되지 않았습니다.

HADOOP

필수 입력란 'client_protocol'이 설정되지 않았습니다.

하이브 0.12 사용하고 아파치에서 JDBC를 노력하고있어. 코드를 실행하려고하면 apache.thrift.TApplicationException이 발생합니다.

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveJdbcClient {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";

/**
 * @param args
 * @throws SQLException
 */
public static void main(String[] args) throws SQLException {
    try {
        Class.forName(driverName);
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.exit(1);
    }
    //replace "hive" here with the name of the user the queries should run as
    Connection con =      DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
    Statement stmt = con.createStatement();
    String tableName = "testHiveDriverTable";
    stmt.execute("drop table if exists " + tableName);
    stmt.execute("create table " + tableName + " (key int, value string)");
    // show tables
    String sql = "show tables '" + tableName + "'";
    System.out.println("Running: " + sql);
    ResultSet res = stmt.executeQuery(sql);
    if (res.next()) {
        System.out.println(res.getString(1));
    }
    // describe table
    sql = "describe " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
        System.out.println(res.getString(1) + "\t" + res.getString(2));
    }

    // load data into table
    // NOTE: filepath has to be local to the hive server
    // NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
    String filepath = "/tmp/a.txt";
    sql = "load data local inpath '" + filepath + "' into table " + tableName;
    System.out.println("Running: " + sql);
    stmt.execute(sql);

    // select * query
    sql = "select * from " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
        System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
    }

    // regular hive query
    sql = "select count(1) from " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
        System.out.println(res.getString(1));
    }
}

}

필요한 모든 항아리를 가져 왔고 코드를 실행하려고하면 다음 오류가 발생합니다.

 org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset!   Struct:TOpenSessionReq(client_protocol:null)

이 문제를 어떻게 해결할 수 있습니까?

해결법

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

    1.이는 클라이언트와 서버 사이의 버전이 일치하지 않음을 나타냅니다. 즉, 클라이언트가 서버보다 최신 인 경우입니다.

    이는 클라이언트와 서버 사이의 버전이 일치하지 않음을 나타냅니다. 즉, 클라이언트가 서버보다 최신 인 경우입니다.

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

    2.같은 문제가 있습니다. 설정하면 작동합니다.

    같은 문제가 있습니다. 설정하면 작동합니다.

    JDBC Maven Repo 버전을 1.1.0으로 하이브하십시오.

    이 jira를 확인하십시오. 최신 하이브 - jdbc 버전은 HIve 0.13에서 지원되지 않습니다. https://issues.apache.org/jira/browse/HIVE-6050

    이걸 너의 감자에 넣어 라.

    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>1.1.0</version>
      <classifier>standalone</classifier>
    </dependency>
    
  3. ==============================

    3.나도 같은 문제에 직면했고 다음 단계를 수행하여 해결책을 찾아 간다.

    나도 같은 문제에 직면했고 다음 단계를 수행하여 해결책을 찾아 간다.

    01 단계 : - 아래 링크를 사용하여 Eclipse에 대한 하이브 라이브러리 (IDE가 될 수도 있음)를 포함시킵니다.

    Http : //morris.supertex.net/appachihehbee/hibe-1.0.1/ (Apache-hiebe-1.0.1-bn.)

    2 단계 : hadoop-core-1.1.0 병을 추가합니다.

    이 오류는 hadoop 독립 실행 형 및 hadoop 코어와의 버전 불일치로 인해 모두가 언급했습니다.

  4. from https://stackoverflow.com/questions/24694415/required-field-client-protocol-is-unset by cc-by-sa and MIT license