设为首页 收藏本站
查看: 1130|回复: 0

[经验分享] C#码农的大数据之路

[复制链接]

尚未签到

发表于 2017-6-21 19:29:14 | 显示全部楼层 |阅读模式
  在进行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)。
  
DSC0000.png
  
但这里的修改会直接改变虚机内存大小,虚机在启动时就会直接占用所设置的内存大小,如果主机内存不足,虚机就无法启动,从而使Docker启动失败。
  
DSC0001.png
  
提示:直接修改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”,如图:
DSC0002.png

  点击,弹出的窗口中输入刚才设置的Ambari的密码:
DSC0003.png

  下一步,检查各项地址是否正确,并输入之前重置的root密码:
DSC0004.png

  下一步,开始尝试连接这些服务:
DSC0005.png

  如果遇到像图中这样失败的情况,点击Update。将会更新Hive配置:
DSC0006.png

  之后还需要登录Ambari,再Hive菜单,可以看到如下图这样的提示:
DSC0007.png

  按提示重启后,重试Hive连接,一般都会成功:
DSC0008.png

  可以尝试查询下Sandbox中包含的示例数据库:
DSC0009.png

  常用页面:
  
Web SSH (http://localhost:4200/):当没有安装SSH客户端时可以使用这个基于Web的SSH客户端

  其它运行Hortonworks的方式(VirtualBox或Vmware)请参见官网文档(VirtualBox)及文档(Vmware)。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-386474-1-1.html 上篇帖子: docker-machine windows 下篇帖子: 【5】SVM算法原理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表