New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[word count]Mac+IDEA+Gradle搭建MapReduce本地开发环境 #19

Closed
McKey1911 opened this Issue Mar 13, 2017 · 11 comments

Comments

Projects
None yet
3 participants
@McKey1911

McKey1911 commented Mar 13, 2017

在Mac本地试着搭建了一个开发环境。不是虚拟机。
1,安装IntelliJ IDEA。应该默认也同时安装了Gradle。
2,新建Gradle项目。
3,从 https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html 拷贝WordCount源代码。
4,在本地某个目录新建 input目录并放入一些文本文件,但是不要新建output目录。
5,build 然后run。就可以看到在指定的output目录里的结果了。

以下是一些我的build.gradle里的一些配置信息。
包的依赖:

dependencies {
    compile group: 'org.apache.hadoop', name: 'hadoop-common', version: '2.7.3'
    compile group: 'org.apache.hadoop', name: 'hadoop-mapreduce-client-jobclient', version: '2.7.3'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}

run task:

run {
    args += '请自行更换:input目录的path'
    args += '请自行更换:output目录的path'
}

关于如何使用IDEA和Gradle,请问Google先生,本人也是第一次使用它们。
如果使用Maven的话,依赖的包都是一样的。记得在IDE里配置启动参数。

已经打包好的jar,上传到(第一节课的环境)Hadoop的NameNode上执行即可。
详细在上面提到的 MapReduceTutorial 里面有,此处不赘述。

关于代码,我还没有copy老师的镜像,但是看到某个手顺里有代码的样子,应该与MapReduceTutorial 是一致的。

如果是在Windows上搭建的话,可能会因为user权限的问题而run失败。必要的话,可以参考:https://www.polarxiong.com/archives/Hadoop-Intellij%E7%BB%93%E5%90%88Maven%E6%9C%AC%E5%9C%B0%E8%BF%90%E8%A1%8C%E5%92%8C%E8%B0%83%E8%AF%95MapReduce%E7%A8%8B%E5%BA%8F-%E6%97%A0%E9%9C%80%E6%90%AD%E8%BD%BDHadoop%E5%92%8CHDFS%E7%8E%AF%E5%A2%83.html

@LiuMing5489

This comment has been minimized.

LiuMing5489 commented Mar 13, 2017

good jod,
用宿主机配置idea等开发环境。
用docker配置hadoop环境。
就可以摆脱臃肿的vb了。

@xenron

This comment has been minimized.

Contributor

xenron commented Mar 14, 2017

docker很不错的,很方便,慢慢会喜欢上它。

@McKey1911

This comment has been minimized.

McKey1911 commented Mar 14, 2017

我用VirtualBox创建了一个vm,在vm上安装了Docker,Docker上运行了3个Container。
(老师有提供Docker的手顺及images)
3个Container是Hadoop的 1Master+ 2Slaves 节点,运行正常。
现在要解决的是如何从我的宿主机(mac)来访问Master节点,也就是Docker的Container。
在看Docker官网的文档,然而还没有什么进展。
如果老师有什么好的资料,还请分享给我们。谢谢。

@xenron

This comment has been minimized.

Contributor

xenron commented Mar 14, 2017

内容稍多,我把log精简了一下,试试看读一下

docker在mac,windows上的运行,是通过docker-machine来实现的
之前可上提过virtual box
所以,第一步,找到docker-machine所在的ip地址
mac-mini:~ xenron$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v1.12.3

确认一下docker images
mac-mini:~ xenron$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
trex/hadoop-master latest a81d85890038 2 days ago 981.4 MB
trex/hbase-slave latest 7b6ed6523178 2 days ago 1.402 GB
trex/hbase-master latest 88f47caab409 2 days ago 1.402 GB
trex/hadoop-slave latest 8bee1e1a49f1 2 days ago 981.4 MB
trex/hbase-base latest cf47e0ef1fc4 2 days ago 1.402 GB
trex/hadoop-base latest 3465e96cbfbc 2 days ago 981.4 MB
trex/base latest f04d04fa49b3 2 days ago 475.9 MB

