C#碼農的大數據之路 - HDP SandBox配置及VS連接.md


在進行HDInsight的開發測試之前,搭建一個測試環境是很重要的。
由於微軟與Hortonworks合作開發了HDInsgiht,如果不方便建立Azure賬號使用Azure HDInsight進行開發測試(土豪可以直接選擇使用Azure,的確很方便,不過HDInsight按分鍾計費,走的都是真金白銀),我們可以選擇使用Hortonworks HDP作為本地開發測試環境。Hortonworks很人性化的提供了HDP SandBox方便本地測試環境的搭建,所提供的SandBox有三種格式,分別為VirtualBox、Vmware及Docker的鏡像,總有一種可以滿足需求。
作為一個Docker愛好者,樓主選擇HDP SandBox的Docker鏡像搭建測試環境。2.5版本的HDP SandBox需要至少Docker 1.21.1或更新版本。由於樓主使用Windows作為開發環境,直接選擇了Docker for Windows安裝,只需要開啟系統的Hyper-V虛擬機,雙擊安裝並運行,一個Docker環境就已經入駐你對系統了。截止到2017年2月,最新版本的Docker for Windows已經集成Docker 1.13.0版,完全滿足HDP SandBox的需要。

硬件要求
由於HDP SandBox運行需要至少8G內存的Docker主機。(實測證明Docker主機最少得有4G內存才能正常打開8888端口的管理頁面,2G內存雖然可以使用腳本啟動一系列服務,但8888端口頁面打開速度極慢,幾乎沒有任何可用性)而Windows版本的Docker實際是運行於一個名為MobyLinuxVM的虛擬機中(這就是安裝Docker for Windows需要開啟Hyper-V的原因)。我們需要調高這個虛機內存的大小。
方式是,在Docker for Windows的設置界面去修改(右鍵“小鯊魚”圖標,點擊Settings,設置窗口左側選擇Advanced)。

但這里的修改會直接改變虛機內存大小,虛機在啟動時就會直接占用所設置的內存大小,如果主機內存不足,虛機就無法啟動,從而使Docker啟動失敗。

提示:直接修改Hyper-V中MobyLinuxVM這個虛機的內存大小,包括開啟動態內存的方式都是行不通的,啟動Docker for Windows時軟件會自動修改虛機的內存設置。
磁盤空間方面,HDP SandBox需要15G,這個還是很好滿足的。

下載HDP SandBox Docker Image

訪問這個地址下載HDP SandBox Docker Image(當前鏈接是2.5版,訪問此頁面獲取最新版)。

文件體積10多G,夠喝幾杯咖啡了

導入HDP SandBox Docker Image

使用docker load導入下載的Image:

docker load -i HDP_2.5_docker.tar.gz

這個過程也要花費一段時間,如果是固態硬盤估計會好很多。
當看到如下輸出就表示導入完成:

b1b065555b8a: Loading layer        [==================================================>] 202.2 MB/202.2 MB
3901568415a3: Loading layer [==================================================>] 13.85 GB/13.85 GB
Loaded image: sandbox:latest

可以驗證下導入的鏡像:

docker images

啟動HDP SandBox

啟動HDP SandBox並不是簡單的開啟一個容器,因為涉及到需要在容器啟動后,執行一些任務,所以Hortonworks提供了一個shell腳本用於啟動HDP SandBox。最近的腳本可以在這個頁面獲取。
這里貼出HDP2.5的啟動腳本(注意:這個腳本是用於macOS(博主把用於Linux腳本的一部分加上了),macOS和Widnows都屬於非Linux系統,這個腳本是最接近Docker for Windows環境的):

#!/bin/bash
echo "Waiting for docker daemon to start up:"
until /usr/bin/docker ps 2>&1| grep STATUS>/dev/null; do  sleep 1; done;  >/dev/null
/usr/bin/docker ps -a | grep sandbox
if [ $? -eq 0 ]; then
 /usr/bin/docker start sandbox
