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

C#码农的大数据之路 - HDP SandBox配置及VS连接.md的更多相关文章

  1. C#码农的大数据之路 - 使用C#编写MR作业

    系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...

  2. C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业

    准备主机 准备3台主机,名称作用如下: 昵称 Fully Qualified Domain Name IP 作用 Ubuntu-Parrot head1.parrot 192.168.9.126 Am ...

  3. C#码农的大数据之路 - 使用Azure Management API创建HDInsight集群

    Azure平台提供了几乎全线产品的API,可以使用第三方工具来进行管理.对于.NET更是提供封装好了的库方便使用C#等语言实现Azure的管理. 我们使用创建HDInsight集群为例来介绍使用C#管 ...

  4. 大数据测试之hadoop集群配置和测试

    大数据测试之hadoop集群配置和测试   一.准备(所有节点都需要做):系统:Ubuntu12.04java版本:JDK1.7SSH(ubuntu自带)三台在同一ip段的机器,设置为静态IP机器分配 ...

  5. CentOS6安装各种大数据软件 第九章:Hue大数据可视化工具安装和配置

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  6. 大数据之路week07--day03(Hadoop深入理解,JAVA代码编写WordCount程序,以及扩展升级)

    什么是MapReduce 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃. MapReduce方法则是: 1.给在座的所有玩家中分配这摞牌 2.让每个玩家数自己手中的牌有几 ...

  7. 大数据之路week04--day06(I/O流阶段一 之异常)

    从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...

  8. 胖子哥的大数据之路(11)-我看Intel&&Cloudera的合作

    一.引言 5月8日,作为受邀嘉宾,参加了Intel与Cloudera在北京中国大饭店新闻发布会,两家公司宣布战略合作,该消息成为继Intel宣布放弃大数据平台之后的另外一个热点新闻.对于Intel的放 ...

  9. 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例

    一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...

随机推荐

  1. nodejs 后台服务启动

    最近一个项目微信小程序,需要写个小型的后端程序处理聊天通讯记录保存,主要是功能是组建群聊天室,所以用node写了个websocket服务... 但是终端连接到服务器,运行 node server.js ...

  2. 【Azure】Azure学习方法和学习资料

    学习方法: DEX为入门培训,fundamental book进阶材料,Azure 官方为补充权威材料,网站一些大拿的Blog是很多实践精华,推荐阅读. 推荐教材和学习内容: EDX培训:http:/ ...

  3. Linux 初设root 密码

    设置root用户的密码,输入命令:sudo passwd root 然后输入root密码,最后确认,OK,设置完成. 输入:su 提示输入密码,就能够以root身份登录啦.

  4. css系列:input的placeholder在safari下设置行高失效

    在项目中遇到input的placeholder在safari下设置行高失效的问题,问度娘后未得治原因,倒是有解决办法: 方法一:使用padding使提示文字居中,如果font-size:14px,UI ...

  5. 【转载】c语言数据的左移右移

    原文地址:http://www.cnblogs.com/myblesh/articles/2431806.html 由于在飞控程序中执行效率对程序的影响相当大,所以一个好的运算效率很重要.左移右移比单 ...

  6. Java使用POI为Excel打水印,调整列宽并设置Excel只读(用户不可编辑)

    本文介绍在Java语言环境下,使用POI为Excel打水印的解决方案,具体的代码编写以及相关的注意事项. 需求描述: 要求通过系统下载的Excel都带上公司的水印,列宽调整为合适的宽度,并且设置为不可 ...

  7. linq语句复杂查询和分开查询的性能对比

    刚开始以为复杂的linq语句查询会不会比分开来写效率高,因为复杂的语句关联和嵌套多,执行应该慢.分开写虽然多了一次io处理,但是关联比较少,数据了比价少,和朋友讨了一下,回家就做了个测试,废话不多说, ...

  8. JS模式---发布、订阅模式

    发布订阅模式又叫观察者模式,它定义一种一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知. document.body.addEventListener('click', ...

  9. 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用

    前言 一直没有找到一个合适的展示个人项目的模板,所以自己动手使用 Vue 写了一个.该模板基于 Markdown 文件进行配置,只需要按一定规则编写 Markdown 文件,然后使用一个 在线工具 转 ...

  10. 设计模式--MVC(C++版)

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型)-是应用程序中用于处理应用程序数据逻辑的部分.通常模型对象 ...