大数据平台开发作业
前期准备
准备好四台安装了centos系统的虚拟机,并在其中一台完成伪分布式的安装
高可用安装
HA安装方案
分发jdk到node02,ndoe03,node04上
scp jdk-7u67-linux-x64.rpm node02:`pwd`
scp jdk-7u67-linux-x64.rpm node03:`pwd`
scp jdk-7u67-linux-x64.rpm node04:`pwd
并在Xshell的全部会话栏里一起ll,看jdk是否发送成功。
给node02,node03,node04分别安装jdk
分别在node02,node03,node04上执行rpm安装命令。
rpm -i jdk-7u67-linux-x64.rpm
在node01上cd /etc,在此目录下把profile文件分发到node02、03、04上。
在node01上cd /etc,在此目录下把profile文件分发到node02、03、04上。
装机之前的配置文件检查
1.cat /etc/sysconfig/network
查看HOSTNAME是否正确
2.cat /etc/hosts
查看IP映射是否正确,若不正确,可以改文件,也可以把node01上的用scp分发过去.。
3.cat /etc/sysconfig/selinux
检查SELINUX的值是否是disabled
4.service iptables status
查看防火墙是否关闭
NN与其他三台机子的免秘钥设置
1.在家目录下 ll –a看下有无.ssh文件,如果没有就ssh loalhost一下,完成后记得exit退出。
2.cd /.ssh,并ll查看一下
3.把node01的公钥发给其他三台机子
scp id_dsa.pub node02:`pwd`/node01.pub
scp id_dsa.pub node03:`pwd`/node01.pub
scp id_dsa.pub node04:`pwd`/node01.pub
4.将node02的.ssh目录下的node01.pub追加到authorized_keys
cat node01.pub >> authorized_keys
5.其他两台机子同上,并检查在node01上能否ssh连接到其他三台机子
两个NN间互相免密钥
在node02上:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh localhost验证一下
分发到node01上:
scp id_dsa.pub node01:`pwd`/node02.pub
在node01的.ssh目录下,
cat node02.pub >> authorized_key
在node02上ssh node01验证一下可否免密钥登录
修改namenode的一些配置信息
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/gf/hadoop/ha/jn</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
vi core-site.xml
<!– 集群名称mycluster-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!– zookeeper布署的位置-->
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
vi slaves
node02
node03
node04
安装hadoop
cd /opt,将其下的gf目录分发到node02、03、04
scp –r ldy/ node02:`pwd`
scp –r ldy/ node03:`pwd`
scp –r ldy/ node04:`pwd`
将hdfs-site.xml和core-site.xml分发到node02、03、04
scp hdfs-site.xml core-site.xml node02:`pwd`
scp hdfs-site.xml core-site.xml node03:`pwd`
scp hdfs-site.xml core-site.xml node04:`pwd`
安装zookeeper
解压安装zookeeper
tar xf zookeeper-3.4.6.tar.gz -C /opt/gf
修改zookeeper的配置文件
cd /opt/gf/zookeeper-3.4.6/conf
给zoo_sample.cfg改名
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
改dataDir=/var/ldy/zk
并在末尾追加
server.1=node04:2888:3888
server.2=node05:2888:3888
server.3=node06:2888:3888
其中2888主从通信端口,3888是当主挂断后进行选举机制的端口
把zookeeper分发到其他节点
scp -r zookeeper-3.4.6/ node05:`pwd`
scp -r zookeeper-3.4.6/ node06:`pwd`
并用ll /opt/gf检查下看分发成功没
给每台机子创建刚配置文件里的路径
mkdir -p /var/gf/zk
对node02来说
echo 1 > /var/gf/zk/myid
cat /var/gf/zk/myid
对node03来说
echo 2 > /var/gf/zk/myid
cat /var/gf/zk/myid
对node04来说
echo 3 > /var/gf/zk/myid
cat /var/gf/zk/myid
在/etc/profile里面配置
export ZOOKEEPER_HOME=/opt/gf/zookeeper-3.4.6
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
然后在把/etc/profile分发到其他node03、node04
scp /etc/profile node03:/etc
scp /etc/profile node04:/etc
然后在node02,node03,node04中source /etc/profie
验证source这句是否完成,输入zkCli.s,按Tab可以把名字补全zkCli.sh
启动zookeeper
全部会话:zkServer.sh start
接着用zkServer.sh status查看每个zookeeper节点的状态
如果启动不起来,请把/etc/profile里的JAVA_HOME改成绝对路径。
启动journalnode
在01、02、03三台机子上分别把journalnode启动起来
hadoop-daemon.sh start journalnode
用jps检查下进程启起来了没
格式化任一namenode
随意挑一台namenode上执行hdfs namenode –format
另一台namenode不用执行,否则clusterID变了,找不到集群了。
然后,启动刚刚格式化的那太namenode:
hadoop-daemon.sh start namenode
给另一namenode同步数据
在另外一台namenode上执行
dfs namenode -bootstrapStandby
格式化zkfc
hdfs zkfc -formatZK
在node04上执行zkCli.sh打开zookeeper客户端看hadoop-ha是否打开
启动hdfs集群
start-dfs.sh
为MapReduce
把mapred-site.xml.template留个备份,并且改下名字
cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml里添加如下property
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
在yarn-site.xml里添加如下property
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node04</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
把mapred-site.xml和yarn-site.xml 分发到node02、03、04
scp mapred-site.xml yarn-site.xml node04:`pwd`
scp mapred-site.xml yarn-site.xml node05:`pwd`
scp mapred-site.xml yarn-site.xml node06:`pwd`
由于node03和node04都是resourcemanager,所以它俩应该相互免密钥
node03上免密钥登录node04:
在node03的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f ./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
用ssh localhost验证看是否需要密码,别忘了exit
将node03 的公钥分发到node04
scp id_dsa.pub node06:`pwd`/node05.pub
在node04的.ssh目录下,追加node03.pub
cat node05.pub >> authorized_keys
在node03上ssh node04,看是否免密钥。
node04上免密钥登录node03同理。
启动所有进程,并检查是否有遗漏
运行wordcount测试
cd /opt/ldy/hadoop-2.6.5/share/hadoop/mapreduce
在hdfs里建立输入目录和输出目录
hdfs dfs -mkdir -p /data/in
hdfs dfs -mkdir -p /data/out
将要统计数据的文件上传到输入目录并查看
hdfs dfs -put ~/500miles.txt /data/in
hdfs dfs -ls /data/in
运行wordcount(注意:此时的/data/out必须是空目录)
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result
查看运行结果
hdfs dfs -ls /data/out/result
hdfs dfs -cat /data/out/result/part-r-00000
关闭集群
#node01
stop-dfs.sh
#node01
stop-yarn.sh #(停止nodemanager)
#node03,node04
yarn-daemon.sh stop resourcemanager
#Node02、03、04
zkServer.sh stop
在windows下配置hadoop的环境
更改环境变量,增加HADOOP_HOME
并在path中添加HADOOP_HOME中添加路径
然后再新建一个变量HADOOP_USER_NAME
安装eclipse-mars,并调出Map/Reduce Locations
新建一个hadoop localtion(Host:哪个namenode是active,就填哪个;port:8020)
在eclipse里导入自己建一个包库,并把jar包导入刚建的包库
利用xftp把hdfs-site.xml,core-site.xml等几个xml放到project的src目录。