迁移到linode东京机房

一开始就是新加坡机房,连接不稳定,延迟大。几次提交ticket,希望迁移到东京机房,都被客服以东京机房已满为由回绝。中间还迁过一次美国fremont机房,但似乎比新加坡机房更糟。于是我每隔一段时间,都提交一次ticket,内容不变,回复也不变。

今天,试着添加一个东京机房的节点,居然成功了。再提交ticket,回复居然依然是sorry。看了回复,以为东京机房空闲资源被人抢占了,于是再添加东京机房节点,还是成功。可以断定,要么就是客服按着习惯瞎回复,要么就是linode故意给东京机房保留资源——也许是留给新用户?

Google了一下,发现了自助迁移机房的办法,大喜。
步骤如下:
一、创建新节点
二、停掉旧节点
三、进入旧节点(管理页面),克隆资料到新节点。克隆过程跟联系客服迁移机房后,手动重启节点的过程一样。这个慢啊……
四、删除旧节点
因为linode是按小时记费的,还不用担心费用的问题。

网上说,日本机房很多ip都被封了。等到新节点起来,检测下,果然中奖了。
换ip可无法自助,只好提交ticket。

换了ip,一切ok。虽然延迟没法跟国内服务器比,但与新加坡、美国机房比明显强多了。

利用docker部署Hadoop单节点环境

之前早就编译好了几个hadoop镜像,含2.4.1、2.6.0、2.7.0三个版本。但一直未能成功地部署好docker hadoop环境。这个周末终于能静下心来,做成这件小事。
网络上所流传的docker hadoop部署方式,大都是一个容器一个节点(即master或slave)。我这里采用的是一个容器一个服务的方式。
必须要强调,这只是第一步。多节点部署方式还待研究。

先从镜像服务器拉取我制作的hadoop镜像。我所编译的hadoop镜像的hadoop原生库为64位,jdk为openjdk-7-jdk,Dockerfile见这里。这次我使用的版本是2.6.0。
docker pull wencan/hadoop:2.6.0

创建本地配置文件目录,和数据目录
mkdir conf
mkdir data
拷贝hadoop etc/hadoop目录下的全部配置文件到conf目录下,配置几个关键项。如果本地没有hadoop包,可以创建一个hadoop容器,利用docker cp从容器拷贝出默认的配置文件。
主要配置可见这里。另外还需要需要的配置的为namenode的数据目录,和datanode的数据目录,这个可以参考这里

格式化namenode数据目录
这里必须使用默认的桥接网络,否则会出错
docker run –rm -it -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop -v $PWD/data:/data wencan/hadoop:2.6.0 hdfs namenode -format

运行namenode,使用宿主网络,后面相同
docker run -d –name hadoop_namenode -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop -v $PWD/data:/data –net host wencan/hadoop:2.6.0 hdfs namenode

运行datanode
docker run -d –name hadoop_data -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop -v $PWD/data:/data –net host wencan/hadoop:2.6.0 hdfs datanode

可以登陆http://localhost:50070查看,可以看到一个datanode节点。

运行resourcemanager
docker run -d –name hadoop_resourcemanager -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop –net host wencan/hadoop:2.6.0 yarn resourcemanager

运行nodemanager
docker run -d –name hadoop_nodemanager -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop –net host wencan/hadoop:2.6.0 yarn nodemanager

可以登陆http://localhost:8088查看,可以在nodes页面看到一个nodemanager节点

运行historyserver
docker run -d –name hadoop_historyserver -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop –net host wencan/hadoop:2.6.0 mapred historyserver

创建/input/wordcount目录,并将本地配置文件复制过去,作为稍后wordcount的输入文件
docker run –rm -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop –net host wencan/hadoop:2.6.0 /bin/bash -c ‘hdfs dfs -mkdir -p /input/wordcount && hdfs dfs -copyFromLocal /etc/hadoop/* /input/wordcount’

列出刚才复制到hdfs的文件。也可以在50070查看。
docker run –rm -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop –net host wencan/hadoop:2.6.0 hdfs dfs -ls /input/wordcount/

执行wordcount,输入目录为/input/wordcount,输出目录为/output/wordcount
docker run –rm -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop –net host wencan/hadoop:2.6.0 hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /input/wordcount /output/wordcount

输出mapreduce的计算结果
docker run –rm -e HADOOP_CONF_DIR=/etc/hadoop -v $PWD/conf/:/etc/hadoop –net host wencan/hadoop:2.6.0 hdfs dfs -cat /output/wordcount/*

参考:
Hadoop MapReduce Next Generation – Setting up a Single Node Cluster.
配置运行hadoop