cdh版本升級(5.14 -> 6.2)

咱們的Cloudera Manager和cdh版本是5.14,如今公司須要升級到cdh6.2
須要先升級Cloudera Manager,而後升級cdh。html

1.Cloudera Manager升級

(參考
https://www.cloudera.com/documentation/enterprise/upgrade/topics/ug_cm_upgrade.html)
升級以前先肯定linux的版本已經升級到Cloudera Manager6.2支持的版本java

1.1備份

1.1.1備份Cloudera Manager Agent

###查看數據庫信息node

$ sudo cat /etc/cloudera-scm-server/db.properties

獲得相似以下信息:python

...
com.cloudera.cmf.db.type=...
com.cloudera.cmf.db.host=database_hostname:database_port
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.password=SOME_PASSWORD
在每檯安裝了Cloudera Manager agent 的機器都執行如下的備份操做:

Create a top level backup directory.mysql

$ export CM_BACKUP_DIR="`date +%F`-CM5.14"
$ echo $CM_BACKUP_DIR
$ mkdir -p $CM_BACKUP_DIR

Back up the Agent directory and the runtime state.linux

$ sudo -E tar -cf $CM_BACKUP_DIR/cloudera-scm-agent.tar --exclude=*.sock /etc/cloudera-scm-agent /etc/default/cloudera-scm-agent /var/run/cloudera-scm-agent /var/lib/cloudera-scm-agent

Back up the existing repository directory.sql

$ sudo -E tar -cf $CM_BACKUP_DIR/repository.tar /etc/yum.repos.d

1.1.2備份Cloudera Manager Service

在安裝了Service Monitor 的機器上執行:數據庫

$ sudo cp -rp /var/lib/cloudera-service-monitor /var/lib/cloudera-service-monitor-`date +%F`-CM5.14

在安裝了Host Monitor 的機器上執行:apache

$ sudo cp -rp /var/lib/cloudera-host-monitor /var/lib/cloudera-host-monitor-`date +%F`-CM5.14

在安裝了Event Server的機器上執行:vim

$ sudo cp -rp /var/lib/cloudera-scm-eventserver /var/lib/cloudera-scm-eventserver-`date +%F`-CM5.14

1.1.3備份 Cloudera Manager Databases

$ mysqldump --databases database_name --host=database_hostname --port=database_port -u user_name -p > $HOME/database_name-backup-`date +%F`-CM5.14.sql

1.1.2備份 Cloudera Manager Server

Create a top-level backup directory.

$ export CM_BACKUP_DIR="`date +%F`-CM5.14"
$ echo $CM_BACKUP_DIR
$ mkdir -p $CM_BACKUP_DIR

$ Back up the Cloudera Manager Server directories:

$ sudo -E tar -cf $CM_BACKUP_DIR/cloudera-scm-server.tar /etc/cloudera-scm-server /etc/default/cloudera-scm-server

Back up the existing repository directory.

$ sudo -E tar -cf $CM_BACKUP_DIR/repository.tar /etc/yum.repos.d

1.2升級Cloudera Manager Server

1.2.1創建軟件的訪問權限(替換yum源)

登錄Cloudera Manager Server節點,刪除原有yum源

$ sudo rm /etc/yum.repos.d/cloudera*manager.repo*

建立新的yum源文件

$ sudo vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
# Packages for Cloudera Manager
name=Cloudera Manager
baseurl=https://archive.cloudera.com/cm6/6.2.0/redhat6/yum/
gpgkey=https://archive.cloudera.com/cm6/6.2.0/redhat6/yum/RPM-GPG-KEY-cloudera
gpgcheck=1

1.2.2安裝or配置java8

在server的配置文件中配置java_home:
在/etc/default/cloudera-scm-server
增長JAVA_HOME
export JAVA_HOME="/usr/java/jdk1.8.0_162"

1.2.3升級Cloudera Manager Server

1.登陸Cloudera Manager Server主機。
2.中止Cloudera管理服務。 (要點:此時不中止Cloudera Management Service可能會致使管理角色崩潰或Cloudera Manager Server可能沒法從新啓動。)
步驟:

  • a.Log in to the Cloudera Manager Admin Console.
  • b.Select Clusters > Cloudera Management Service.
  • c.Select Actions > Stop.
  • 3.中止Cloudera Manager Server.

    $ sudo service cloudera-scm-server stop

    4.中止Cloudera Manager Agent.

    $ sudo service cloudera-scm-agent stop

    5.升級Cloudera packages.

    $ sudo yum clean all
    $ sudo yum upgrade cloudera-manager-server cloudera-manager-daemons cloudera-manager-agent -y

    6.確認下包安裝好了

    $ rpm -qa 'cloudera-manager-*'

7.啓動Cloudera Manager Agent.

$ sudo service cloudera-scm-agent start

8.啓動Cloudera Manager Server.

$ sudo service cloudera-scm-server start

啓動過程當中若是有問題能夠參考日誌文件:

$ tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
$ tail -f /var/log/cloudera-scm-agent/cloudera-scm-agent.log
$ tail -f / var / log / messages

9.正常的話打開cdh升級頁面就能夠看到升級的狀況了
http://cloudera_Manager_server_hostname:7180/cmf/upgrade

1.2.4升級Cloudera Manager Agent

a.使用CDH界面升級
點擊 Cloudera Manager Agent軟件包
選項1:選擇agent存儲庫
咱們使用公共庫就能夠了
選擇 Public Cloudera Repository
2.安裝JDK
已經安裝了就不用選擇了
3.安裝agent
配置一下root或者sudo帳號就能夠了,須要能訪問全部agent節點的權限

選項2:使用命令升級
清除老的repo文件

$ sudo rm /etc/yum.repos.d/cloudera*manager.repo*

新建repo文件:

$ sudo vim /etc/yum.repos.d/cloudera-manager.repo

repo文件內容:

[cloudera-manager]
# Packages for Cloudera Manager
name=Cloudera Manager
baseurl=https://archive.cloudera.com/cm6/6.2.0/redhat6/yum/
gpgkey=https://archive.cloudera.com/cm6/6.2.0/redhat6/yum/RPM-GPG-KEY-cloudera
gpgcheck=1

中止Cloudera Manager agent服務

$ sudo service cloudera-scm-agent stop

升級Cloudera Manager agent

$ sudo yum clean all
$ sudo yum repolist
$ sudo yum upgrade cloudera-manager-daemons cloudera-manager-agent -y

等到因此機器都完成了以後,每一個agent節點執行

$ sudo service cloudera-scm-agent start

查看
http://192.168.0.254:7180/cmf/upgrade
顯示全部機器的agent都已經升級,且都有心跳
點擊 Host Inspector,檢測一下節點的狀況
完成以後點擊 顯示檢查器結果,查看有問題的項,修復。
顯示的問題中有個比較重要的:若是後續要運行CDH6,hue須要使用python2.7,先記着,暫時無論。

而後,啓動Cloudera Management Service

到此就完成了Cloudera Manager的升級,後面進行cdh的升級

若是升級失敗,須要還原,能夠參考官方的步驟:
https://www.cloudera.com/documentation/enterprise/upgrade/topics/ug_cm_downgrade.html

2.CDH升級

升級以前先肯定linux的版本已經升級到CDH6.2支持的版本,java版本爲1.8

2.1.準備工做

登陸到CDH管理頁面,啓動hdfs服務
而後運行如下命令檢查集羣狀況
若是有問題則修復
檢查hdfs:

$ sudo -u hdfs hdfs fsck / -includeSnapshots
$ sudo -u hdfs hdfs dfsadmin -report

檢查hbase表中的一致性:
$ sudo -u hdfs hbase hbck
若是使用了kudu,檢查kudu:

$ sudo -u kudu kudu cluster ksck <master_addresses>

如下服務在6.0.0中已經沒有了,升級以前,須要中止而且刪除這些服務
Accumulo
Sqoop 2
MapReduce 1
Spark 1.6
Record Service

2.2備份cdh

如下CDH組件不須要備份:
·MapReduce
·YARN
·Spark
·Pig
·Impala

升級CDH前完成如下備份的步驟
1.Back Up Databases
咱們使用mysql,因此以mysq爲例
1)若是還沒有中止,請中止服務。若是Cloudera Manager指示存在依賴服務,則還要中止依賴服務。

