Hadoop 3.1.2 独立模式,单节点和多节点伪分布式安装与使用

1. 安装Centos与Java

修改hostname为hadoop-master

集群规划,将其加到hosts中

192.168.110.40 hadoop-master
192.168.110.41 hadoop-slave1
192.168.110.42 hadoop-slave2

1.1 关闭THP

不关闭THP,Hadoop的系统CPU使用率很高

出现以下情况启动了THP
查看thp
永久关闭

vi /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
 echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
 echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

关闭thp
赋予执行权限,然后重启

chmod +x /etc/rc.d/rc.local

关闭thp

1.2 新增hadoop用户

直接使用root用户,权限过大,启动会失败,需要配置参数等,所以新增一个hadoop用户,加以权限控制,需要root权限时再使用sudo命令

无特殊说明,以下命令均使用hadoop用户执行

useradd hadoop
passwd hadoop

使用root权限,修改文件的写权限

chmod u+w /etc/sudoers
vi /etc/sudoers
hadoop ALL=(ALL) ALL
%hadoop ALL=(ALL) NOPASSWD: ALL

用户新增sudoers

2. 克隆虚拟机

克隆两个虚拟机,创建完整克隆,然后修改mac地址
克隆虚拟机
克隆虚拟机
克隆虚拟机
修改两个从节点虚拟机的ip地址和hostname

vi /etc/sysconfig/network-scripts/ifcfg-ens33
service network start
vi /etc/sysconfig/network
hostnamectl set-hostname hadoop-slavex

3. hadoop下载与安装

解压缩

mkdir -p /home/hadoop/softwares/hadoop/
tar -zxvf hadoop-3.1.2.tar.gz -C /home/hadoop/softwares/hadoop/

配置环境变量,修改 ~/.bashrc 文件,该文件中环境变量只对hadoop用户有效

export HADOOP_HOME=/home/hadoop/softwares/hadoop/hadoop-3.1.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

让环境变量立即生效

source ~/.bashrc

hadoop测试

4. hadoop使用

无特殊说明,以下命令均为在hadoop文件目录下,使用hadoop用户执行

4.1 独立模式

默认情况下,Hadoop配置为以非分布式模式运行,作为单个Java进程。

修改 etc/hadoop/hadoop-env.sh,设置为Java安装的根目录

export JAVA_HOME=/usr/local/softwares/java/jdk1.8.0_161

添加java安装根目录
新建test文件夹,里面新建input文件夹,里面放input.txt

test mongodb mongodb test hdfs
hadoop hadoop hive hive hdfs
kafka elasticsearch es hdfs
kafka hbase hdfs map reduce map reduce

执行

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount test/input test/output

查看结果

