cdh版本升級(5.14 -> 6.2)

我們的Cloudera Manager和cdh版本是5.14,現在公司需要升級到cdh6.2
需要先升級Cloudera Manager,然後升級cdh。

1.Cloudera Manager升級

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

1.1備份

1.1.1備份Cloudera Manager Agent

###查看數據庫信息

$ 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
在每檯安裝了Cloudera Manager agent 的機器都執行以下的備份操作:

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 Agent directory and the runtime state.

$ 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.

$ 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 的機器上執行:

$ 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

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源文件

[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
增加
export JAVA_HOME="/usr/java/jdk1.8.0_141-cloudera"

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 

    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文件:

$ 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 

等到所以機器都完成了之後,每個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.準備工作

運行以下命令檢查集羣情況
如果有問題則修復
檢查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的數據存儲目錄,如

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

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

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

$ cp -rp /dfs/jn /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.cloudera.HDFS_service_name/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_service_name/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,點擊 已選定的操作 -> 重新授權。

重要說明:不要啓動選中所有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.“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目錄下

2.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
    即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章