确认 docker container 的运行状态
注意观察 0.0.0.0:33608->22/tcp,docker container 对外公开了22端口,但是访问只能通过 docker-machine
mac-mini:~ xenron$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
fefa668071e3 trex/hadoop-master:latest "sh /etc/init.d/ssh s" 5 minutes ago Up 5 minutes 0.0.0.0:33608->22/tcp, 0.0.0.0:33607->7373/tcp, 0.0.0.0:33606->7946/tcp, 0.0.0.0:33605->8030/tcp, 0.0.0.0:33604->8031/tcp, 0.0.0.0:33603->8032/tcp, 0.0.0.0:33602->8033/tcp, 0.0.0.0:33601->8040/tcp, 0.0.0.0:33600->8042/tcp, 0.0.0.0:33599->8060/tcp, 0.0.0.0:33598->8088/tcp, 0.0.0.0:33597->9000/tcp, 0.0.0.0:33596->50010/tcp, 0.0.0.0:33595->50020/tcp, 0.0.0.0:33594->50060/tcp, 0.0.0.0:33593->50070/tcp, 0.0.0.0:33592->50075/tcp, 0.0.0.0:33591->50090/tcp, 0.0.0.0:33590->50475/tcp master

尝试直接在 host 宿主机上,通过ssh连接docker container
注意ip和端口
mac-mini:~ xenron$ ssh -p 33608 root@192.168.99.100
The authenticity of host '[192.168.99.100]:33608 ([192.168.99.100]:33608)' can't be established.
ECDSA key fingerprint is SHA256:LUsF9xcD5z7GOkGbipnwxFGkAYEDAxmDbmoIbGNVejk.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.99.100]:33608' (ECDSA) to the list of known hosts.
root@192.168.99.100's password:
Permission denied, please try again.

出现错误提示
但是简单分析一下,不是ip地址找不到,也不是端口未开放,而是无权限
原因是默认不允许root通过ssh访问

查看ssh配置文件
cat /etc/ssh/sshd_config

这个要修改一下,就可以用root用户登陆ssh了
PermitRootLogin without-password

@McKey1911

This comment has been minimized.

McKey1911 commented Mar 14, 2017

我的机器没有docker-machine。“docker-machine ls” 是无法执行的。
根据官方文档,在老版本的系统上可能是需要docker-machine的。

我有看 start-hadoop-container.sh 脚本,run的时候指定了-P,所以需要的端口都被开放了。
问题上我本机浏览器无法打开连接这些端口。
docker ps 的出力结果:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

9c64d5c9225b nginx "nginx -g 'daemon ..." 27 minutes ago Up 27 minutes 0.0.0.0:80->80/tcp, 443/tcp webserver

43b0ac8ecab8 trex/hadoop-slave:latest "/bin/sh -c ''/roo..." 3 days ago Up 40 minutes 0.0.0.0:32824->22/tcp, 0.0.0.0:32823->7373/tcp, 0.0.0.0:32822->7946/tcp, 0.0.0.0:32821->8030/tcp, 0.0.0.0:32820->8031/tcp, 0.0.0.0:32819->8032/tcp, 0.0.0.0:32818->8033/tcp, 0.0.0.0:32817->8040/tcp, 0.0.0.0:32816->8042/tcp, 0.0.0.0:32815->8060/tcp, 0.0.0.0:32814->8088/tcp, 0.0.0.0:32813->9000/tcp, 0.0.0.0:32812->50010/tcp, 0.0.0.0:32811->50020/tcp, 0.0.0.0:32810->50060/tcp, 0.0.0.0:32809->50070/tcp, 0.0.0.0:32808->50075/tcp, 0.0.0.0:32807->50090/tcp, 0.0.0.0:32806->50475/tcp slave2

