CDH6.0.1集成tez-0.9.1計算引擎

參考文章:html

https://www.jianshu.com/p/9fb9f32e1f0fjava

https://www.baidu.com/link?url=OgpwasnZi7H1dySN2T111sseEWDBaCCTC3DFV61G7756YbrkJCA8Y3UFaueyqnfN&wd=&eqid=daeb8b3500049cf3000000065d82fcbclinux

http://tez.apache.org/releases/apache-tez-0-9-1.htmlgit

準備工做:github

hadoop版本:3.0.0-cdh6.0.1apache

hive版本:hive-2.1.1windows

linux環境:api

jdk1.8frontend

maven-3.6maven

protobuf-2.5.0.tar.gz // https://github.com/protocolbuffers/protobuf/releases

tez-0.9.1源碼 //http://www.apache.org/dyn/closer.lua/tez/0.9.1/

windows環境:

jdk1.8

maven-3.3.9

protoc-2.5.0-win32.zip // https://github.com/protocolbuffers/protobuf/releases

tez-0.9.1源碼 //http://www.apache.org/dyn/closer.lua/tez/0.9.1/

 

 

1.首先安裝jdk :version》=1.8

2.安裝maven:解壓即用,配置環境變量

linux:

解壓到/usr/local/maven

export MVN_HOME=/usr/local/maven

export PATH=$MVN_HOME/bin:$PATH

windows:

系統環境變量:

M2_HOME=D:\tool\maven3

MAVEN_HOME=D:\tool\maven3

PATH路徑:

%M2_HOME%\bin

檢查安裝:

mvn -v

3.protobuf安裝:

linux:

解壓:

tar -zxvf protobuf-2.5.0.tar.gz

cd protobuf-2.5.0

./configure

make

make install

protoc --version #驗證是否安裝成功

備註:當configure校驗不經過的時候,缺乏哪些包就安裝,通常須要安裝gcc

windows:

直接解壓protoc-2.5.0-win32.zip,獲得一個exe文件,直接設置該文件的環境變量便可

PATH:

D:\tool\protoc-2.5.0-win32

protoc --version #驗證是否安裝成功

4.tez解壓以及文件修改

linux:

tar -zxvf apache-tez-0.9.1-src.tar.gz

修改pom文件:

直接拖到windows修改比較快,本次tez編譯選擇的是經過windows編譯,由於有些包下載很慢,就經過windows開啓svn代理,編譯較快。

但仍是有些包下載失敗,主要是clouder的相關包,只好經過直接訪問該網站,下載對應的jar包,而後放入maven倉庫便可。如下包經過網站直接下載的

 

修改成咱們cdh所用版本:3.0.0-cdh6.0.1

添加Cloudera的Maven倉庫地址【由於Hadoop環境版本爲CDH版本】

註釋掉tez-ext-service-tests、tez-ui這兩個模塊,國外網下載慢

修改後的pom.xml

<properties>
    <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
    <clover.license>${user.home}/clover.license</clover.license>
    <hadoop.version>3.0.0-cdh6.0.1</hadoop.version>
    <jetty.version>6.1.26</jetty.version>
    <netty.version>3.6.2.Final</netty.version>
    <pig.version>0.13.0</pig.version>
    <javac.version>1.8</javac.version>
    <slf4j.version>1.7.10</slf4j.version>
    <enforced.java.version>[${javac.version},)</enforced.java.version>
    <distMgmtSnapshotsId>apache.snapshots.https</distMgmtSnapshotsId>
    <distMgmtSnapshotsName>Apache Development Snapshot Repository</distMgmtSnapshotsName>
    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
    <distMgmtStagingId>apache.staging.https</distMgmtStagingId>
    <distMgmtStagingName>Apache Release Distribution Repository</distMgmtStagingName>
    <distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
    <failIfNoTests>false</failIfNoTests>
    <protobuf.version>2.5.0</protobuf.version>
    <protoc.path>${env.PROTOC_PATH}</protoc.path>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <scm.url>scm:git:https://git-wip-us.apache.org/repos/asf/tez.git</scm.url>
    <build.time>${maven.build.timestamp}</build.time>
    <frontend-maven-plugin.version>1.4</frontend-maven-plugin.version>
    <findbugs-maven-plugin.version>3.0.1</findbugs-maven-plugin.version>
    <javadoc-maven-plugin.version>2.10.4</javadoc-maven-plugin.version>
    <shade-maven-plugin.version>2.4.3</shade-maven-plugin.version>
  </properties>
  <scm>
    <connection>${scm.url}</connection>
  </scm>

  <distributionManagement>
    <repository>
      <id>${distMgmtStagingId}</id>
      <name>${distMgmtStagingName}</name>
      <url>${distMgmtStagingUrl}</url>
    </repository>
    <snapshotRepository>
      <id>${distMgmtSnapshotsId}</id>
      <name>${distMgmtSnapshotsName}</name>
      <url>${distMgmtSnapshotsUrl}</url>
    </snapshotRepository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>${distMgmtSnapshotsId}</id>
      <name>${distMgmtSnapshotsName}</name>
      <url>${distMgmtSnapshotsUrl}</url>
    </repository>
	<repository>
            <id>nexus</id>
            <name>Team Nexus Repository</name>
            <url>http://192.168.0.203:8081/repository/maven-public/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
	<repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
            <name>Cloudera Repositories</name>
            <snapshots>
              <enabled>false</enabled>
            </snapshots>
          </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>maven2-repository.atlassian</id>
      <name>Atlassian Maven Repository</name>
      <url>https://maven.atlassian.com/repository/public</url>
      <layout>default</layout>
    </pluginRepository>
    <pluginRepository>
      <id>${distMgmtSnapshotsId}</id>
      <name>${distMgmtSnapshotsName}</name>
      <url>${distMgmtSnapshotsUrl}</url>
      <layout>default</layout>
    </pluginRepository>
	<pluginRepository>
            <id>cloudera</id>
            <name>Cloudera Repositories</name>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
          </pluginRepository>
  </pluginRepositories>