2)備份各個服務(Sqoop, Oozie, Hue,Hive Metastore ,Sentry)的數據庫。替換數據庫名稱,主機名,端口,用戶名和備份目錄路徑,而後運行如下命令:

$ mysqldump --databases database_name --host = database_hostname --port = database_port -u database_username -p> backup_directory_path / database_name -backup -`date +%F`-CDH 5.14 .sql

2.Back Up ZooKeeper
在每臺zookeeper節點,備份cdh中配置的zookeeper的數據存儲目錄,如

$ sudo cp -rp /var/lib/zookeeper/ /var/lib/zookeeper-backup-`date +%F`CM-CDH5.14

3.Back Up HDFS
(命令中的數據路徑根據cdh中實際配置更改)

a.備份journal數據,在每臺JournalNode上執行

$ sudo cp -rp /data/dfs/jn /data/dfs/jn-CM-CDH5.14

b.備份每臺namenode的運行時目錄,運行:

$ mkdir -p /etc/hadoop/conf.rollback.namenode
$ cd /var/run/cloudera-scm-agent/process/ && cd `ls -t1 | grep -e "-NAMENODE\$" | head -1`
$ cp -rp * /etc/hadoop/conf.rollback.namenode/
$ rm -rf /etc/hadoop/conf.rollback.namenode/log4j.properties
$ cp -rp /etc/hadoop/conf.rollback.namenode/log4j.properties /etc/hadoop/conf.rollback.namenode/

