Hadoop学习平台的搭建
来源:互联网 发布:权力的游戏cp知乎 编辑:程序博客网 时间:2024/06/05 01:05
伪分布式
1.安装虚拟机
2.安装CentOS6.4-i386
3.修改主机名
# su root # vi /etc/sysconfig/network 本主机名设置为:vitamin07
4.修改ip
设置虚拟机的网络连接方式--参考文档:《虚拟机配置》来实现 1)Hostonly,将windos上的虚拟网卡改成与linux上的网卡在同一网段,将虚拟机上的Vmnet1 ip设置和你的虚拟机在同一个网段 ,但ip不相同。
4.1非克隆机,将以下内容更新到ifcfg-eth0中
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO="static" ...... IPADDR="192.168.8.201" NETMASK="255.255.255.0" GATWAY="192.168.8.1" DNS1="8.8.8.8" DNS2="8.8.4.4"
4.2克隆机
So here’s how we fix it: Remove the kernel’s networking interface rules file so that it can be regenerated # rm -f /etc/udev/rules.d/70-persistent-net.rules Restart the VM # reboot UPDATE your interface configuration file # more /etc/udev/rules.d/70-persistent-net.rules # vi /etc/sysconfig/network-scripts/ifcfg-eth0 Remove the MACADDR entry or update it to the new MACADDR for the interface (listed in this file: /etc/udev/rules.d/70-persistent-net.rules). Remove the UUID entry Uapdate IPADDR="192.168.8.xxx"--新地址 Save and exit the file Restart the networking service # service network restart
5.修改主机名和ip映射关系
# vi /etc/hosts
6.关闭防火墙–参考文档:《虚拟机配置》
查看防火墙状态 # service iptables status命令关闭防火墙(重新启动虚拟机后防火墙依然是开着的) # service iptables stop查看在哪种状态下 防火墙会是开的 还是关的 # chkconfig iptables --list启动方式: 0---关机 6--不停重启 1---单用户模式 2--多用户模式但没有NFS 3--多用户模式 4---没有使用的 5---图形界面模式关闭防火墙: # chkconfig iptables off查看防火墙状态 # chkconfig iptables --list
7.ssh免登录–参考文档:《设置ssh免密码登录》,其中有讲免密码登录的原理
生成一对密码 注: 若是克隆机则需要把.ssh/目录下的文件删除 root用户在 /.ssh下 非root用户 /home/model/.ssh/下
# sudo apt-get install openssh-server #rm authorized_keys id_rsa id_rsa.pub known_hosts # ssh-keygen -t rsa 四个回车后 # cd /root/.ssh or # cd /home/model/.ssh/ # ls # cp id_rsa.pub authorized_keys
8.安装jdk1.7–参考文档:《安装JDK》
8.1官网获取jdk1.7
[官网获取jdk1.7](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html) [官网](http://www.oracle.com/technetwork/java/javase/)
8.2解压jdk安装包
# mkdir /usr/local/java# mkdir /usr/local/java/jdk# tar -zxvf jdk安装包 -C /usr/local/java/jdk/
8.3添加环境变量,在profile中添加以下内容
# vi /etc/profile export JAVA_HOME=/usr/local/java/jdk/jdk1.7 export PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME=/usr/lib/jvm/jdk1.7 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH export JAVA_HOME=/home/vitamin/software/jdk1.7.0_79 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
8.4刷新配置
# source /etc/profile
9.安装hadoop-2.2.0
9.1下载和解压hadoop(注意hadoop版本要和jdk匹配)
[下载链接](http://archive.apache.org/dist/hadoop/core/)新建文件夹: # mkdir /bigdata解压文件夹: # tar -zxvf hadoop安装包 -C /bigdata/***若解压后的文件所属用户不是root,则要进行以下步骤--参考网址: [网址](http://blog.chinaunix.net/uid-24612962-id-3759228.html) 递归修改一个目录及其目录下所有文件的所有者:
# chown -R 用户名 文件目录名 # chgrp -R 用户名 文件目录名
***hadoop2.2.0目录说明: hadoop-2.2.0/bin 可执行的脚本 /include 存放本地库的头文件 /sbin 启动 停止相关的文件 /etc hadoop配置文件 /lib 本地的一些库 /share 依赖的java /share /hadoop/ /hdfs /yarn
9.2搭建伪分布式,修改目录(/bigdata/hadoop-2.2.0/etc/hadoop)下的配置文件–注意:主机名的修改,本文档中vitamin07要改为自己的主机名或者localhost
1)修改环境变量,在hadoop-env.sh添加以下内容
# cd /bigdata/hadoop-2.2.0/etc/hadoop # vi hadoop-env.sh 找到 export JAVA_HOME=......那行 更新为: export JAVA_HOME=/usr/local/java/jdk/jdk1.7 保存退出。
2)修改 core-site.xml # vi core-site.xml
<configuration> <!--指定hdfs的namenode地址--> <property> <name>fs.defaultFS</name> <value>hdfs://vitamin07:9000</value> <description>the adress of namenode</description> </property> <!--指定hadoop运行时产生文件的存放目录(linux上具体某个目录)--> <property> <name>hadoop.tmp.dir</name> <value>/bigdata/hadoop-2.2.0/tmp</value> <description>the filespace where the producing file will be store </description> </property> </configuration>
3)修改 hdfs-site.xml # vi hdfs-site.xml
<configuration> <!--指定hdfs的存储文件的副本数--> <property> <name>dfs.replication</name> <value>1</value> <description></description> </property> </configuration>
4)修改 mapred-site.xml.example 为:mapred-site.xml # mv mapred-site.xml.template mapred-site.xml
# vi mapred-site.xml <configuration> <!--设置hadoop的MapReduce运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <description>mapreduce will run in yarn</description> </property> </configuration>
5)修改 yarn-site.xml # vi yarn-site.xml
<configuration> <!-- 指定nameManager获取数据的方式是shuflle方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <description></description> </property> <!-- 指定yarn的管着者resourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>vitamin07</value> <description></description> </property> </configuration>
6)添加hadoop环境变量,在profile中更新以下内容
# vi /etc/profile export JAVA_HOME=/usr/local/java/jdk目录 export HADOOP_HOME=/bigdata/hadoop-2.2.0 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin # source /etc/profile
7)格式化文件系统
# Hdfs namenode -format 格式化文件系统
8)启动hdfs和yarn
sbin目录下: # ./start-dfs.sh # ./start-yarn.sh
9.2测试hdfs
首先向hdfs上传一个文件
# hadoop fs -put /etc/profile /profile # hadoop fs -ls /
9.3测试MapReduce
# hadoop jar /bigdata/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /profile /out
多节点集群
hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。
/**********本次所用软件为:hadoop-2.2.0、CentOS6.4-i386、zookeeper-3.4.5、jdk-7u79-linux-i586***************************/
注意:apache提供的hadoop-2.2.0的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,
所以如果在64位的操作上安装hadoop-2.2.0就需要重新在64操作系统上重新编译
1.修改Linux主机名
2.修改IP
3.修改主机名和IP的映射关系
######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等)/etc/hosts里面要配置的是内网IP地址和主机名的映射关系
4.关闭防火墙
5.ssh免登陆 (可先不做此步)
6.安装JDK,配置环境变量等
集群规划:
主机名 IP 安装的软件 运行的进程
vitamin01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController
vitamin02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController
vitamin03 192.168.1.203 jdk、hadoop ResourceManager
vitamin04 192.168.1.204 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
vitamin05 192.168.1.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
vitamin06 192.168.1.206 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
说明:
在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
7.集群安装步骤:
1.安装配置zooekeeper集群
1.1解压
mkdir /bigdata tar -zxvf zookeeper-3.4.5.tar.gz -C /bigdata/
1.2修改配置
cd /bigdata/zookeeper-3.4.5/conf/ cp zoo_sample.cfg zoo.cfg vim zoo.cfg ***修改:dataDir=/bigdata/zookeeper-3.4.5/tmp 在最后添加: server.1=vitamin04:2888:3888 server.2=vitamin05:2888:3888 server.3=vitamin06:2888:3888 保存退出 然后创建一个tmp文件夹 mkdir /bigdata/zookeeper-3.4.5/tmp 再创建一个空文件 touch /bigdata/zookeeper-3.4.5/tmp/myid 最后向该文件写入ID echo 1 > /bigdata/zookeeper-3.4.5/tmp/myid
1.3将配置好的zookeeper拷贝到其他节点(首先分别在vitamin05、vitamin06根目录下创建一个bigdata目录:mkdir /bigdata)
scp -r /bigdata/zookeeper-3.4.5/ vitamin05:/bigdata/ scp -r /bigdata/zookeeper-3.4.5/ vitamin06:/bigdata/ 注意:修改vitamin05、vitamin06对应/bigdata/zookeeper-3.4.5/tmp/myid内容 vitamin05: echo 2 > /bigdata/zookeeper-3.4.5/tmp/myid vitamin06: echo 3 > /bigdata/zookeeper-3.4.5/tmp/myid
2.安装配置hadoop集群
2.1解压
mkdir /bigdata tar -zxvf hadoop-2.2.0.tar.gz -C /bigdata/
2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
#将hadoop添加到环境变量中 vim /etc/profile export JAVA_HOME=/usr/java/jdk1.7.0_55 export HADOOP_HOME=/bigdata/hadoop-2.2.0 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin #hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下 cd /bigdata/hadoop-2.2.0/etc/hadoop
2.2.1修改hadood-env.sh # vi hadoop-env.sh
export JAVA_HOME=/usr/local/java/jdk/jdk1.7
2.2.2修改core-site.xml # vi core-site.xml
<configuration> <!-- 指定hdfs的nameservice为ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop临时目录 --> <property> <name>hadoop.tmp.dir</name> <value>/bigdata/hadoop-2.2.0/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>vitamin04:2181,vitamin05:2181,vitamin06:2181</value> </property> </configuration>
2.2.3修改hdfs-site.xml # vi hdfs-site.xml
<configuration> <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <!-- ns1下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>vitamin01:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>vitamin01:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>vitamin02:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>vitamin02:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://vitamin04:8485;vitamin05:8485;vitamin06:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/bigdata/hadoop-2.2.0/journal</value> </property> <!-- 开启NameNode失败自动切换 --> <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> <!-- 使用sshfence隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration>
2.2.4修改mapred-site.xml # cp mapred-site.xml.template mapred-site.xml # vi mapred-site.xml
<configuration> <!-- 指定mr框架为yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
2.2.5修改yarn-site.xml # vi yarn-site.xml
<configuration> <!-- 指定resourcemanager地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>vitamin03</value> </property> <!-- 指定nodemanager启动时加载server的方式为shuffle server --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
2.2.6修改slaves(slaves是指定子节点的位置,因为要在vitamin01上启动HDFS、在vitamin03启动yarn,所以vitamin01上的slaves文件指定的是datanode的位置,vitamin03上的slaves文件指定的是nodemanager的位置)
# cd /bigdata/hadoop-2.2.0/etc/hadoop vitamin04 vitamin05 vitamin06
2.2.7配置免密码登陆
#首先要配置vitamin01到vitamin02、vitamin03、vitamin04、vitamin05、vitamin06的免密码登陆 #在vitamin01上生产一对钥匙 ssh-keygen -t rsa #将公钥拷贝到其他节点,包括自己 ssh-coyp-id vitamin01 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin01 ssh-coyp-id vitamin02 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin02 ssh-coyp-id vitamin03 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin03 ssh-coyp-id vitamin04 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin04 ssh-coyp-id vitamin05 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin05 ssh-coyp-id vitamin06 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin06 非root用户 ssh-coyp-id vitamin12 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub model@vitamin12 #配置vitamin03到vitamin04、vitamin05、vitamin06的免密码登陆 #在vitamin03上生产一对钥匙 ssh-keygen -t rsa #将公钥拷贝到其他节点 ssh-coyp-id vitamin03 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin03 ssh-coyp-id vitamin04 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin04 ssh-coyp-id vitamin05 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin05 ssh-coyp-id vitamin06 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin06 #注意:两个namenode之间要配置ssh免密码登陆,别忘了配置vitamin02到vitamin01的免登陆 在vitamin02上生产一对钥匙 ssh-keygen -t rsa ssh-coyp-id -i vitamin01 # /usr/bin/ssh-copy-id -i ~/.ssh/id_rsa.pub root@vitamin01
2.4将配置好的hadoop拷贝到其他节点
scp -r /bigdata/ vitamin02:/ scp -r /bigdata/ vitamin03:/ scp -r /bigdata/hadoop-2.2.0/ root@vitamin04:/bigdata/ scp -r /bigdata/hadoop-2.2.0/ root@vitamin05:/bigdata/ scp -r /bigdata/hadoop-2.2.0/ root@vitamin06:/bigdata/ ###注意:严格按照下面的步骤
2.5启动zookeeper集群(分别在vitamin04、vitamin05、vitamin06上启动zk)
cd /bigdata/zookeeper-3.4.5/bin/ ./zkServer.sh start #查看状态:一个leader,两个follower ./zkServer.sh status
2.6启动journalnode(在vitamin01上启动所有journalnode,注意:是调用的hadoop-daemons.sh这个脚本,注意是复数s的那个脚本)
cd /bigdata/hadoop-2.2.0 sbin/hadoop-daemons.sh start journalnode #运行jps命令检验,vitamin04、vitamin05、vitamin06上多了JournalNode进程
2.7格式化HDFS
#在vitamin01上执行命令: hdfs namenode -format #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/bigdata/hadoop-2.2.0/tmp,然后将/bigdata/hadoop-2.2.0/tmp拷贝到vitamin02的/bigdata/hadoop-2.2.0/下。 scp -r tmp/ vitamin02:/bigdata/hadoop-2.2.0/
2.8格式化ZK(在vitamin01上执行即可)
hdfs zkfc -formatZK
2.9启动HDFS(在vitamin01上执行)
sbin/start-dfs.sh
2.10启动YARN(#####注意#####:是在vitamin03上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)
sbin/start-yarn.sh到此,hadoop2.2.0配置完毕,可以统计浏览器访问: http://192.168.8.201:50070 NameNode 'vitamin01:9000' (active) http://192.168.8.202:50070 NameNode 'vitamin02:9000' (standby)验证HDFS HA 首先向hdfs上传一个文件 hadoop fs -put /etc/profile /profile hadoop fs -ls / 然后再kill掉active的NameNode kill -9 <pid of NN> 通过浏览器访问:http://192.168.8.202:50070 NameNode 'vitamin02:9000' (active) 这个时候vitamin02上的NameNode变成了active 在执行命令: hadoop fs -ls / -rw-r--r-- 3 root supergroup 1926 2014-02-06 15:36 /profile 刚才上传的文件依然存在!!! 手动启动那个挂掉的NameNode sbin/hadoop-daemon.sh start namenode 通过浏览器访问:http://192.168.8.201:50070 NameNode 'vitamin01:9000' (standby)验证YARN: 运行一下hadoop提供的demo中的WordCount程序: hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /profile /outOK,大功告成!!!Secondary NameNode
- Hadoop学习平台的搭建
- Hadoop平台的搭建
- hadoop平台的搭建
- Hadoop平台的搭建
- 搭建基于hadoop平台的机器学习工具Mahout
- hadoop平台搭建的经验总结
- hadoop学习【5】——搭建伪分布式hadoop平台
- hadoop伪分布平台的搭建
- 三节点hadoop平台的搭建
- hadoop平台搭建
- hadoop 平台搭建
- hadoop平台搭建详解
- linux搭建hadoop平台
- hadoop平台安装搭建
- Hadoop/Spark平台搭建
- hadoop平台搭建
- Ubuntu 搭建hadoop平台
- Hadoop平台搭建
- mysql char/varchar的区别
- 触发器,web自适应,myeclipse编码,perl,Unix,PHP大致了解
- linux sed命令详解
- 初学者如何查阅自然语言处理(NLP)领域学术资料
- CSS的三大特性总结
- Hadoop学习平台的搭建
- Ubuntu16.04+1080下配置Tensorflow
- 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用
- HBase的优化
- 多个window.onload的使用
- android 中svg
- 清除浮动(float)的几种方法
- Nginx安装
- 云计算的架构