环境ubuntu16.04

 

这里有4台虚拟机ABC

A的IP 192.168.2.103

B的IP 192.168.2.104

C的IP 192.168.2.106

D的IP 192.168.2.107

 

节点配置情况如下

 

 

NN

DN

ZK

ZKFC

JN

RM

NM

Node1

Y

 

Y

 

Y

 

Node2

Y

Y

Y

Y

Y

 

Y

Node3

 

Y

Y

 

Y

 

Y

Node4

 

Y

 

 

Y

 

Y

 

ZKFC必须和NN在同一个机器上。DM最好和DN在同一个机器上。

 

1.前期准备(每台机器)

 

虚拟机配置固定IP

安装SSH

安装集群版Zookeeper

2.修改ABCD虚拟机的hostname

vi /etc/hostname

 

A的hostname改为 node1

B的hostname改为 node2

C的hostname改为 node3

D的hostname改为 node4

 

3.修改虚拟机的Hosts

vi /etc/hosts

加入以下内容(四台加一样的)

 

192.168.2.103    node1

192.168.2.104    node2

192.168.2.106    node3

192.168.2.107    node4

 

4.查看每台机器是否能相互ping通

 

5. 创建用户和用户组(四台机器都一样的操作)

 

创建用户组 addgroup hadoop

创建用户 adduser -ingroup hadoop hadoop

 

6.给hadoop用户添加权限(四台机器都一样的操作)

vi /etc/sudoers

在root    ALL=(ALL:ALL) ALL下面添加一行

hadoop    ALL=(ALL:ALL) ALL

 

7.四台机器以hadoop用户登录

su hadoop

 

8.安装JAVA(四台机器都一样的操作)

安装步骤:Linux安装JAVA

 

9.配置SSH让各节点之间实现相互免密码登录

如果没有请看配置步骤:SSH免密码登录

 

10.hadoop安装(如无特别说明,四台机器都一样的操作)

 

创建路径

mkdir /app/hadoop

cd /app/hadoop

下载(直接在/app/hadoop里面下载)

wget http://mirror.bit.edu.cn/apache/hadoop/common/stable/hadoop-2.9.0.tar.gz

解压

tar -zxvf hadoop-2.9.0.tar.gz

创建文件夹

mkdir /app/hadoop/dfs

mkdir /app/hadoop/dfs/name

mkdir /app/hadoop/dfs/data

mkdir /app/hadoop/tmp

 

修改配置文件 hadoop-env.sh

vi /app/hadoop/hadoop-2.9.0/etc/hadoop/hadoop-env.sh

 

修改JAVA_HOME的值

export JAVA_HOME=/app/java/jdk1.8.0_101

 

修改配置文件slaves 配置datanode

 

vi /app/hadoop/hadoop-2.9.0/etc/hadoop/slaves

将内容改为

node2

node3

node4

 

修改配置文件core-site.xml

vi /app/hadoop/hadoop-2.9.0/etc/hadoop/core-site.xml

<configuration>
    <!-- namenode的入口 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoopcluster</value>   
    </property>
    <!-- 配置HDFS的工作目录(元数据加载在这里) -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/app/hadoop/tmp</value>
    </property>  
    <!-- 配置zookeeper的集群 -->
    <property>
       <name>ha.zookeeper.quorum</name>
       <value>node1:2181,node2:2181,node3:2181</value>
    </property>
</configuration>

 

修改配置文件hdfs-site.xml

创建JournalNode在本地磁盘存放数据的位置

mkdir /app/hadoop/journaldata

vi /app/hadoop/hadoop-2.9.0/etc/hadoop/hdfs-site.xml       

