Hadoop的安装包括3中模式:
(1)单机模式:只在一台机器上运行,存储采用本地文件系统,没有采用分布式文件系统HDFS。
(2)伪分布式模式:存储采用分布式文件系统HDFS,但是HDFS的节点和数据节点都在同一节点。
(2)分布式模式:存储采用分布式文件系统HDFS,而且HDFS的节点和数据节点位于不同机器上。
1 创建Hadoop用户
1.1 创建新用户
用户名为hadoopuser
[root@hadoop ~]# sudo adduser hadoopuser
[root@hadoop ~]# passwd hadoopuser
Changing password for user hadoopuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
1.2分配权限 设置Root(管理员)权限
1> 第一步:将用户加入管理权限组
执行命令: usermod -a -G wheel hadoopuser
2> 第二步,修改sudoers文件为可修改状态,如下:
chmod -v u+w /etc/sudoers
3> 第三步,修改sudoers文件,新增一行指令,使新用户和Root一样的权限,如下图所示:
vim /etc/sudoers
在 root ALL=(ALL) ALL 下 新增一行:hadoopuser ALL=(ALL) ALL
注意:小细节:ypsroot ALL=(ALL) NOPASSWD: ALL 可以让ypsroot账号在操作时不输入密码!(nopasswd:)
wq保存即可;
**在使用的时候,记住指令前面要加 sudo
上面我们修改sudoers文件为可修改,此时我们应该重新把它修改为只读模式:
4> 执行如下命令: chmod -v u-w /etc/sudoers
解压 hadoop-3.2.1.tar.gz
cd /usr/local
tar -zxvf hadoop-3.2.1.tar.gz
查看hadoop版本号:hadoop version
伪分布式配置
在单个节点(一台机器上)以伪分布式的方式运行。
修改配置文件
cd /usr/local/hadoop-3.2.1/etc/hadoop
修改core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml文件
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-3.2.1/hdfs-tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
-
hadoop.tmp.dir
用于保存临时文件,如果没有配置这个参数,则默认使用的临时目录为/tmp/hadoo-hadoop
,这个目录在Hadoop重启后会被系统清理掉。 -
fs.defaultFS
用于指定HDFS的访问地址。
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>localhost:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-3.2.1/file-tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-3.2.1/file-tmp/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
-
dfs.replicaion
:指定副本数量,在分布式文件系统中,数据通常会被冗余的存储多份,以保证可靠性和安全性,但是这里用的是伪分布式模式,节点只有一个,也有就只有一个副本。 -
dfs.namenode.name.di
:设定名称节点元数据的保存目录 -
dfs.datanode.data.dir
:设定数据节点的数据保存目录
mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1/hdfs-tmp</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1/hdfs-tmp</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/usr/local/hadoop-3.2.1/hdfs-tmp</value>
</property>
</configuration>
yarn-site.xml:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>localhost:8088</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>localhost:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>localhost:8032</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>localhost:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>localhost:8033</value>
</property>
</configuration>
格式化hdfs
hdfs namenode -format
启动hadoop
start-all.sh
关闭hadoop
stop-all.sh
查看启动情况
hdfs网页如下图,可以看到文件信息,地址:http://127.0.0.1:9870/
yarn的网页如下图,可以看到任务信息,地址:http://127.0.0.1:8088/cluster
至此,hadoop3.2.1伪分布式搭建和验证完毕。
提示:
ERROR: Unable to write in xxx/logs. Aborting.
在进行Hadoop节点格式化时候出现
Starting resourcemanager ERROR: Unable to write in /home/zhang/opt/hadoop-3.1.0/logs. Aborting.
原因:权限不够
加入-R 参数,将读写权限传递给子文件夹
chmod -R 777 /logs
或者出现了Cannot create directory
同样是因为权限不够:将需要的权限给予相应的 文件夹
sudo chmod -R a+w /tmp
启动hadoop,报错Error JAVA_HOME is not set and could not be found
报如错误:JAVA_HOME is not set and could not be found,可能是因为JAVA_HOME环境没配置正确,还有一种情况是即使各结点都正确地配置了JAVA_HOME,但在集群环境下还是报该错误,解决方法是显示地重新声明一遍JAVA_HOME
1、检查JAVA_HOME是否配置正确(伪分布式环境)
启动start-all.sh时报错,错误所示 Error JAVA_HOME is not set and could not be found
检查环境变量
输入java –version,查看jdk是否安装成功
输入export,查看jdk环境变量是否设置成功
2.在集群环境下,即使各结点都正确地配置了JAVA_HOME,也会错误Error JAVA_HOME is not set and could not be found
在hadoop-env.sh中,再显示地重新声明一遍JAVA_HOME