這些命令建立臨時回滾目錄。若是稍後須要回滾到CDH 5.x,則回滾過程要求您修改此目錄中的文件。

c.備份每臺datanode的運行時目錄

$ mkdir -p /etc/hadoop/conf.rollback.datanode/
$ cd /var/run/cloudera-scm-agent/process/ && cd `ls -t1 | grep -e "-DATANODE\$" | head -1`
$ cp -rp * /etc/hadoop/conf.rollback.datanode/
$ rm -rf /etc/hadoop/conf.rollback.datanode/log4j.properties
$ cp -rp /etc/hadoop/conf.cloudera.hdfs/log4j.properties /etc/hadoop/conf.rollback.datanode/

4.Back Up Key Trustee Server and Clients
服務沒有使用
5.Back Up HSM KMS
服務沒有使用
6.Back Up Navigator Encrypt
服務沒有使用
7.Back Up HBase
因爲回滾過程還會回退HDFS,所以HBase中的數據也會回滾。此外,存儲在ZooKeeper中的HBase元數據將做爲ZooKeeper回滾過程的一部分進行恢復。
8.Back Up Search
服務沒有使用
9.Back Up Sqoop 2
服務沒有使用
10.Back Up Hue
在運行Hue Server角色的全部主機上,備份app註冊表文件

$ mkdir -p /opt/cloudera/parcels_backup
$ cp -rp /opt/cloudera/parcels/CDH/lib/hue/app.reg /opt/cloudera/parcels_backup/app.reg-CM-CDH5.14

2.3服務更改:

hue:

對於centos6版本的系統:
須要在hue的節點安裝python2.7
Enable the Software Collections Library:

$ sudo yum install centos-release-scl

$ Install the Software Collections utilities:

$ sudo yum install scl-utils

$ Install Python 2.7:

$ sudo yum install python27

Verify that Python 2.7 is installed:

$ source /opt/rh/python27/enable
$ python --version

hbase:

1.HBase 2.0 不支持PREFIX_TREE數據塊編碼,升級前須要先刪除,不然hbase2.0沒法啓動
若是你已經安裝了CDH6.那麼經過運行如下工具來確保全部表或快照都不使用PREFIX_TREE數據塊編碼:

$ hbase pre-upgrade validate-dbe
$ hbase pre-upgrade validate-hfile

