Hadoop系列之Hadoop环境搭建
Posted 梦Dreamer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop系列之Hadoop环境搭建相关的知识,希望对你有一定的参考价值。
环境简介
centos系统
jdk(jdk的安装和配置,请参考Linux系列之安装jdk(二))
hadoop3.2.1
一、创建hadoop用户
useradd -m hadoop -s /bin/bash #创建新用户hadoop
passwd hadoop #输入密码(若提示“无效的密码,过于简单”则再次输入确认就行)
visudo #为hadoop用户增加管理员权限
增加这句话hadoop ALL=(ALL) ALL (当中的间隔为tab)
su hadoop #切换hadoop用户
二、hadoop安装前的准备工作
1、安装ssh
CentOS 默认已安装了 SSH client、SSH server,可以不用再次安装了
rpm -qa|grep ssh #检查是否安装了ssh
安装ssh的命令
yum install openssh-clients
yum install openssh-server
ssh localhost #测试安装的ssh是否可用
exit #退出登录的ssh
2、ssh免密码登录
cd ~/.ssh/ #若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa #会有提示,按三次enter即可
cat id_rsa.pub >> authorized_keys # 加入授权
chmod 600 ./authorized_keys # 修改文件权限
此时,就可以无密码登录ssh了
注:
在 Linux 系统中,~ 代表的是用户的主文件夹,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/”。
三、hadoop单机模式搭建
hadoop下载路径:http://mirror.bit.edu.cn/apache/hadoop/common/
tar -zxvf hadoop-3.2.1.tar.gz #解压hadoop
mv ./hadoop-3.2.1/ ./hadoop #重命名文件为hadoop
chown -R hadoop:hadoop ./hadoop #修改文件权限
./bin/hadoop version #检查hadoop是否可用,若可用,则显示版本信息
执行hadoop的例子
mkdir input #新建文件夹
cp etc/hadoop/*.xml input #将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+' #运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子,包括 wordcount、terasort、join、grep 等。此处使用的grep例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。
cat output/* #查看运行结果
四、hadoop伪分布式环境搭建
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
vim /etc/profile #在/ect/profile中配置hadoop环境变量
添加下面的语句
# Hadoop Environment Variables
export HADOOP_HOME=/usr/local/soft/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
source /etc/profile #是配置生效
cd /usr/local/soft/hadoop #hadoop的一些常用配置都在etc/hadoop下面
vim etc/hadoop/hadoop-env.sh #在此加入java_home配置:export JAVA_HOME=/usr/local/soft/jdk-12.0.1
配置core-site.xml
<configuration>
<property>
<!--hadoop.tmp.dr表示存放临时数据的目录,即包括NameNode的数据,也包括DataNode的数据。该路径任意指定,只要实际存在该文件夹即可-->
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/soft/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<!--fs.defaultFS的值,表示hdfs路径的逻辑名称-->
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
配置hdfs-site.xml
<configuration>
<property>
<!--dfs.replication表示副本的数量,伪分布式要设置为1-->
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<!--dfs.namenode.name.dir表示本地磁盘目录,是存储fsimage文件的地方-->
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/soft/hadoop/tmp/dfs/name</value>
</property>
<property>
<!--dfs.datanode.data.dir表示本地磁盘目录, HDFS数据存放block的地方-->
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/soft/hadoop/tmp/dfs/data</value>
</property>
</configuration>
bin/hdfs namenode -format #配置完成后,执行namenode格式化
sbin/start-dfs.sh #开启namenode和datanode
jps #查看是否启动成功,若启动成功会出现namenode,datanode和secondaryNameNode进程
运行hadoop伪分布式实例
bin/hdfs dfs -mkdir -p /user/hadoop #在hdfs中创建用户目录:grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录
bin/hdfs dfs -mkdir input #在hdfs上创建input文件夹
bin/hdfs dfs -put etc/hadoop/*.xml input #将etc/hadoop下的xml文件复制到hdfs的input文件夹下
bin/hdfs dfs -ls input #查看复制的文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+' #执行实例:伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件
bin/hdfs dfs -cat output/* #查看运行的结果
bin/hdfs dfs -get output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
bin/hdfs dfs -rm -r output # 删除hdfs上的 output 文件夹
五、启动YARN(Yet Another Resource negotiator)
YARN 主要是为集群提供更好的资源管理与任务调度
配置mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
sbin/start-yarn.sh #启动yarn
jps #查看是否启动成功,resourceManager、nodeNanager
六、问题和解决
1、防火墙
systemctl status iptables.service 查看防火墙状态
systemctl stop iptables.service 关闭防火墙
systemctl start iptables.service 开启防火墙
2、vagrant虚拟机内存不足
修改Vagrantfile文件
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 2
end
查看内存使用情况命令:free -m
3、启动hadoop时报错:but there is no HDFS_NAMENODE_USER defined. Aborting operation.
4、hadoop不是第一次启动的情况下
若hadoop不是第一次启动,则不需要执行格式化命令(不用执行hdfs namenode -format),直接执行启动hadoop命令即可(sbin/start-dfs.sh)
不是第一次启动hadoop的话,使用格式化命令,就会出现下面的错误
解决办法:
sbin/stop-dfs.sh #停掉服务
rm -rf tmp/* #删除tmp下面的所有文件(所有datanode节点都要执行)
hdfs namenode -format #重新格式化
sbin/start-dfs.sh #启动服务
以上是关于Hadoop系列之Hadoop环境搭建的主要内容,如果未能解决你的问题,请参考以下文章
大数据学习系列之六 ----- Hadoop+Spark环境搭建