cat test/output/*

测试结果

4.2 单节点伪分布式

修改 etc/hadoop/core-site.xml

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
</property>

修改 etc/hadoop/hdfs-site.xml

<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

免密登陆。ssh设置需要在集群上做不同的操作,如启动,停止,分布式守护shell操作。认证不同的hadoop用户,需要一种用于Hadoop用户提供的公钥/私钥对,并用不同的用户共享。

检查是否可以在没有密码的情况下ssh到localhost:

ssh localhost

如果在没有密码短语的情况下无法ssh到localhost,请执行以下命令。下面的命令用于生成使用ssh键值对。复制公钥形成 id_rsa.pub 到authorized_keys 文件中,并提供拥有者具有authorized_keys文件的读写权限。

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

ssh

4.2.1 本地运行MapReduce作业

格式化文件系统

bin/hdfs namenode -format

启动NameNode守护程序和DataNode守护程序,警告提示将hadoop-master加到永久hosts中

sbin/start-dfs.sh

启动hdfs
hadoop守护程序日志输出将写入$HADOOP_LOG_DIR目录(默认为$HADOOP_HOME/logs)。

浏览hdfs的Web界面,http://hadoop-master:9870

在页面新建文件夹报错,用户权限不够
hdfs页面权限错误
修改 etc/hadoop/core-site.xml,设置静态用户为hadoop

<property>
    <name>hadoop.http.staticuser.user</name>
    <value>hadoop</value>
</property>

重新启动hdfs

sbin/stop-dfs.sh
sbin/start.dfs.sh

添加用户后,可创建也可以上传文件
hdfs页面创建文件夹
hdfs页面上传文件
创建执行MapReduce作业所需文件夹

hdfs dfs -mkdir /hdfsTest
hdfs dfs -mkdir /hdfsTest/input

将inputx.txt复制到hdfs中

hdfs dfs -put test/input/input.txt /hdfsTest/input/

hdfs上传
运行,注意:hdfsTest文件夹前不加/,会自动加上/user/hadoop,但hdfs上没有这个目录,就报错

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /hdfsTest/input /hdfsTest/output

检查输出文件:将输出文件从分布式文件系统复制到本地文件系统并检查它们

rm -rf test/output
hdfs dfs -get /hdfsTest/output test/output
cat test/output/*

下载文件
hdfs页面查看
如果要停止守护进程,运行

sbin/stop-dfs.sh

4.2.2 yarn 方式执行

确定执行了上方格式化文件系统的命令

修改 etc/hadoop/mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
    <name>mapreduce.application.classpath</name>
    <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*	</value>
</property>

修改 etc/hadoop/yarn-site.xml

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.nodemanager.env-whitelist</name>
    	<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>

启动ResourceManager守护程序和NodeManager守护程序

start-yarn.sh

启动yarn
浏览ResourceManager的Web界面,http://hadoop-master:8088

运行

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /hdfsTest/input /yarn/output

yarn上运行
查看运行结果

4.3 多节点集群

新建文件夹data

修改 etc/hadoop/core-site.xml,配置hadoop集群数据存放路径

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop-master:9000</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/softwares/hadoop/hadoop-3.1.2/data</value>
</property>

修改 etc/hadoop/hdfs-site.xml,将副本数改为2,NameNode指定为hadoop-master,SecondNameNode指定为hadoop-slave1

NameNode的存储目录树的信息,而目录树的信息则存放在fsimage文件中,当NameNode启动的时候会首先读取整个fsimage文件,将信息装载到内存中。SecondaryNameNode的作用是帮助NameNode合并fsimage和edits文件。

<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>
<property>
    <name>dfs.http.address</name>
    <value>hadoop-master:9870</value>
</property>
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop-slave1:9871</value>
</property>

修改 etc/hadoop/yarn-site.xml,设置resourcemanager

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop-master</value>
</property>

设置从节点地址,3.0后etc/hadoop下的slaves改为workers,修改etc/hadoop/workers

hadoop-slave1
hadoop-slave2

配置hadoop-master到hadoop-slave1,hadoop-slave2之间的免密通信,需要启动hadoop-slave1和hadoop-slave2并切换到hadoop用户

在hadoop-master中操作,之前在单节点伪分布式的时候已经生成了ssh,并设置了对hadoop-master的免密登录了,所以只要设置两个从节点的

ssh-copy-id hadoop-slave1 
ssh-copy-id hadoop-slave2 

测试是否需要密码,使用命令exit退出

ssh hadoop-slave1

免密登陆
分发hadoop文件目录

在hadoop-slave1和hadoop-slave2新建文件夹

mkdir -p /home/hadoop/softwares/hadoop

在hadoop-master分发

scp -r /home/hadoop/softwares/hadoop/hadoop-3.1.2/ hadoop-slave1:/home/hadoop/softwares/hadoop/hadoop-3.1.2/
scp -r /home/hadoop/softwares/hadoop/hadoop-3.1.2/ hadoop-slave2:/home/hadoop/softwares/hadoop/hadoop-3.1.2/

两台从节点添加hadoop环境变量,然后重启三台虚拟机

在hadoop-master执行命令,格式化文件系统,因为将fs.defaultFS的hdfs://localhost:9000改为了hdfs://hadoop-master:9000,否则启动hdfs会失败

hadoop namenode -format
sbin/start-dfs.sh
sbin/start-yarn.sh

集群运行
集群运行
集群运行
访问hdfs页面,http://hadoop-master:9870
hdfs的node
访问yarn页面,http://hadoop-master:8088
yarn的node
在hdfs新建browerTest文件夹,再browerTest下新建input文件夹,然后上传input.txt,运行

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /browerTest/input /yarn/output

yarn集群运行
查看结果
yarn集群运行
停止集群

sbin/stop-dfs.sh
sbin/stop-yarn.sh

参考:
hadoop文档 - 设置单节点集群
VMware 下Hadoop集群环境搭建之虚拟机克隆,Hadoop环境配置
Hadoop之SecondaryNameNode

发布了57 篇原创文章 · 获赞 11 · 访问量 9870

猜你喜欢

转载自blog.csdn.net/qq_36160730/article/details/99566365
今日推荐