看了好多文章,都不是特别详细,现在通过综合所有的文章一起写个自己配置的过程。
一、先配置一个docker
docker pull daocloud.io/daocloud/tensorflow:nightly-devel
这个是带有tensorflow深度学习库的ubuntu14.04,因为我要用到tensorflow所以下的这个。如果是你,找一个带ubuntu14.04的即可。
sudo docker run -v /home/y:/mnt/y -it younfor/tensor:0.12
运行一个docker镜像然后-v指定映射路径方便共享文件
安装ssh
apt-get install ssh //如果找不到则要配置软件源再apt-get update即可,可以自行百度比较简单
然后启动
/usr/sbin/sshd // 最好加入vim ~/.bashrc, 写在最后,然后source ~/.bashrc
如果报错
Missing privilege separation directory: /var/run/sshd
mkdir 这个目录就行
将 /etc/ssh/sshd_config中PermitRootLogin xx 改为yes
cd ~/
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cd .ssh
cat id_rsa.pub >> authorized_keys
开启ssh服务后验证是否可以使用,打印出当前时间
ssh localhost date
安装java
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
这样弄完后
java -version // 有东西则安装完成
vim ~/.bashrc
写入
export JAVA_HOME=/usr/lib/jvm/java-7-oracle/
安装zookeeper
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/
下载解压到/usr
vim ~/.bashrc // 写入下面环境变量
export ZOOKEEPER_HOME=/usr/zookeeper-3.4.8
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source ~/.bashrc
cp /usr/zookeeper-3.4.5/conf/zoo_sample.cfg /usr/zookeeper-3.4.5/conf/zoo.cfg
#数据存储目录修改为:
dataDir=/root/zookeeper/tmp
#在最后添加Zkserver配置信息:
server.1=cloud1:2888:3888
server.2=cloud2:2888:3888
server.3=cloud3:2888:3888
然后在控制台
mkdir ~/zookeeper
mkdir ~/zookeeper/tmp
touch ~/zookeeper/tmp/myid
#~/zookeeper/tmp/myid文件中保存的数字代表本机的Zkserver编号
#在此设置cloud1为编号为1的Zkserver,之后生成cloud2和cloud3之后还需要分别修改此文件
echo 1 > ~/zookeeper/tmp/myid
安装hadoop
http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz
复制到/usr/hadoop-2.6.5
配置环境变量
export HADOOP_HOME=/usr/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改Hadoop启动配置文件(/usr/hadoop-2.6.4/etc/hadoop/hadoop-env.sh):
1 #修改JAVA_HOME
2 export JAVA_HOME=xxx
修改核心配置文件(/usr/hadoop-2.6.5/etc/hadoop/core-site.xml):
贴到configuration中间
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>cloud1:2181,cloud2:2181,cloud3:2181</value>
</property>
修改HDFS配置文件(/usr/hadoop-2.6.4/etc/hadoop/hdfs-site.xml):
dfs.nameservices 名称服务,在基于HA的HDFS中,用名称服务来表示当前活动的NameNode
dfs.ha.namenodes. 配置名称服务下有哪些NameNode
dfs.namenode.rpc-address.. 配置NameNode远程调用地址
dfs.namenode.http-address.. 配置NameNode浏览器访问地址
dfs.namenode.shared.edits.dir 配置名称服务对应的JournalNode
dfs.journalnode.edits.dir JournalNode存储数据的路径
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>cloud1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>cloud1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>cloud2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>cloud2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://cloud1:8485;cloud2:8485;cloud3:8485/ns1</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/root/hadoop/journal</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
修改Yarn的配置文件(/usr/hadoop-2.6.4/etc/hadoop/yarn-site.xml):
yarn.resourcemanager.hostname RescourceManager的地址,NodeManager的地址在slaves文件中定义
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cloud1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
修改/usr/hadoop-2.6.4/etc/hadoop/mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>
mapreduce.framework.name
</name>
<value>yarn</value>
</property>
</configuration>
修改指定DataNode和NodeManager的配置文件(/usr/hadoop-2.6.4/etc/hadoop/slaves):
cloud1
cloud2
cloud3
安装spark
http://spark.apache.org/downloads.html
Spark安装包下载后,解压在/usr目录下。在~/.bashrc中添加环境变量:
export SPARK_HOME=/usr/spark-1.6.1-bin-hadoop2.6
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
cp /usr/spark-1.6.1-bin-hadoop2.6/conf/spark-env.sh.template /usr/spark-1.6.1-bin-hadoop2.6/conf/spark-env.sh
// 添加
export SPARK_MASTER_IP=cloud1
export SPARK_WORKER_MEMORY=128m
export JAVA_HOME=/usr/jdk1.8.0_77
export SCALA_HOME=/usr/scala-2.10.6
export SPARK_HOME=/usr/spark-1.6.1-hadoop2.6
export HADOOP_CONF_DIR=/usr/hadoop-2.6.5/etc/hadoop
export SPARK_LIBRARY_PATH=$SPARK_HOME/lib
export SCALA_LIBRARY_PATH=$SPARK_LIBRARY_PATH
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_MASTER_PORT=7077
修改指定Worker的配置文件(/usr/spark-1.6.1-bin-hadoop2.6/conf/slaves):
cloud1
cloud2
cloud3
部署分布式
先查看ip
ifconfig
//172.17.0.2
退掉docker窗口,回到你的电脑终端保存这个docker images
sudo docker ps -l
sudo docker commit a1f2ac36a2c9 新名字
基于Spark镜像创建cloud2和cloud3容器:
docker --name cloud2 -h cloud2 --add-host cloud1:172.17.0.2 --add-host cloud2:172.17.0.3 --add-host cloud3:172.17.0.4 -it Spark
docker --name cloud3 -h cloud3 --add-host cloud1:172.17.0.2 --add-host cloud2:172.17.0.3 --add-host cloud3:172.17.0.4 -it Spark
还记得之前提到的cloud2和cloud3的当前Zkserver还未配置吗?分别在cloud2和cloud3容器中修改Zookeeper配置:
#在cloud2执行
echo 2 > ~/zookeeper/tmp/myid
#在cloud3执行
echo 3 > ~/zookeeper/tmp/myid
在所有节点启动Zkserver
1 zkServer.sh start
在所有节点查看Zkserver运行状态:
1 #显示连接不到Zkserver的错误,可稍后查看
2 #Master表示主Zkserver,Follower表示从Zkserver
3 Zkserver.sh status
初始化其中一个NameNode,就选cloud1吧:
启动journalnode(在cloud1上启动所有journalnode) (有个教程少了这一步 ,让我蛋疼了一下)
hadoop-daemons.sh start journalnode
(运行jps命令检验,多了JournalNode进程)
如果报错
JAVA_HOME is not set
是因为ssh的问题。
在把export JAVA_HOME=/usr/lib/jvm/java-7-oracle/ 加到/usr/hadoop-2.6.5/etc/hadoop/hadoop.env.sh即可
格式化NameNode
hdfs namenode -format
//格式化zkfc
hdfs zkfc -formatZK
在cloud1启动HDFS,Yarn,Spark:
1 #启动NameNode,DataNode,zkfc,JournalNode
2 start-dfs.sh
3 #启动ResouceManager,NodeManager
4 start-yarn.sh
5 #启动Master,Worker
6 start-all.sh
使用jps命令查看各节点服务运行情况:
1 jps
还可以登录web管理台来查看运行状况:
服务 地址
HDFS cloud1:50070
Yarn cloud1:8088
Spark cloud1:8080
参考
https://my.oschina.net/allen1088/blog/214511
http://blog.csdn.net/qq1010885678/article/details/46353101
http://www.cnblogs.com/jasonfreak/p/5391190.html