Hadoop搭建简述

修改IP的文件

vim /etc/sysconfig/network-scripts/ifcfg-ens33
#修改之后的配置文件
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static           #staric表示静态ip,dhcp表示哦动态IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33                 #网卡设备名称
UUID=9738c15f-cc5b-4156-a387-f0c39ac5b3c8
DEVICE=ens33
ONBOOT=yes                 #开机启动此配置
IPADDR=192.168.40.201     #IP地址
PREFIX=24                  #子网掩码
GATEWAY=192.168.40.2      #网关
DNS1=119.29.29.29          #dns 1 (腾讯公用DNS)
DNS2=123.125.81.6          #dns 2(联通公用DNS)

修改完成后,执行如下命令重启网络服务,使得修改生效

service network restart

如果上述命令报错的话,请试试下面
nmcli c reload
上述命令都是报错或无反应,下面这个命令在实验时是成功的
nmcli c up XX(XX为对应的网卡名,一般为ens33或ens32)

修改hostname文件,将其内容改为要使用的主机名(改完之后重启reboot)

vim /etc/hostname

查看防火墙当前状态

firewall-cmd --state	或	systemctl status firewall.service

执行命令关闭防火墙(运行状态改变为not running)

systemctl stop firewalld.service

执行命令禁止防火墙开机启动

systemctl disable firewalld.service

执行命令开启防火墙

systemctl start firewalld.service

执行命令开机启动防火墙命令

systemctl enable firewalld.service

在CentOS中,目录"/opt"常用于第三方软件包和数据文件。

mkdir /opt/packages
mkdir /opt/programs

卸载现有的JDK

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
#rpm -qa:查询所安装的所有 rpm 软件包
#grep -i:忽略大小写
#xargs -n1:表示每次只传递一个参数
#rpm -e --nodeps:强制卸载软件

将jdk上传安装包到/opt/packages中 (此步需要xftp)
解压安装包

cd /opt/packages
tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/programs

打开并编辑配置文件

vim /etc/profile
export JAVA_HOME=/opt/programs/jdk1.8.0_144
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

使环境变量生效

source  /etc/profile

检验是否配置成功

java -version

配置主机IP映射 (3台都要做)

vim /etc/hosts
# 在最后写入如下内容
192.168.40.201 hadoop01
192.168.40.202 hadoop02
192.168.40.203 hadoop03

虚拟机克隆
改主机名,ip(改完之后重启reboot)

ssh免密
分别在3个节点中执行如下命令,生成密钥文件

ssh-keygen

然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

将公钥拷贝到要免密登录的目标机器上 (3台都要做)

ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03

(注意zookeeper的包的名字可能不一样,需要更换)
将zookeeper上传安装包到/opt/packages中 (此步需要xftp)
解压安装包

cd /opt/packages
tar -zxvf zookeeper-3.4.5.tar.gz -C /opt/programs/

进入Zookeeper安装目录

cd /opt/programs/zookeeper-3.4.5/

在该目录下分别创建文件夹"data"和"logs

mkdir data
mkdir logs

进入"data"文件夹

cd data

执行命令,新建一个名为"myid"的文件,并写入id号"1"

echo '1'>myid

进入Zookeeper安装目录下的"conf"文件夹

cd /opt/programs/zookeeper-3.4.5/conf

将zoo_sample.cfg复制一份并重名为zoo.cfg

cp zoo_sample.cfg zoo.cfg

修改zoo.cfg文件

vim zoo.cfg
# dataDir修改为如下所示
dataDir=/opt/programs/zookeeper-3.4.5/data
# 在最后面加上几行内容
dataLogDir=/opt/programs/zookeeper-3.4.5/logs
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888

将整个hadoop01节点的整个Zookeeper安装目录远程复制到hadoop02和hadoop03节点

scp -r /opt/programs/zookeeper-3.4.5 root@hadoop02:/opt/programs/
scp -r /opt/programs/zookeeper-3.4.5 root@hadoop03:/opt/programs/

拷贝完成后需要改"myid"的文件,Hadoop02中应为2,Hadoop03中应为3

配置Zookeeper环境变量(3台都要做)