2.升級協處理器類
外部協處理器不會自動升級。有兩種方法能夠處理協處理器升級:
在繼續升級以前,請手動升級協處理器jar。
暫時取消協處理器的設置並繼續升級。
手動升級後,能夠重置它們。

嘗試在不升級協處理器jar的狀況下進行升級可能會致使不可預測的行爲,例如HBase角色啓動失敗,HBase角色崩潰,甚至數據損壞。

若是您已經安裝了CDH 6,則能夠經過運行來確保您的協處理器與升級兼容 hbase pre-upgrade validate-cp 工具。

2.4升級集羣

注意事項

當使用Cloudera Manager Backup and Disaster Recovery (BDR)將集羣從Cloudera Manager 5.13或更低版本升級到CDH 6.0或更高版本時,使用Cloudera Manager Backup and Disaster Recovery (BDR)備份數據將不起做用。
用於執行升級的次要版本的Cloudera Manager必須等於或大於CDH次要版本。要升級Cloudera Manager

注意:
使用滾動從新啓動(僅限次要升級)升級CDH時:
自動故障轉移不會影響滾動從新啓動操做。
升級完成後,若是當前正在運行MapReduce或Spark做業,請不要刪除舊的塊。這些做業仍使用舊的塊,必須從新啓動才能使用新升級的塊。
確保Oozie工做是冪等的。
不要使用Oozie Shell Actions來運行與Hadoop相關的命令。
不支持滾動升級Spark Streaming做業。升級完成後從新啓動流做業,以便開始使用新部署的版本。
必須將運行時庫打包爲Spark應用程序的一部分。
您必須使用分佈式緩存從客戶端網關計算機傳播做業配置文件。
不要構建包含第三方依賴項或CDH類的「超級」或「胖」JAR文件,由於這些文件可能與Yarn,Oozie和其餘服務自動添加到CLASSPATH的類衝突。
在不捆綁CDH JAR的狀況下構建Spark應用程序。

2.4.1備份cloudera manager

在cloudera manager升級以前咱們備份了一次,在升級以後還須要備份一次。

1.查看數據庫信息

$ cat /etc/cloudera-scm-server/db.properties

例如:

com.cloudera.cmf.db.type=...
com.cloudera.cmf.db.host=database_hostname:database_port
com.cloudera.cmf.db.name=scm
com.cloudera.cmf.db.user=scm
com.cloudera.cmf.db.password=SOME_PASSWORD

2.備份 Cloudera Manager Agent

在每臺agent節點上執行:

  • 建立備份目錄
    $ export CM_BACKUP_DIR="`date +%F`-CM5.14"
    $ echo $CM_BACKUP_DIR
    $ mkdir -p $CM_BACKUP_DIR
  • 備份agent目錄和運行時狀態

    $ sudo -E tar -cf $CM_BACKUP_DIR/cloudera-scm-agent.tar --exclude=*.sock /etc/cloudera-scm-agent /etc/default/cloudera-scm-agent /var/run/cloudera-scm-agent /var/lib/cloudera-scm-agent
  • 備份當前repo目錄
    $ sudo -E tar -cf $CM_BACKUP_DIR/repository.tar /etc/yum.repos.d
  • 備份Cloudera Management Service
    在Service Monitor節點執行

    $ sudo cp -rp /var/lib/cloudera-service-monitor /var/lib/cloudera-service-monitor-`date +%F`-CM5.14

    在Host Monitor節點上執行

    $ sudo cp -rp /var/lib/cloudera-host-monitor /var/lib/cloudera-host-monitor-`date +%F`-CM5.14

    在Event Server節點上執行

    $ sudo cp -rp /var/lib/cloudera-scm-eventserver /var/lib/cloudera-scm-eventserver-`date +%F`-CM5.14

    3.中止Cloudera Manager Server & Cloudera Management Service

    在CDH管理界面中中止Cloudera Management Service,選擇:
    Clusters->Cloudera Management Service.
    Actions > Stop.
    中止 Cloudera Manager Server:

    $ sudo service cloudera-scm-server stop

    4.備份Cloudera Manager數據庫

    $ mysqldump --databases database_name --host=database_hostname --port=database_port -u user_name -p > $HOME/database_name-backup-`date +%F`-CM5.14.sql

    數據庫信息爲剛纔第一步中查看文件中獲取的信息

    5.備份Cloudera Manager Server

    在Cloudera Manager Server節點執行:
    1.建立一個備份目錄:

    $ export CM_BACKUP_DIR="`date +%F`-CM5.14"
    $ echo $CM_BACKUP_DIR
    $ mkdir -p $CM_BACKUP_DIR

    2.備份 Cloudera Manager Server的目錄

    $ sudo -E tar -cf $CM_BACKUP_DIR/cloudera-scm-server.tar /etc/cloudera-scm-server /etc/default/cloudera-scm-server

    3.備份當前repo目錄
    4.

    $ sudo -E tar -cf $CM_BACKUP_DIR/repository.tar /etc/yum.repos.d