d6d453884b23 trex/hadoop-slave:latest "/bin/sh -c ''/roo..." 3 days ago Up 41 minutes 0.0.0.0:32805->22/tcp, 0.0.0.0:32804->7373/tcp, 0.0.0.0:32803->7946/tcp, 0.0.0.0:32802->8030/tcp, 0.0.0.0:32801->8031/tcp, 0.0.0.0:32800->8032/tcp, 0.0.0.0:32799->8033/tcp, 0.0.0.0:32798->8040/tcp, 0.0.0.0:32797->8042/tcp, 0.0.0.0:32796->8060/tcp, 0.0.0.0:32795->8088/tcp, 0.0.0.0:32794->9000/tcp, 0.0.0.0:32793->50010/tcp, 0.0.0.0:32792->50020/tcp, 0.0.0.0:32791->50060/tcp, 0.0.0.0:32790->50070/tcp, 0.0.0.0:32789->50075/tcp, 0.0.0.0:32788->50090/tcp, 0.0.0.0:32787->50475/tcp slave1

fbd67f751be5 trex/hadoop-master:latest "/bin/sh -c ''/roo..." 3 days ago Up 41 minutes 0.0.0.0:32786->22/tcp, 0.0.0.0:32785->7373/tcp, 0.0.0.0:32784->7946/tcp, 0.0.0.0:32783->8030/tcp, 0.0.0.0:32782->8031/tcp, 0.0.0.0:32781->8032/tcp, 0.0.0.0:32780->8033/tcp, 0.0.0.0:32779->8040/tcp, 0.0.0.0:32778->8042/tcp, 0.0.0.0:32777->8060/tcp, 0.0.0.0:32776->8088/tcp, 0.0.0.0:32775->9000/tcp, 0.0.0.0:32774->50010/tcp, 0.0.0.0:32773->50020/tcp, 0.0.0.0:32772->50060/tcp, 0.0.0.0:32771->50070/tcp, 0.0.0.0:32770->50075/tcp, 0.0.0.0:32769->50090/tcp, 0.0.0.0:32768->50475/tcp master

其中有一个叫webserver的container,它的80端口被map到宿主机的80端口,我在浏览器键入localhost可以正常访问这个container。 然而其它container却不行,比如我想访问slave2的50070端口,我在浏览器地址栏键入 http://localhost:32809/ 却得到这样的结果:

screen shot 2017-03-14 at 23 38 56

这让我很困惑,按照官方site上的记述,端口就是这样开放的。

@LiuMing5489

This comment has been minimized.

LiuMing5489 commented Mar 15, 2017

既然都用docker了,为啥不直接在mac上挑战一下?

@xenron

This comment has been minimized.

Contributor

xenron commented Mar 15, 2017

@chengwei1987
在mac安装docker的版本是Docker Community Edition?不是toolbox?
我这边mac-mini主机上安装的是toolbox版本
不同版本的实现可能不太一样。。。坑。。。

单纯从 docker ps 的返回结果中,container 的状态应该没有问题,端口映射也都在
1,通过命令(jps,$HADOOP_HOME/bin/hdfs dfsadmin -report),确认一下,namenode的运行状态
2,在namenode节点上,确认WebUI页面能否访问(curl 或者 wget)
curl http://localhost:50070/
curl http://master.trex.com:50070/
3,在datanode节点上,确认WebUI页面能否访问(curl 或者 wget)
curl http://master.trex.com:50070/
4,尝试一下
http://localhost:32809/
http://127.0.0.1:32809/
http://ip地址:32809/
5,编辑宿主机(mac)的hosts文件,增加master.trex.com的指向为127.0.0.1或者宿主机的ip地址
测试
curl http://master.trex.com:32809/

上述123枚问题的话,分别尝试45。

@McKey1911

This comment has been minimized.

McKey1911 commented Mar 15, 2017

@LiuMing5489
我构建了两个Docker。
一个是mac本地的。
一个是在VM上的。
不过VM是Server版的,所以我想在mac运行浏览器访问VM上的Docker的container。
不过两种case都没成功 😓

@McKey1911

This comment has been minimized.

McKey1911 commented Mar 15, 2017

@xenron
Oops! My mistake.
我没有进到Container里面启动hdfs和yarn。。。
非常感谢回答。

@xenron

This comment has been minimized.

Contributor

xenron commented Mar 15, 2017

👽👽👽

@LiuMing5489

This comment has been minimized.

LiuMing5489 commented Mar 15, 2017

👽👽👽

@McKey1911 McKey1911 closed this Mar 15, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment