zoukankan      html  css  js  c++  java
  • C#码农的大数据之路

    在进行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)

  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/lsxqw2004/p/6664618.html
Copyright © 2011-2022 走看看