2.4.2進入維護模式

要在升級過程當中避免沒必要要的警報,請在開始升級以前在羣集上進入維護模式。 進入維護模式會中止發送電子郵件警報和SNMP陷阱,但不會中止檢查和配置驗證。完成升級後,請務必退出維護模式以從新啓用Cloudera Manager警報。

2.4.3完成升級前的遷移步驟

  • yarn
    Decommission and recommission the YARN NodeManagers but do not start the NodeManagers.
    A decommission is required so that the NodeManagers stop accepting new containers, kill any running containers, and then shutdown.(把YARN的NodeManagers給Decommission掉,再recommission,但不啓動NodeManagers,須要Decommission以便NodeManagers中止接受新容器,終止全部正在運行的容器,而後關閉。)

    操做步驟:

    1.確保在升級完成以前,不會將新應用程序(如MapReduce或Spark應用程序)提交到羣集。
    2.打開CDH管理界面,進入到要升級的YARN服務
    3.在 實例 選項卡上,選擇全部NodeManager角色。這能夠經過過濾角色類型下的角色來完成
    4.點擊 已選定的操做 -> 解除受權
    若是羣集運行CDH 5.9或更高版本並由Cloudera Manager 5.9或更高版本管理,而且您配置了正常解除受權,則會啓動超時倒計時。

平滑退役開始中止使用過程以前提供了一個超時。超時會建立一個時間窗口,以便從系統中消耗已經運行的工做負載,並容許它們運行完成。在YARN服務的Configuration選項卡上搜索Node Manager Graceful Decommission Timeout字段,並將該屬性設置爲大於0的值以建立超時。
5.等到解除受權完成。完成後,NodeManager的狀態爲 中止,受權狀態 爲 解除受權。
6.選中全部NodeManagers,點擊 已選定的操做 -> 從新受權。
(6這一步不作的話後面升級過程當中會報錯,並且很難找到緣由,會在yarn升級的過程當中報這樣的一個:
Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException): Requested replication factor of 0 is less than the required minimum of 1 for /user/yarn/mapreduce/mr-framework/3.0.0-cdh6.2.0-mr-framework.tar.gz)

重要說明:不要啓動選中全部NodeManager。

  • hive

查詢語法,DDL語法和Hive API都有變化。在升級以前,您可能須要在應用程序工做負載中編輯HiveQL代碼。

  • sentry
    若是羣集使用Sentry策略文件受權,則必須先將策略文件遷移到數據庫支持的Sentry服務,而後再升級到CDH 6。

  • spark
    若是羣集使用Spark或Spark Standalone,則必須執行幾個步驟才能確保安裝了正確的版本。
    刪除spark standalone
    升級後,若是安裝了spark2,則spark2-submit被替換爲spark-submit,須要在提交做業以前替換提交做業的命令

2.4.4運行Hue文檔清理

若是羣集使用Hue,請執行如下步驟(維護版本不須要)。這些步驟清理Hue使用的數據庫表,能夠幫助提升升級後的性能。
1.備份Hue數據庫。
2.鏈接到Hue數據庫。
3.檢查desktop_document,desktop_document2,oozie_job,beeswax_session,beeswax_savedquery和beeswax_queryhistory表的大小以得到參考點。若是其中任何行超過10萬行,請運行清理。