else
docker run -v hadoop:/hadoop --name sandbox --hostname "sandbox.hortonworks.com" --privileged -d `
-p 6080:6080 \
-p 9090:9090 \
-p 9000:9000 \
-p 8000:8000 \
-p 8020:8020 \
-p 42111:42111 \
-p 10500:10500 \
-p 16030:16030 \
-p 8042:8042 \
-p 8040:8040 \
-p 2100:2100 \
-p 4200:4200 \
-p 4040:4040 \
-p 8050:8050 \
-p 9996:9996 \
-p 9995:9995 \
-p 8080:8080 \
-p 8088:8088 \
-p 8886:8886 \
-p 8889:8889 \
-p 8443:8443 \
-p 8744:8744 \
-p 8888:8888 \
-p 8188:8188 \
-p 8983:8983 \
-p 1000:1000 \
-p 1100:1100 \
-p 11000:11000 \
-p 10001:10001 \
-p 15000:15000 \
-p 10000:10000 \
-p 8993:8993 \
-p 1988:1988 \
-p 5007:5007 \
-p 50070:50070 \
-p 19888:19888 \
-p 16010:16010 \
-p 50111:50111 \
-p 50075:50075 \
-p 50095:50095 \
-p 18080:18080 \
-p 60000:60000 \
-p 8090:8090 \
-p 8091:8091 \
-p 8005:8005 \
-p 8086:8086 \
-p 8082:8082 \
-p 60080:60080 \
-p 8765:8765 \
-p 5011:5011 \
-p 6001:6001 \
-p 6003:6003 \
-p 6008:6008 \
-p 1220:1220 \
-p 21000:21000 \
-p 6188:6188 \
-p 61888:61888 \
-p 2222:22 \
sandbox /usr/sbin/sshd -D

由於我們是在Windows環境下使用Docker,還需要把這段腳本改造為Windows批處理或Powershell腳本。
下面是功能對應的Powershell腳本:

echo  "Waiting for docker daemon to start up:"
while (docker ps 2>&1| Select-String error) { sleep 1; echo "docker is starting ..." }
echo "docer daemon is started"
$currContainer = docker ps -a | Select-String sandbox
if ($currContainer -ne $null)
{
    echo "sandbox container is created, will start immediately"
    docker start sandbox
}
else
{
    echo "sandbox container is not created, will be create and start now"
    docker run -v hadoop:/hadoop --name sandbox --hostname "sandbox.hortonworks.com" --privileged -d `
        -p 6080:6080 `
        -p 9090:9090 `
        -p 9000:9000 `
        -p 8000:8000 `
        -p 8020:8020 `
        -p 42111:42111 `
        -p 10500:10500 `
        -p 16030:16030 `
        -p 8042:8042 `
        -p 8040:8040 `
        -p 2100:2100 `
        -p 4200:4200 `
        -p 4040:4040 `
        -p 8050:8050 `
        -p 9996:9996 `
        -p 9995:9995 `
        -p 8080:8080 `
        -p 8088:8088 `
        -p 8886:8886 `
        -p 8889:8889 `
        -p 8443:8443 `
        -p 8744:8744 `
        -p 8888:8888 `
        -p 8188:8188 `
        -p 8983:8983 `
        -p 1000:1000 `
        -p 1100:1100 `
        -p 11000:11000 `
        -p 10001:10001 `
        -p 15000:15000 `
        -p 10000:10000 `
        -p 8993:8993 `
        -p 1988:1988 `
        -p 5007:5007 `
        -p 50070:50070 `
        -p 19888:19888 `
        -p 16010:16010 `
        -p 50111:50111 `
        -p 50075:50075 `
        -p 50095:50095 `
        -p 18080:18080 `
        -p 60000:60000 `
        -p 8090:8090 `
        -p 8091:8091 `
        -p 8005:8005 `
        -p 8086:8086 `
        -p 8082:8082 `
        -p 60080:60080 `
        -p 8765:8765 `
        -p 5011:5011 `
        -p 6001:6001 `
        -p 6003:6003 `
        -p 6008:6008 `
        -p 1220:1220 `
        -p 21000:21000 `
        -p 6188:6188 `
        -p 61888:61888 `
        -p 2222:22 `
        sandbox /usr/sbin/sshd -D
}