vim /etc/profile
# 在文件末尾加上以下内容
export ZOOKEEPER_HOME=/opt/programs/zookeeper-3.4.5
export ZOOKEEPER_PATH=${ZOOKEEPER_HOME}/bin
export PATH=$PATH:${JAVA_PATH}:${ZOOKEEPER_PATH}

之后刷新profile文件使得修改生效

source /etc/profile

在三个节点分别执行以下命令启动Zookeeper集群(因为配置了环境变量,所以可以在任何目录下执行)

zkServer.sh start

若出现如下信息,则说明启动成功

ZooKeeper JMX enabled by default
Using config: /opt/programs/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

在三个节点上分别执行以下命令,查看Zookeeper集群状态

zkServer.sh status

此步出错解决方法:
1、查看端口号2181是否被占用 netstat -apn | grep 2181 , 若被占用需要kill -9 3129杀死进程
tcp6 0 0 :::2181 ::😗 LISTEN 3129/java
2、查看myid文件是否修改

停止ZooKeeper服务,可执行zkServer.sh stop命令
重启ZooKeeper服务,可执行zkServer.sh restart命令

将hadoop安装包上传至opt/packages目录下
进入/opt/packages目录

cd /opt/packages

将压缩安装包解压至指定文件

tar -zxvf hadoop-2.7.2.tar.gz -C /opt/programs

进入/opt/programs/hadoop-2.7.2/etc/hadoop目录,修改配置文件

cd /opt/programs/hadoop-2.7.2/etc/hadoop/

core-site.xml

vim core-site.xml
	<!-- 当多个HDFS集群工作时,指定集群的名称,但集群的名称不可重复 -->
		<property>
			<name>fs.defaultFS</name>
			<value>hdfs://ns</value>
		</property>
	<!-- 用于NameNode、DataNode、JournalNode等存放数据的公共目录,也可以分开指定 -->
		<property>
			<name>hadoop.tmp.dir</name>
			<value>/opt/programs/hadoop-2.7.2/tmp</value>
		</property>
	<!-- 指定ZooKeeper集群的地址和端口 -->
		<property>
			<name>ha.zookeeper.quorum</name>
			<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
		</property>

hdfs-site.xml

vim hdfs-site.xml
	<!-- 指定DataNode存储block的副本数 -->
    <property>
            <name>dfs.replication</name>
            <value>3</value>
    </property>
    <!-- HDFS集群的别称,需要和core-site.xml中保持一致 -->
    <property>
            <name>dfs.nameservices</name>
            <value>ns</value>
    </property>
    <!-- 指定ns集群下的NameNode机器 -->
    <property>
            <name>dfs.ha.namenodes.ns</name>
            <value>nn1,nn2</value>
    </property>
    <!-- nn1的RPC地址 -->
    <property>
            <name>dfs.namenode.rpc-address.ns.nn1</name>
            <value>hadoop01:9000</value>
    </property>
    <!-- nn1的HTTP地址 -->
    <property>
            <name>dfs.namenode.http-address.ns.nn1</name>
            <value>hadoop01:50070</value>
    </property>
    <!-- nn2的RPC地址 -->
    <property>
            <name>dfs.namenode.rpc-address.ns.nn2</name>
            <value>hadoop02:9000</value>
    </property>
    <!-- nn2的HTTP地址 -->
    <property>
            <name>dfs.namenode.http-address.ns.nn2</name>
            <value>hadoop02:50070</value>
    </property>
    <!-- 指定nn1和nn2的元数据在JournalNode上的存储位置 -->
    <property>
            <name>dfs.namenode.shared.edits.dir</name>
    		<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ns</value>
    </property>
    <!-- 指定JournalNode的本地磁盘存储位置 -->
    <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/opt/programs/hadoop-2.7.2/journal/data</value>
    </property>
    <!-- 配置ns集群的NameNode失败时实现自动切换 -->
    <property>
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
    </property>
    <!-- 配置client的failover代理 -->
    <property>
            <name>dfs.client.failover.proxy.provider.ns</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 配置隔离机制,已使用SSH方式进行NameNode的切换 -->
    <property>
            <name>dfs.ha.fencing.methods</name>
            <value>
                    sshfence
                    shell(/bin/true)
            </value>
    </property>
    <!-- 当故障切换时,SSH免密码登录 -->
    <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>/root/.ssh/id_rsa</value>
    </property>
    <!-- connect-timeout连接超时 -->
    <property>
            <name>dfs.ha.fencing.ssh.connect-timeout</name>
            <value>30000</value>
    </property>

