hadoop集群部署
1. 准备三台机器,如`10.8.177.23`,`10.8.177.24`,`10.8.177.25`javascript
2. 修改主机名称,配置`hosts`文件(root用户下操做):java
Shell代码node

- # 每台机器执行,我这里hd开头,后边的数字与机器ip的最后一个组一致
- hostnamectl set-hostname hd-23
- hostnamectl set-hostname hd-23 --static
-
- # 修改hosts文件,
- vi /etc/hosts
- #加入路由配置
- 10.8.177.23 hd-23
- 10.8.177.24 hd-24
- 10.8.177.25 hd-25
3. 每台机器上建立一个用户,如hadoop:linux
Shell代码web

- useradd -d /home/hadoop -m hadoop
- # 最好建立一个用户,不要直接使用root进行操做
4. 设置免密登陆(==hadoop用户,下同==)docker
> 只须要设置master对于其余两台机器进行免密登陆便可apache
Shell代码centos

- # 一、 在Master机器上的主目录中生成ssh公钥
- ssh-keygen -t rsa
- # 二、 在其他机器上主目录中建立.ssh目录(执行上边的命令也能够)
- # 三、 将Master的公钥发送给其他两台服务器(须要输入免密)
- scp id_rsa.pub hadoop@hd-24:/home/hadoop/.ssh/id_rsa.pub.23
- scp id_rsa.pub hadoop@hd-25:/home/hadoop/.ssh/id_rsa.pub.23
- # 四、 在.shh中建立authorized_keys文件,并受权
- touch authorized_keys
- chmod 644 authorized_keys
- # 五、 将Master的公钥加入到受权文件中
- echo id_rsa.pub.23 >> authorized_keys
- # 以上,便可从23无密访问24,25,可使用如下命令测试:
- ssh hd-24
5. 下载jdk、hadoop、hbase、zookeeper浏览器
Shell代码bash

- > - jdk(也能够自行下载):`wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.tar.gz`
- > - zookeeper-3.4.8.tar.gz: `wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz`
- > - hbase-1.2.2-bin.tar.gz:`wget http://mirrors.hust.edu.cn/apache/hbase/1.2.2/hbase-1.2.2-bin.tar.gz`
- > - hadoop-2.7.2.tar.gz:`wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz`
6. 解压以上文件
7. 配置环境变量
Shell代码

- vi ~/.bashrc
- JAVA_HOME=/home/hadoop/jdk1.8.0_77
- JRE_HOME=$JAVA_HOME/jre
- CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
-
- HADOOP_HOME=/home/hadoop/hadoop-2.7.2
- HBASE_HOME=/home/hadoop/hbase-1.2.2
- PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HBASE_HOME/sbin
- expor JAVA_HOME JRE_HOME CLASSPATH HADOOP_HOME HBASE_HOME
- # 配置完成之后进行编译生效
- source .bashrc
-
- #发送给其他机器
- scp .bashrc hadoop@hd-24:/home/hadoop/
8. 配置hadoop
hadoop的配置文件位于`hadoop-2.7.2/etc/hadoop`下,须要配置`core-site.xml`,`hdfs- site.xml`,`yran-site.xml`,`mapred-site.xml`,`hadoop-env.sh`,`slaves`
core-site.xml
Java代码

- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://hd-23:6000</value>
- <final>true</final>
- </property>
-
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/home/hadoop/configsets/hadoop_tmp</value>
- </property>
-
- <property>
- <name>fs.checkpoint.period</name>
- <value>3600</value>
- </property>
-
- <property>
- <name>fs.checkpoint.size</name>
- <value>67108864</value>
- </property>
-
- </configuration>
hdfs-site.xml
Xml代码

- <configuration>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/home/hadoop/configsets/metadata</value>
- </property>
-
- <property>
- <name>dfs.http.address</name>
- <value>hd-23:50070</value>
- </property>
-
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>hd-23:50090</value>
- </property>
-
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>/home/hadoop/configsets/data</value>
- </property>
-
- <property>
- <name>dfs.replication</name>
- <value>2</value>
- </property>
- </configuration>
yarn-site.xml
Xml代码

- <configuration>
-
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>hd-23</value>
- </property>
-
- <property>
- <name>yarn.resourcemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
-
- <property>
- <name>yarn.log.dir</name>
- <value>/home/hadoop/configsets/yarn_log</value>
- </property>
- </configuration>
mapred-site.xml,这个文件若是不存在的话`cp mapred-site.xml.template mapred-site.xml`一个
Xml代码

- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
-
- <property>
- <name>mapreduce.cluster.temp.dir</name>
- <value>/home/hadoop/configsets/mr_tmp</value>
- <final>true</final>
- </property>
-
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>hd-23:6002</value>
- </property>
-
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>hd-23:6003</value>
- </property>
- </configuration>
hadoop-env.sh 将JAVA_HOME配置进去
Shell代码