<configuration>
	<!--指定hdfs的nameservice,需要和core-site.xml中的保持一致 -->
	<property>
	<name>dfs.nameservices</name>
	<value>hadoopcluster</value>
	</property>

	<!-- 配置所有的NameNode的名字,分别是nn1,nn2 -->
	<property>
	<name>dfs.ha.namenodes.hadoopcluster</name>
	<value>nn1,nn2</value>
	</property>

	<!-- nn1的RPC协议的IP和端口 -->
	<property>
	<name>dfs.namenode.rpc-address.hadoopcluster.nn1</name>
	<value>node1:8020</value>
	</property>

	<!-- nn1的http通信地址 -->
	<property>
	<name>dfs.namenode.http-address.hadoopcluster.nn1</name>
	<value>node1:50070</value>
	</property>

	<!-- nn2的RPC协议的IP和端口 -->
	<property>
	<name>dfs.namenode.rpc-address.hadoopcluster.nn2</name>
	<value>node2:8020</value>
	</property>

	<!-- nn2的http通信地址 -->
	<property>
	<name>dfs.namenode.http-address.hadoopcluster.nn2</name>
	<value>node2:50070</value>
	</property>


	<!-- 配置NameNode的元数据在JournalNode上的存放位置 配置所有JournalNode的IP和端口 -->
	<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://node2:8485;node3:8485;node4:8485/hadoopcluster</value>
	</property>

	<!-- 配置JournalNode在本地磁盘存放数据的位置 -->
	<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/app/hadoop/journaldata</value>
	</property>

	<!-- 开启NameNode失败自动切换 -->
	<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
	</property>

	<!-- 配置失败自动切换实现方式 客户端使用这个类去找到active namenode-->
	<property>
	<name>dfs.client.failover.proxy.provider.hadoopcluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>

	<!-- 配置隔离机制方法-->
	<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
	</property>

	<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
	<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/root/.ssh/id_dsa.pub</value>
	</property>

	<!-- 配置sshfence隔离机制超时时间 -->
	<property>
	<name>dfs.ha.fencing.ssh.connect-timeout</name>
	<value>30000</value>
	</property>
</configuration>

 

修改配置文件mapred-site.xml

cd /app/hadoop/hadoop-2.9.0/etc/hadoop

scp mapred-site.xml.template mapred-site.xml

vi mapred-site.xml   

 <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

  <property>
          <name>mapreduce.jobhistory.address</name>
          <value>node1:10020</value>
  </property>

  <property>

          <name>mapreduce.jobhistory.webapp.address</name>
          <value>node1:19888</value>
  </property>

在windows中的eclipse运行提交到linux上的集群,需要添加一下配置

不然报错/bin/bash: line 0: fg: no job control

  <property>
    <name>mapreduce.app-submission.cross-platform</name>
    <value>true</value>
  </property>