mapred-site.xml
先重命名一下

cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
	<!-- 指定MapReduce在YARN上运行 -->
    <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>

yarn-site.xml

vim yarn-site.xml
	<!-- 启动HA -->
    <property>
            <name>yarn.resourcemanager.ha.enabled</name>
            <value>true</value>
    </property>
    <!-- 标识集群 -->
    <property>
            <name>yarn.resourcemanager.cluster-id</name>
            <value>yrc</value>
    </property>
    <!-- 指定两个ResourceManager的名称 -->
    <property>
            <name>yarn.resourcemanager.ha.rm-ids</name>
            <value>rm1,rm2</value>
    </property>
    <!-- 指定rm1的地址 -->
    <property>
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>hadoop01</value>
    </property>
    <!-- 指定rm2的地址 -->
    <property>
            <name>yarn.resourcemanager.hostname.rm2</name>
            <value>hadoop02</value>
    </property>
    <!-- 指定ZooKeeper集群 -->
    <property>
            <name>yarn.resourcemanager.zk-address</name>
            <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
    </property>
    <!-- 启动NodeManager时,server的加载方式 -->
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>

修改配置文件slaves

cd /opt/programs/hadoop-2.7.2/etc/hadoop
vim slaves
未修改前
localhost
将localhost删除,并添加如下内容
hadoop01
hadoop02
hadoop03

修改配置文件hadoop-env.sh、mapred-env.sh、yarn-env.sh在此三个文件中均加入JAVA_HOME环境变量
(快捷操作:vim进入文件之后,按下Ctrl+G即可到达文件最后一行,之后再按i进行修改)

export JAVA_HOME=/opt/programs/jdk1.8.0_144

执行以下命令,将hadoop1节点的整个Hadoop安装目录远程复制到hadoop02和hadoop03节点

scp -r /opt/programs/hadoop-2.7.2 root@hadoop02:/opt/programs/
scp -r /opt/programs/hadoop-2.7.2 root@hadoop03:/opt/programs/

在三个节点上分别执行命令,修改"/etc/profile",配置Hadoop环境变量

vim /etc/profile

在文件末尾加入以下内容

export HADOOP_HOME=/opt/programs/hadoop-2.7.2
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

刷新profile文件

source /etc/profile

启动与测试Hadoop

如果集群是第一次启动,需要格式化 NameNode,格式化NameNode需要先启动JournalNode(以后则不必了)。三个节点都要

hadoop-daemon.sh start journalnode   

在hadoop01节点上执行以下命令进行格式化操作(此时要保证3个节点都已开机,且均开启ZooKeeper和JournalNode)

cd /opt/programs/hadoop-2.7.2   #先进入Hadoop的根目录   
hdfs namenode -format

执行命令,将hadoop01节点Hadoop安装目录下的tmp文件夹远程复制到hadoop02节点的Hadoop安装目录下

cd /opt/programs/hadoop-2.7.2/
scp -r tmp/ root@hadoop02:/opt/programs/hadoop-2.7.2

在hadoop01节点上执行以下命令,格式化ZKFC (格式化ZKFC只需要执行一次,且仅在hadoop01节点上)

hdfs zkfc -formatZK

在hadoop01节点上执行以下命令,启动HDFS和YARN

start-dfs.sh
start-yarn.sh

首次启动时必须严格按照上面的步骤进行操作,以后再次启动Hadoop集群时,可以按照启动ZooKeeper、HDFS和YARN的顺序进行。

启动ZooKeeper,需要在每个节点都执行一次启动命令"zkServer.sh start"
启动HDFS和YARN时,只需要在hadoop1节点上执行一次启动命令"start-dfs.sh"和"start-yarn.sh"

停止Hadoop集群时
首先在hadoop1节点上执行"stop-yarn.sh"和"stop-dfs.sh",停止YARN和HDFS
然后在每个节点上都执行一次"zkServer.sh stop"命令,停止ZooKeeper
此外,还可以使用"start-all.sh"和"stop-all.sh"命令(只需要在hadoop1节点上执行),来启动和停止整个Hadoop集群,包括HDFS和YARN。
但系统已经建议放弃使用这两个命令,而改用"start-dfs.sh"、“start-yarn.sh”、“stop-yarn.sh”、“stop-dfs.sh”

