雲上大資料系列1:手把手教你何如在ECS上搭建Hadoop開發測試環境(CDH版)

子淑發表於2018-07-02

本篇是雲上大資料系列第一篇文章,主要介紹開發測試環境的搭建。在後續的文章中,我們還將會分享更多關於雲上大資料系統的效能分析和調優經驗,敬請期待。

大資料系統是典型的複雜分散式系統,搭建一套大資料系統不但需要大量的資源,還需要對大資料系統本省有一定的瞭解。雲端計算的普及使得大資料系統的快速部署,甚至一鍵部署成為可能。筆者在阿里雲上嘗試搭建了一套大資料系統,將部署的過程和大家分享一下。

  • 資源環境:ecs.d1.6xlarge × 5
  • 軟體系統:CDH 5.14.2
  • 作業系統:CentOS 7.3

以下教程基於Cloudera官方教程,結合筆者實際部署過程中遇到的問題編寫而成。讀者在實踐的過程中可以將本文和官方教程結合來參考。官方教程點這裡檢視。

教程特點(做好心理準備):
需要下載 cloudera-manager-daemons 包(744M),cloudera-manager-agent 包(788M),下載過程比較慢,且中途容易出錯,需要多次重試。
如果對上述部署方式不滿意,還可以嘗試官方的第三種方式(預下載安裝包並手動安裝):
https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_ig_install_path_c.html#cmig_topic_6_7

第一步:購買ECS資源:

在阿里雲官方網站上購買5臺規格為ecs.d1.6xlarge的機器。注意兩點:

  1. 修改機器名稱以區分不同的角色:1臺 master,4臺 worker,例如cdh-m1, cdh-w1, cdh-w2, cdh-w3, cdh-w4
  2. 點選下單前選擇密碼登入,並記住登入密碼。

第二步:簡單配置叢集

  1. 所有結點設定免密登入(百度搜尋“ssh免密登入”)
  2. 修改所有結點 hostname
hostname cdh-m1

並同步修改 /etc/hostname 檔案

  1. (optional) 為所有結點配置pdsh,方便批量操作。pdsh的基本命令:
pdsh -w cdh-w[1-4] cmd
  1. 可以放在第四步的間隙來做)配置本地資料盤(格式化,掛載,開啟自動掛載)

點選這裡下載 format.sh指令碼。

for i in {1..4}; do scp format.sh root@cdh-w$i:/root; done
pdsh -w cdh-w[1-4] bash /root/format.sh

檢查一下是否配置成功(輸出為所有 worker 結點本地盤數量總和,4結點是48):

pdsh -w cdh-w[1-4] df -h | grep "5.1T" | wc -l

其中“5.1T”為資料盤大小,可以根據本地資料盤做修改。

第三步:安裝基礎服務

  1. 登入到 master 結點,安裝 MySQL :詳細教程點選這裡。對照教程,完成:

    • 配置 my.cnf(只需要照著它的推薦配置配就可以了);
    • 備份 ib_logfile
    • 修改 root 使用者登入密碼;
    • 新增到開機自啟動;
    • 下載 jdbc
    • 建立一些資料庫:在 MySQL 中執行指令碼:create_databases.sql。點選這裡下載指令碼。
  2. 配置Cloudera源:
    下載(點選下載)並將 cloudera-manager.repo 檔案拷貝到 /etc/yum.repos.d/
  3. 安裝jdk-1.7:(下載速度較慢,15min)
sudo yum install oracle-j2sdk1.7

第四步:安裝CDH

  1. 安裝 Cloudera Manager Server Packages:(下載速度較慢,中途可能失敗,需要反覆重試,利用這個時間空隙,可以完成第二步第4小步
sudo yum install cloudera-manager-daemons cloudera-manager-server
  1. Cloudera Manager 配置本地資料庫:

在 MySQL中建立一個服務於 cloudera manager 的資料庫,起名叫 cloudera_manager (小寫):

create database cloudera_manager DEFAULT CHARACTER SET utf8;

連線到該資料庫:

/usr/share/cmf/schema/scm_prepare_database.sh mysql cloudera_manager root password
  1. 啟動 Cloudera Manager Server
sudo service cloudera-scm-server start
  1. 在瀏覽器中開啟 http://cdh-m1:7180,此時無響應,需要做埠對映:詳細教程可以點選這裡瞭解更多。

我的做法:開兩個命令視窗,分別跑兩個程式:

ssh -i id_rsa -ND 7180 root@cdh-m1

其中“7180”是準備對映的埠。

/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --proxy-server="socks5://localhost:7180" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" --user-data-dir=/tmp/
  1. 重新整理剛才的頁面:http://cdh-m1:7180,使用者名稱和密碼都是admin。按照提示開始安裝過程。由於每臺機器都需要安裝 jdkcloudera-manager-agent,這兩個包的下載速度非常慢,過程可能長達數小時。需要提前做好心裡準備(其他準備也做不了)。安裝過程中需要注意幾個問題:

    • 在主機檢查階段,確保所有專案都checked,如果沒有,按照提示逐一修復;
    • 在服務選擇階段,可以自定義服務,根據需要選擇相應的服務,而無需選擇所有服務。也可以直接選擇所有服務,安裝完成後手動停掉不需要的服務,我選擇了所有服務(後來我又把不需要的服務都手工刪掉了,衰);
    • 在資料庫連線階段,開啟 create_databases.sql 檔案,並對照填寫相應的內容;如果在上一步中選擇了 HueOozie 服務,那麼這裡需要為這兩個服務配置相應的資料庫,詳細教程見這裡:

Huehttps://www.cloudera.com/documentation/enterprise/5-13-x/topics/hue_dbs_mysql.html#hue_dbs_mysql
Ooziehttps://www.cloudera.com/documentation/enterprise/5-13-x/topics/install_oozie_ext_db.html#admin_oozie_ext_db

如果配置 Oozie 的時候需要JDBC,那麼建立軟鏈:

ln -s /usr/share/java/mysql-connector-java.jar /opt/cloudera/parcels/CDH/lib/oozie/lib/mysql-connector-java.jar
  • 停止或者刪除不需要的服務,並根據 Cloudera Manager 的建議,修復一些其他問題。

第五步:驗證安裝是否成功:

  1. 登入到 master 結點,以 hive 使用者連線到 HiveServer2
beeline -u "jdbc:hive2://localhost:10000/default" -n hive
  1. 建立一張叫 table_nameORC 事務表:
CREATE TABLE table_name (id int, name string)
CLUSTERED BY (id) INTO 2 BUCKETS
STORED AS ORC
TBLPROPERTIES ("transactional"="true",
  "compactor.mapreduce.map.memory.mb"="2048",
  "compactorthreshold.hive.compactor.delta.num.threshold"="4",
  "compactorthreshold.hive.compactor.delta.pct.threshold"="0.5"
);
  1. 插入一條記錄並讀取:
insert into table_name(id, name) values(`1`, `Alex`);
select * from table_name;
  1. 驗證 Hive-on-Spark 是否正常:
set hive.execution.engine=spark;
select count(*) from table_name;

如果輸出的結果為1, 那麼表明安裝正常。

到此為止,我們已經成功在ECS上搭建起了一套大資料系統。


相關文章