<property>
    <name>mapreduce.application.classpath</name>
    <value>
        /app/hadoop/hadoop-2.9.0/etc/hadoop,
        /app/hadoop/hadoop-2.9.0/share/hadoop/common/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/common/lib/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/hdfs/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/hdfs/lib/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/lib/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/yarn/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/yarn/lib/*
    </value>
</property>    

修改配置文件yarn-site.xml

cd /app/hadoop/hadoop-2.9.0/etc/hadoop

vi yarn-site.xml

<configuration>
 
	<!-- Site specific YARN configuration properties -->
	<!-- 开启RM高可用 -->
	<property>
	  <name>yarn.resourcemanager.ha.enabled</name>
	  <value>true</value>
	</property>
	
	<!-- 指定RM的cluster id -->
	<property>
	  <name>yarn.resourcemanager.cluster-id</name>
	  <value>yrc</value>
	</property>
	
	<!-- 指定RM的名字 -->
	<property>
	  <name>yarn.resourcemanager.ha.rm-ids</name>
	  <value>rm1,rm2</value>
	</property>
	
	<!-- 分别指定RM的地址 -->
	<property>
	  <name>yarn.resourcemanager.hostname.rm1</name>
	  <value>node1</value>
	</property>
	<property>
	  <name>yarn.resourcemanager.hostname.rm2</name>
	  <value>node2</value>
	</property>
	
	<!-- 启用RM重启的功能-->
	<property>  
		<name>yarn.resourcemanager.recovery.enabled</name>  
		<value>true</value> 
		<description>启用RM重启的功能,默认为false</description>
	</property> 
	<property>  
		<name>yarn.resourcemanager.store.class</name>  
		<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> 
		<description>用于状态存储的类,采用ZK存储状态类</description>
	</property> 
	 
	<!-- 指定zk集群地址 -->
	<property>
	  <name>yarn.resourcemanager.zk-address</name>
	  <value>node1:2181,node2:2181,node3:2181</value>
	</property>
	
	<!-- 指定做中间数据调度的时候使用的是哪一种机制 -->
	<property>
	  <name>yarn.nodemanager.aux-services</name>
	  <value>mapreduce_shuffle</value>
	</property>
	
	<property>
		<name>yarn.resourcemanager.webapp.address.rm1</name>
		<value>node1:8088</value>
		<description>提供给web页面访问的地址,可以查看任务状况等信息</description>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address.rm2</name>
		<value>node2:8088</value>
		<description>提供给web页面访问的地址,可以查看任务状况等信息</description>
	</property>
	
	<!-- 配置通讯的地址和端口,有多少个RM就配置多少组property -->
			<!-- RM1-->
		<property>
			<name>yarn.resourcemanager.scheduler.address.rm1</name>
			<value>node1:8030</value>
		</property>
		<property>
			<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
			<value>node1:8031</value>
		</property>
		<property>
			<name>yarn.resourcemanager.address.rm1</name>
			<value>node1:8032</value>
		</property>
		<property>
			<name>yarn.resourcemanager.admin.address.rm1</name>
			<value>node1:8033</value>
		</property>
			<!-- RM2 -->
		<property>
			<name>yarn.resourcemanager.scheduler.address.rm2</name>
			<value>node2:8030</value>
		</property>
		<property>
			<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
			<value>node2:8031</value>
		</property>
		<property>
			<name>yarn.resourcemanager.address.rm2</name>
			<value>node2:8032</value>
		</property>
		<property>
			<name>yarn.resourcemanager.admin.address.rm2</name>
			<value>node2:8033</value>
		</property>
</configuration>

在windows中的eclipse运行提交到linux上的集群,需要添加一下配置

不然报错/bin/bash: line 0: fg: no job control

<property>
    <name>yarn.application.classpath</name>
    <value>
        /app/hadoop/hadoop-2.9.0/etc/hadoop,
        /app/hadoop/hadoop-2.9.0/share/hadoop/common/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/common/lib/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/hdfs/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/hdfs/lib/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/mapreduce/lib/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/yarn/*,
        /app/hadoop/hadoop-2.9.0/share/hadoop/yarn/lib/*
    </value>

</property>

配置环境变量

sudo vi /etc/profile

在文件末尾加上

export HADOOP_HOME=/app/hadoop/hadoop-2.9.0

export PATH=:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

 

使修改的环境变量生效

source /etc/profile

 

配置完成后

启动zookeeper集群,即在node1,node2,node3上启动:

cd /app/zookeeper/bin

./zkServer.sh start

启动journalnode,即在node2,node3,node4上启动:

cd /app/hadoop/hadoop-2.9.0/sbin

./hadoop-daemon.sh start journalnode

 

在任意一台有namenode的机器上格式化namenode(这里在node1上):

cd /app/hadoop/hadoop-2.9.0/bin

./hdfs namenode -format

启动这个已经格式化了的namenode(node1)

cd /app/hadoop/hadoop-2.9.0/sbin

./hadoop-daemon.sh start namenode

把这个namenode(node1)上的元数据文件拷贝到其他namenode(node2)上去:

没有格式化namenode(node2)的机器上执行:

cd /app/hadoop/hadoop-2.9.0/bin

./hdfs namenode -bootstrapStandby

在任意一台namedoe(node1)上格式化ZKFC

cd /app/hadoop/hadoop-2.9.0/bin

./hdfs zkfc -formatZK

 

停止HDFS所有服务

cd /app/hadoop/hadoop-2.9.0/sbin

./stop-dfs.sh

 

启动hadoop

(只在namenode(node1))

cd /app/hadoop/hadoop-2.9.0/sbin

./start-all.sh

 

四台机器输入jps查看是否正确启动

node1

node2

node3

node4

 

11.在hadoop集群运行任务(只用在namenode上面执行,即是node1)

在HDFS上创建路径

cd /app/hadoop/hadoop-2.9.0/bin

hdfs dfs -mkdir -p /data/input

 

将要计数的文件放到HDFS上

hdfs dfs -put ~/wordcount.txt /data/input

 

查看是否将文件放到了HDFS上

hdfs dfs -ls /data/input

 

运行单词统计任务

cd /app/hadoop/hadoop-2.9.0

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar wordcount /data/input /data/output/wordcount

 

查看结果

hdfs dfs -cat /data/output/wordcount/part-r-00000 

 

图形化信息界面用node1的IP

http://node1:50070

http://node2:50070

http://node1:8088

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