在浏览器中输入"http://192.168.40.201:8088/cluster"(若虚拟机中,IP地址改为自己的主机名即可),可以查看YARN的运行状态(即对应用状态进行监测)
在浏览器中输入"http://192.168.40.201:50070/“,显示hadoop01:9000(active)
在浏览器中输入"http://192.168.40.202:50070/”,页面显示hadoop02:9000(standby)

然后在hadoop01节点上执行以下命令,挂掉"active"状态的NameNode
kill -9 7098 #此处的7098为hadoop01中的NameNode进程ID,看上面jps显示,数值是随机的

再次访问"http://192.168.40.201:50070/“,出现无法访问
而访问"http://192.168.40.202:50070/”,页面显示hadoop02:9000(active)

接下来在hadoop01节点执行以下命令,手动启动刚挂掉的NameNode
hadoop-daemon.sh start namenode
jps
再次访问"http://192.168.40.201:50070/",页面显示hadoop02:9000(standby)

伪分布式搭建配置文件

core-site.xml

vim core-site.xml
    <!--配置NameNode-->
    <property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop0:9000</value>
    </property>
    <!--指定Hadoop数据的临时存放目录-->
    <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/programs/hadoop-2.7.2/tmp</value>
    </property>

hdfs-site.xml

vim hdfs-site.xml
    <!--伪分布式只有一台机器,配置副本数量为1-->
    <property>
            <name>dfs.replication</name>
            <value>1</value>
    </property>

mapred-site.xml

mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
    <!--配置MapReduce运行在YARN上-->
    <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>
    <!--配置集群的权限验证-->
    <property>
            <name>dfs.permissions</name>
            <value>false</value>
    </property>

yarn-site.xml

vim yarn-site.xml
    <!--指定ResourceManager-->
    <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>hadoop0</value>
    </property>
    <!--启动NodeManager时,server的加载方式-->
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>

slaves

vim slaves
hadoop0

hadoop-env.sh

vim hadoop-env.sh
将export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}注释掉
改为export HADOOP_CONF_DIR=/opt/programs/hadoop-2.7.2/etc/hadoop
并在文件末尾加入JAVA_HOME环境变量
export JAVA_HOME=/opt/programs/jdk1.8.0_144

再刷新hadoop-env.sh文件

source hadoop-env.sh
vim /etc/profile

在文件末尾加入以下内容

export HADOOP_HOME=/opt/programs/hadoop-2.7.2
export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

刷新profile文件

source /etc/profile

格式化HDFS

hdfs namenode -format

启动HDFS和YARN

start-dfs.sh
start-yarn.sh

访问“http://192.168.40.200:50070”,出现"hadoop0:9000"(active)

jdk需要在本地配好

把本地的Hadoop的包hadoop-2.7.2.tar.gz解压
此时我的hadoop位置是E:\RuanJian\Hadoop\hadoop-2.7.2

新建一个系统变量HADOOP_NAME,变量值为hadoop所在的位置
再新建一个系统变量HADOOP_USER_NAME,变量值为"root"
最后在Path路径中加上;%HADOOP_HOME\bin

打开idea,新建一个maven项目
File -> Setting -> plugins ->Marketplace -> 搜索Big Data Tools并带年纪install -> 重启idea
打开idea —> 点击右侧的Big Data Tools -> + -> Remote FS -> HDFS ->把Configuration files directory
更换为Explicit uri -> File system URI:输入hadoop0:9000 -> Username: 输入root ->
在Hadoop-2.7.2目录下新建文件aaa:mkdir aaa -> 点击Test connection -> 在本地新建文本word.txt并输入
That is a dog
This is a cat
->将word.txt文件上传上来 (右击aaa,点击Upload from Disk…,选择文件)

执行以下操作,运行Hadoop自带的MapReduce单词统计程序

cd /opt/programs/hadoop-2.7.2/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /aaa/word.txt /output

刷新之后,idea将会出现output目录,点击打开文件查看结果
Linux中通过 hadoop fs -cat /output/part-r-00000 命令查看内容

hdfs dfs -cat /user/hadoop/output/part-r-00000
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值