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环境搭建

Hadoop系列之HBase环境搭建和使用

Hadoop系列之HBase环境搭建和使用

大数据学习系列之二 ----- HBase环境搭建(单机)

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集