- #将下边这句话注释了,很差用,但按理说应该能用,结果就是很差用
- #export JAVA_HOME=${JAVA_HOME}
- export JAVA_HOME=/home/hadoop/jdk1.8.0_77
- ```
slaves 文件中加入25,24
Java代码

- hd-24
- hd-25
9. 打包发送至其余机器
jdk、hadoop、hbase、zookeeper均可以采用这种方式配置后,进行发送,zookeeper稍有不一样(详见后文)
Shell代码

- tar cf hadoop-2.7.2.tar hadoop-2.7.2
- scp hadoop-2.7.2.tar hadoop@hd-24:/home/hadoop
- scp hadoop-2.7.2.tar hadoop@hd-25:/home/hadoop
- ssh hd-24
- tar xf hadoop-2.7.2.tar
- exit
- ssh hd-25
- tar xf hadoop-2.7.2.tar
- exit
10. 格式化名称节点
Shell代码

- hadoop namenode -farmat
11. 启停hadoop集群
Java代码

- # 启动
- start-all.sh
-
- #中止
- stop-all.sh
12. jsp查看
Java代码

- [hadoop@hd-23 ~]$ jps
- 12304 QuorumPeerMain
- 16208 ResourceManager
- 24322 Jps
- 15843 NameNode
- 16042 SecondaryNameNode
-
- [root@hd-24 home]# jps
- 12082 QuorumPeerMain
- 15116 Jps
- 12924 DataNode
- 13036 NodeManager
-
- [hadoop@hd-25 ~]$ jps
- 20130 DataNode
- 20242 NodeManager
- 19317 QuorumPeerMain
- 21755 Jps
13. 浏览器查看
Java代码

- http://hd-23:50070/
- http://hd-23:8088/
zookeeper集群部署
1. 配置,配置文件位于`/home/hadoop/zookeeper-3.4.8/conf`
Shell代码

- cp zoo_sample.cfg zoo.cfg
- vi zoo.cfg
- tickTime=2000
- initLimit=10
- syncLimit=5
- dataDir=/home/hadoop/zookeeper-3.4.8/data
- clientPort=2181
-
- # 这里须要注意下server.{id}
- server.23=10.8.177.23:2181:3887
- server.24=10.8.177.24:2182:3888
- server.25=10.8.177.25:2183:3889
2. 数据目录
> zoo.cfg定义了dataDir,须要在每一个服务器的建立此目录,并创建myid文件,内部存储zoo.cfg中server.{id}的id数值
Shell代码

- mkdir /home/hadoop/zookeeper-3.4.8/data
- cd /home/hadoop/zookeeper-3.4.8/data
- vi myid
- 23
-
- ssh hd-24
- mkdir /home/hadoop/zookeeper-3.4.8/data
- cd /home/hadoop/zookeeper-3.4.8/data
- vi myid
- 24
- exit
-
- ssh hd-25
- mkdir /home/hadoop/zookeeper-3.4.8/data
- cd /home/hadoop/zookeeper-3.4.8/data
- vi myid
- 25
- exit
3. 启停
Shell代码

- cd /home/hadoop/zookeeper-3.4.8/bin
- ./zkServer.sh start
HBase部署
一、 配置hbase-site.xml
Xml代码

- <configuration>
- <property>
- <name>hbase.rootdir</name>
- <value>hdfs://hd-23:6000/hbase</value>
- </property>
-
- <property>
- <name>hbase.cluster.distributed</name>
- <value>true</value>
- </property>
-
- <property>
- <name>hbase.zookeeper.quorum</name>
- <value>hd-23,hd-24,hd-25</value>
- </property>
-
- <property>
- <name>hbase.zookeeper.property.dataDir</name>
- <value>/home/hadoop/zookeeper-3.4.8/data</value>
- </property>
- </configuration>
二、配置regionservers
Shell代码

- vi regionservers
- hd-23
- hd-24
三、 scp发送至其余机器
> 具体方式参见第一章第9节
四、 启停hbase
==启动hbase以前须先启动hdfs==
Shell代码

- start-hbase.sh
- stop-hbase.sh
五、 jps查看
Shell代码

- [hadoop@hd-23 bin]$ jps
- 12304 QuorumPeerMain
- 16208 ResourceManager
- 24592 Jps
- 22898 HMaster
- 15843 NameNode
- 23139 HRegionServer
- 16042 SecondaryNameNode
-
- [root@hd-24 home]# jps
- 14512 HRegionServer
- 12082 QuorumPeerMain
- 15276 Jps
- 12924 DataNode
- 13036 NodeManager
六、 浏览器查看
http://hd-23:16030/
结语
总结
经过以上步骤快速搭建了hadoop环境,在此期间,只有进行SSH免密登陆时须要登陆其余两台机器进行添加公钥文件,其他均经过一个SSH客户端 窗口搞定(其实免密登陆也能够)。linux发行版本为centos7,若是使用centos 6.x的版本,修改主机名称略有不一样(`etc/sysconfig/network`,`hosts`,`reboot`)。
> - 猜测
> 搭建此环境的目的有两点:
> 一、 提供一个hadoop测试环境。
> 二、 为后续采用docker进行快速部署作预研。经过以上搭建过程可知,除了zookeeper的dataDir目录中myid文件内容不一样以外,其他的内容 均相同,而myid的内容能够经过读取zoo.cfg文件获取,故若是此时要作多机docker集群的话,只要解决了多机docker容器能互相访问(同 个局域网),就能够采用同一个镜像进行快速部署。而使多机docker的容器可以访问,能够采用open vSwitch搭建一个局域网,这个也是下个实验的目标。