在初始化container的操作中將本地的hadoop目錄掛載到container的/hadoop下,所以執行命令前在運行命令的目錄下要創建一個名為hadoop的目錄。
另外要保證我們Windows中沒有程序占用了上述需要在Docker中開放的端口,否則會導致container啟動失敗。

通過ssh連接到啟動的sandbox container:

ssh root@localhost -p2222

可以在Cmder或者Linux中執行這個命令(或者隨便一個ssh客戶端),國際慣例第一次連接時,會提示是否信任主機,輸入yes即可。

使用默認密碼hadoop登錄,然后sandbox會要求立刻修改密碼,再次輸入舊密碼hadoop,並連續輸入兩次新密碼即可。

建立ssh連接后,在sandbox內執行如下命令:

 /bin/bash /etc/init.d/startup_script start

大致可以看到如下輸出:

Starting tutorials...                                      [  Ok  ]
Starting startup_script...
Starting HDP ...
Starting mysql                                            [  OK  ]
Starting Flume                                            [  OK  ]
Starting Postgre SQL                                      [  OK  ]
Starting name node                                        [  OK  ]
Starting Zookeeper nodes                                  [  OK  ]
Starting Oozie                                            [  OK  ]
Starting data node                                        [  OK  ]
Starting Ranger-admin                                     [WARNINGS]
find: failed to restore initial working directory: Permission denied
Starting Ranger-usersync                                  [  OK  ]
Starting NFS portmap                                      [  OK  ]
Starting Hdfs nfs                                         [  OK  ]
Starting Hive server                                      [  OK  ]
Starting Hiveserver2                                      [  OK  ]
Starting Node manager                                     [  OK  ]
Starting Yarn history server                              [  OK  ]
Starting Webhcat server                                   [  OK  ]
Starting Ambari server                                    [  OK  ]
Starting Spark                                            [  OK  ]
Starting Resource manager                                 [  OK  ]
Starting Zeppelin                                         [  OK  ]
Starting Ambari agent                                     [  OK  ]
Starting Mapred history server                            [  OK  ]
Safe mode is OFF
Starting sandbox...
Starting shellinaboxd:                                     [  OK  ]

可以忽略任何警告

等腳本運行結束后就可以訪問http://localhost:8888這個管理頁面
第一次登陸前先要在剛才建立的SSH中執行如下命令重置這個管理控制台的admin密碼:

ambari-admin-password-reset

執行命令並輸入密碼和密碼確認,然后一些列腳本被執行來重置密碼,最后服務會重啟。
等待Ambari服務重啟結束后就可以使用admin和剛才重置的新密碼來登錄管理頁面。

如果Docker for Windows關閉或重啟,下次啟動Docker for Windows后,使用docker start sandbox啟動已創建的container。
然后按前述方法通過ssh連接到sandbox,然后運行/bin/bash /etc/init.d/startup_script start啟動服務。

在VS2015基礎上安裝Azure Data Lake Tools for Visual Studio。安裝后打開VS2015,在“服務器資源管理器”窗口中Azure分支的HDInsight子分支上右鍵可以看到“Connect to HDInsight Emulator”,如圖:

點擊,彈出的窗口中輸入剛才設置的Ambari的密碼:

下一步,檢查各項地址是否正確,並輸入之前重置的root密碼:

下一步,開始嘗試連接這些服務:

如果遇到像圖中這樣失敗的情況,點擊Update。將會更新Hive配置:

之后還需要登錄Ambari,再Hive菜單,可以看到如下圖這樣的提示:

按提示重啟后,重試Hive連接,一般都會成功:

可以嘗試查詢下Sandbox中包含的示例數據庫:

常用頁面:
Web SSH (http://localhost:4200/):當沒有安裝SSH客戶端時可以使用這個基於Web的SSH客戶端

其它運行Hortonworks的方式(VirtualBox或Vmware)請參見官網文檔(VirtualBox)文檔(Vmware)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM