복붙노트

[HADOOP] 외부 hadoop 클러스터 인 Spark에서 H / A namenodes로 구성된 URI로 hdfs에 액세스하는 방법?

HADOOP

외부 hadoop 클러스터 인 Spark에서 H / A namenodes로 구성된 URI로 hdfs에 액세스하는 방법?

이제 출력을 HDFS에 저장하는 Spark 응용 프로그램이 있습니다.

우리의 hadoop 클러스터는 namenode H / A로 구성되어 있고 스파크 클러스터는 hadoop 클러스터 외부에 있습니다. (나는 그것이 나쁜 것임을 알고 있습니다.) HDFS에 액세스 할 수 있도록 어플리케이션에 HDFS URI를 지정해야합니다.

그러나 이름 서비스를 인식하지 못하기 때문에 namenode의 URI 중 하나만 제공 할 수 있으며, 실패하면 구성 파일을 수정하고 다시 시도하십시오.

Zookeeper에 액티비티를 공개하는 것은 매우 짜증나는 것처럼 보이므로 피하고 싶습니다.

어떤 대안을 제안 해 주시겠습니까?

해결법

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

    1.네임 서비스가 'hadooptest'라고 가정하고, 다음과 같이 hadoop 구성을 설정하십시오. 원격 HA가 활성화 된 HDFS의 hdfs-site.xml 파일에서이 정보를 얻을 수 있습니다.

    네임 서비스가 'hadooptest'라고 가정하고, 다음과 같이 hadoop 구성을 설정하십시오. 원격 HA가 활성화 된 HDFS의 hdfs-site.xml 파일에서이 정보를 얻을 수 있습니다.

    sc.hadoopConfiguration.set("dfs.nameservices", "hadooptest")
    sc.hadoopConfiguration.set("dfs.client.failover.proxy.provider.hadooptest", "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider")
    sc.hadoopConfiguration.set("dfs.ha.namenodes.hadooptest", "nn1,nn2")
    sc.hadoopConfiguration.set("dfs.namenode.rpc-address.hadooptest.nn1", "10.10.14.81:8020")
    sc.hadoopConfiguration.set("dfs.namenode.rpc-address.hadooptest.nn2", "10.10.14.82:8020")
    

    그 후에 아래와 같이 'hadooptest'와 함께 URL을 사용할 수 있습니다.

    test.write.orc("hdfs://hadooptest/tmp/test/r1")
    

    자세한 내용은 여기를 확인하십시오.

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

    2.e.

    e.

    echo "HADOOP_CONF_DIR=\"/opt/hadoop/etc/hadoop\"" > spark-env.sh
    
  3. ==============================

    3.비슷한 유형의 문제를 발견했습니다. 필자의 경우, HA가 활성화 된 환경의 호스트 목록을 가지고 있었지만 "활성"노드 위에는 정보가 없습니다.

    비슷한 유형의 문제를 발견했습니다. 필자의 경우, HA가 활성화 된 환경의 호스트 목록을 가지고 있었지만 "활성"노드 위에는 정보가 없습니다.

    이 문제를 해결하기 위해 각 노드의 상태를 얻기 위해 webhdfs 호출을 사용했습니다. 이것은 내 코드에서 사용한 webhdfs 호출입니다.

    curl 'http : // [hdfsHost] : 50070 / jmx? qry = Hadoop : service = NameNode, name = NameNodeStatus'

    다른 HDFS 호스트로 위의 호출을합니다. json 출력에서 ​​각 노드의 "상태"를 반환합니다.

     { 
      "..." : [ {
        "name" : "Hadoop:service=NameNode,name=NameNodeStatus",
         "modelerType" : "org.apache.hadoop.hdfs.server.namenode.NameNode",
         "State" : "active",
        .......
      } ]
    }
    

    노드가 대기중인 경우 "상태"가 표시됩니다 : "대기"

    JSON을 얻으면 json을 구문 분석하고 상태 값을 얻을 수 있습니다.

  4. from https://stackoverflow.com/questions/30796957/how-to-access-hdfs-by-uri-consisting-of-h-a-namenodes-in-spark-which-is-outer-ha by cc-by-sa and MIT license