參考的博客說要修改tez-mapreduce模塊下的源碼文件,但修改後報錯,因此此次編譯不須要修改代碼便可。

5.maven編譯

mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true

發現編譯太慢,覺得是下載包太緩慢了,可是後面經過在windows上打開源碼編譯時,才發現,實際上是項目中不少的tests文件報錯,致使編譯不經過,同時編譯執行的testwe年耗費很長時間。

maven指令應該修改成

mvn clean package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true

這樣纔會跳過test編譯,很快就編譯完成!

編譯後的文件在tez-dist/target下面

6.部署到HDFS

建立文件:

hdfs dfs -mkdir /user/tez

將tez-0.9.1.tar.gz上傳至hdfs

hdfs dfs -put tez-0.9.1.tar.gz /user/tez/

文件權限(可不修改)

hdfs dfs -chmod -R 777 /user/tez/

7.建立tez-site.xml,配置客戶端

在CDH的lib目錄下建立tez:

通常CDH6的安裝目錄都在該地方

cd /opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/

mkdir tez

cd tez

mkdir conf

vi tez-site.xml

<configuration>

<property>

<name>tez.lib.uris</name>

<value>${fs.defaultFS}/user/tez/tez-0.9.1.tar.gz</value>

</property>

<property>

<name>tez.use.cluster.hadoop-libs</name>

<value>false</value>

</property>

</configuration>

將tez-0.9.1-minimal文件夾下的jar及lib下的jar拷貝到tez中

從 /opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/jars中拷貝kryo-2.22.jar到tez文件夾下的lib文件夾下,防止出現如下異常:

java.lang.ClassNotFoundException: com.esotericsoftware.kryo.Serializer

tez/lib中包含slf4j的jar包,會打印較多日誌,能夠在客戶端中去掉slf4j-api-1.7.10.jar、slf4j-log4j12-1.7.10.jar這兩個jar包,減小日誌打印,

到這裏就客戶端的基本配置結束。

將 tez這個文件就 copy的集羣中的其餘主機的cloudera目錄下

scp /opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez root@drgs2:/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/

8.配置hive環境變量

在cdh找到hive客戶端配置

內容以下:

HADOOP_CLASSPATH=/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez/conf:/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez/*:/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez/lib/*

 

而後保存並部署客戶端配置,這樣配置的環境變量纔會生效。

重啓完成後,tez安裝完成。

9。測試

hive //進入hive cli

hive> set hive.tez.container.size=3020;

hive> set hive.execution.engine=tez;

hive> use db_cd_yb;

hive>select count(1) from ks05_modify;

 

備註:

1.若是maven使用nexus私服下載的話,還須要在nexus中添加CDH的遠程倉庫地址,否則會報找不jar包。

2.若是報跑tez任務的是報classnotfound,能夠試着在hadoop-env.sh的最後添加tez的位置。

vi /etc/hadoop/conf/hadoop-env.sh

TEZ_CONF_DIR=/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez/conf/tez-site.xml

TEZ_JARS=/opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/tez

export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_JARS}/*:${TEZ_JARS}/lib/*

3.若是還報kyro錯誤,則可將hive/auxlib下的兩個jar包刪除,最好採用備份:

cd /opt/cloudera/parcels/CDH-6.0.1-1.cdh6.0.1.p0.590678/lib/hive/auxlib

mv hive-exec-2.1.1-cdh6.0.1-core.jar hive-exec-2.1.1-cdh6.0.1-core.jar.bak

mv hive-exec-core.jar hive-exec-core.jar.bak

全部操做都須要在集羣各臺主機執行。

4.修改成默認tez引擎:

全局執行引擎替換,將CDH集羣中Hive的site.xml文件中參數添加參數

參數添加

指定tez的container內存

全局參數

tez-container-memory

須要啓集羣,纔會去修改hive的配置文件。 /etc/hive/conf/hive-site.xml

相關文章
相關標籤/搜索