共计 5805 个字符,预计需要花费 15 分钟才能阅读完成。
1.Hadoop2.x 概述
hadoop2中 NameNode 可以有多个(目前只支持 2 个)。每一个都有相同的职能。一个是 active 状态的,一个是 standby 状态的。当集群运行时,只有 active 状态的 NameNode 是正常工作的,standby状态的 NameNode 是处于待命状态的,时刻同步 active 状态 NameNode 的数据。一旦 active 状态的 NameNode 不能工作,standby状态的 NameNode 就可以转变为 active 状态的,就可以继续工作了。
2个 NameNode 的数据其实是实时共享的。新 HDFS 采用了一种共享机制,Quorum Journal Node(JournalNode)集群或者 Network File System(NFS)进行共享。NFS 是操作系统层面的,JournalNode是 hadoop 层面的,我们这里使用 JournalNode 集群进行数据共享(这也是主流的做法)。JournalNode的架构图如下:
两个 NameNode 为了数据同步,会通过一组称作 JournalNodes 的独立进程进行相互通信。当 active 状态的 NameNode 的命名空间有任何修改时,会告知大部分的 JournalNodes 进程。standby状态的 NameNode 有能力读取 JNs 中的变更信息,并且一直监控 edit log 的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
对于 HA 集群而言,确保同一时刻只有一个 NameNode 处于 active 状态是至关重要的。否则,两个 NameNode 的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,这就需要利用使用 ZooKeeper 了。首先 HDFS 集群中的两个 NameNode 都在 ZooKeeper 中注册,当 active 状态的 NameNode 出故障时,ZooKeeper能检测到这种情况,它就会自动把 standby 状态的 NameNode 切换为 active 状态。
Hadoop 安装分为三种方式,分别为单机、伪分布式、完全分布式,安装过程不难,在此主要详细叙述完全分布式的安装配置过程,毕竟生产环境都使用的完全分布式,前两者作为学习和研究使用。按照下述步骤一步一步配置一定可以正确的安装 Hadoop 分布式集群环境。
2、搭建
2.1 网络环境
No. | Host Name | IP Address | Node Type | User Name |
1 | Maser | 192.168.1.106 | Name Node | hadoop/root |
2 | Slave1 | 192.168.1.107 | Data Node | hadoop/root |
3 | Slave2 | 192.168.1.108 | Data Node | hadoop/root |
2.2、软硬件环境
CentOS 7.3
Java-1.8.0-openjdk
Hadoop 2.8.1
2.3、环境搭建
All nodes are disabled SELinux and firewalld
All nodes can ping with each other
All nodes have same hadoop directory structure and a same user account
Create a hadoop user, home directory is /home/hadoop, add into root group.
hadoop directory is /usr/local/hadoop, directory owner is hadoop
Master node and slave node can SSH with no password publick key authentication
All nodes have same /etc/hosts, add master node and slave node record line
SSH采用了公钥加密。过程如下:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
3、安装配置Java
3.1、安装 Java
安装 JDK 以及配置环境变量,需要以 “root” 的身份进行
# yum search jdk
# yum -y install java-1.8.0-openjdk*
3.2、配置 java 环境
新建配置文件etc/profile/java.sh
export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${JRE_HOME}/lib
export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin: HADOOPHOME/bin: {HADOOP_HOME}/sbin
3.3、验证
# java -version
# javac -version
4、安装配置 hadoop
4.1 安装
# cd /usr/local/src
# wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.1/hadoop-2.8.1.tar.gz
# tar -vxzf hadoop-2.8.1
# mv hadoop-2.8.1 ../hadoop
# chown -R hadoop:hadoop hadoop
4.2 配置 hadoop 环境
/etc/profile.d/java
4.3.2 创建 hadoop 子目录
# cd /usr/local/hadoop
# mkdir tmp hdfs
# cd hdfs
# mkdir name tmp data
4.3 hadoop 配置文件
进入到 $HADOOP_HOME/etc/hadoop 目录修改配置文件,配置项可参考文档http://hadoop.apache.org/docs/r2.8.0/
4.3.1 hadoop-env.sh
验证
4.3.2 core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
<final>true</final>
<!–(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹)–>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<!– hdfs://Master.Hadoop:22–>
<final>true</final>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
4.3.3 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master.hadoop:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
4.3.4 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4.3.5 yarn-site.xml
<configuration>
<!– Site specific YARN configuration properties –>
<property>
<name>yarn.resourcemanager.address</name>
<value>Master.Hadoop:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master.Hadoop:18030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Master.Hadoop:18088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Master.Hadoop:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Master.Hadoop:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
4.3.6 /usr/local/hadoop/etc/hadoop/masters 文件
/usr/local/hadoop/etc/hadoop/slaves
4.4 Slave node 上 java/hadoop 安装与配置
4.4.1 java/openjdk 安装同 master node
在 master node 上
scp /etc/profile.d/java.sh slave1:/etc/profile.d
scp /etc/profile.d/java.sh slave2:/etc/profile.d
4.4.2 Hadoop安装
在 master node 上
scp -r /usr/local/hadoop slave1:/usr/local
scp -r /usr/local/hadoop slave1:/usr/local
4.4.3 改变权限
chown -R hadoop:hadoop /usr/lib/jvm/java-1.8.0-openjdk-*
chown -R hadoop:hadoop /usr/local/hadoop
5、测试、验证
5.1
$ hadoop namenode -format
$ start-all .sh
$ ps -ef |grep hadoop
$ jps
master (master)
slave1 (Secondary master)
slave2
5.2 通过网页查看集群
在本地访问HDFS WebUI: http://8088:50070
YARN WebUI: http://master:8088
5.3 向 hadoop 集群系统提交第一个 mapreduce 任务(wordcount)
5.3.1 cd /home/hadoop
$ cat >>test.txt<<EOF
Hello World
Hello World
Hello World
Hello World
5.3.2 进入本地 hadoop 目录(/usr/local/hadoop)
$ hdfs dfs -mkdir -p /data/input在虚拟分布式文件系统上创建一个测试目录/data/input
$ hdfs dfs -put test.txt /data/input 将当前目录下的 README.txt 文件复制到虚拟分布式文件系统中
$ hdfs dfs-ls /data/input 查看文件系统中是否存在我们所复制的文件
5.3.3 运行如下命令向 hadoop 提交单词统计任务
进入 jar 文件目录,执行下面的指令。
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar \
wordcount \
/data/input /data/output/result
查看 result,结果在result 下面的 part-r-00000 中
更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-09/146864.htm