2.4.5下載和分發包裹

1.打開CDH管理界面,點擊 主機 -> Parcels -> 配置
2.使用如下遠程parcel存儲庫URL更新CDH的Parcel存儲庫:

https://archive.cloudera.com/cdh6/6.2.0/parcels/

a.在 遠程 Parcel 存儲庫 URL 部分中,單機 "+"圖標添加上面的url,單擊 保存更改
b.在表中找到包含新CDH parcel的行,而後單擊「 下載」按鈕。
c.下載包後,單擊「 分配」按鈕。
d.分發完全部包裹後,點擊 升級 按鈕。

2.4.6運行升級CDH嚮導

1.進入升級嚮導後,會運行一些集羣的check,check的結果可能會出現一些問題,會影響到後續的升級,先把這些問題解決。還會有備份數據庫的提示。若是都已經ok了,點擊 是,我已執行這些步驟,而後點擊 繼續。
2.點擊 完整羣集重啓 (羣集的所有停機時間),點擊 繼續。(這個步驟會重啓全部服務)

升級過程當中遇到了一些問題:

升級過程當中Oozie異常提示:
1.E0103: Could not load service classes, Cannot create PoolableConnectionFactory (Table 'oozie.validate_conn' doesn't exist)
解決方案:cdh版本升級(5.14 -> 6.2)
2.「java.lang.ClassNotFoundException:org.cloudera.log4j.redactor.RedactorAppender」找不到類。
參考這篇文章,把缺乏的logredactor-2.0.7.jar建一個軟鏈接從/opt/cloudera/parcels/CDH/lib/oozie/lib到/opt/cloudera/parcels/CDH/lib/oozie/libtools目錄下

3.ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
緣由是log4j.xml沒有配置致使異常信息沒法顯示,一樣考一份log4j.xml的模版放到/opt/cloudera/parcels/CDH/lib/oozie/libtools目錄下便可。

2.4.7升級完成以後的遷移

1.spark

  • 升級到CDH 6後,可能配置了多個Spark服務,每一個服務都有本身的一組配置,包括事件日誌位置。肯定要保留哪一個服務,而後手動合併這兩個服務。
  • 用於在CDH 5中提交Spark 2做業的命令(spark2-submit)在CDH 6中刪除,
    替換爲 spark-submit。在具備內置Spark 1.6服務和Spark 2服務的CDH 5集羣中,spark-submit 與Spark 1.6服務一塊兒使用,和spark2-submit與Spark 2服務一塊兒使用。升級到CDH 6後,spark-submit 使用CDH內置的Spark 2服務, spark2-submit再也不起做用。確保使用這些命令更新提交Spark做業的任何工做流。

  • 經過執行如下步驟手動合併Spark服務:
    1.將全部相關配置從要刪除的服務複製到您要保留的服務。要查看和編輯配置:
    a.在Cloudera Manager Admin Console中,轉到要刪除的Spark服務。
    b.單擊「 配置」選項卡。
    c.記錄配置。
    d.轉到您要保留的Spark服務並複製配置。
    e.單擊保存更改。
    要保留歷史事件日誌:
    肯定要刪除的服務的事件日誌的位置:
    在Cloudera Manager Admin Console中,轉到要刪除的Spark服務。
    單擊「 配置」選項卡。
    搜索:spark.eventLog.dir
    注意路徑。
    登陸到羣集主機並運行如下命令:
    hadoop fs -mv <old_Spark_Event_Log_dir> / * <new_location> /。
    使用Cloudera Manager,中止並刪除您選擇刪除的Spark服務
    從新啓動剩餘的Spark服務:單擊Spark服務旁邊的下拉箭頭,而後選擇「 從新啓動」。

    2.impala

    impala主要用於即時查詢,不用於線上任務,因此重要性沒有那麼高,參考官網
    https://www.cloudera.com/documentation/enterprise/upgrade/topics/impala_upgrading.html便可。

相關文章
相關標籤/搜索