CDH5.16.2-hadoop伪分布式搭建部署及入门实战

1,027 阅读4分钟

前言

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

本次教程所需软件包

DownLoad - 提取码:1n9z

  • hadoop-2.6.0-cdh5.16.2.tar.gz
  • jdk-8u181-linux-x64.tar.gz

部署与入门实战

官网:hadoop.apache.org
如果需要查看其他生态圈软件的详细内容网址,以hive为例:hive.apache.org

官方文档:hadoop.apache.org/docs/r2.10.…

三种部署模式

  • Local (Standalone) Mode 本地模式
  • Pseudo-Distributed Mode 伪分布式模式√
  • Fully-Distributed Mode 分布式模式 集群

1、HDFS

1、设置节点的hosts⽂件:

[root@localhost /]# vim /etc/hosts

2、关闭防火墙及Selinux

[root@localhost /]# systemctl stop firewalld
[root@localhost /]# systemctl disable firewalld
[root@localhost /]# vim /etc/sysconfig/selinux

配置完成后重启机器 [root@localhost /]# reboot

3、创建hadoop用户及所需目录

[root@xinxing001 /]# useradd hadoop
[root@xinxing001 /]# su - hadoop
[hadoop@xinxing001 ~]$ mkdir tmp sourcecode software shell log lib data app
  • tmp:用于存放临时、缓存文件
  • sourcecode:存放源代码
  • software:存放软件包
  • shell:存放脚本
  • log:存放日志
  • lib:存放第三方jar包
  • data:存放第三方数据
  • app:存放hadoop软件

4、配置JAVA环境变量

hadoop官网对jdk版本的要求

cloudera_cdh对jdk版本的要求


配置

参考我的另一片文章> java环境变量配置

5、解压缩软件以及软连接

[root@xinxing001 software]#su - hadoop
[hadoop@xinxing001 software]# tar -zxvf hadoop-2.6.0-cdh5.16.2.tar.gz -C ../app/
[hadoop@xinxing001 software]# cd ../app/
[hadoop@xinxing001 app]# ln -s hadoop-2.6.0-cdh5.16.2/ hadoop

修改hadoop配置文件,指定jdk路径

[hadoop@xinxing001 hadoop]# vim /home/hadoop/app/hadoop/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_181/

6、配置无密码认证(不配置则启动每个服务时需输入用户密码)

[hadoop@xinxing001 ~]# cd ~
[hadoop@xinxing001 ~]# ssh-keygen

回车回车回车

[hadoop@xinxing001 ~]$ cd .ssh
[hadoop@xinxing001 .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[hadoop@xinxing001 .ssh]$ chmod 0600 ~/.ssh/authorized_keys

#测试是否配置成功
[hadoop@xinxing001 .ssh]$ ssh [你的主机名] [command]

7、修改配置文件

namenode配置文件

[hadoop@xinxing001 /]$ cd /home/hadoop/app/hadoop/etc/hadoop
[hadoop@xinxing001 hadoop]$ vim core-site.xml

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://[你自己的主机名]:9000</value>
</property>

<property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp/</value>
</property>

SecondaryNameNode配置文件

[hadoop@xinxing001 hadoop]$ vim hdfs-site.xml

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

<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>[你自己的主机名]:9868</value>
</property>

<property>
        <name>dfs.namenode.secondary.https-address</name>
        <value>[你自己的主机名]:9869</value>
</property>

dadanode配置文件

[hadoop@xinxing001 hadoop]$ vim slaves
#把localhost更改为自己设置的主机名

8、格式化HDFS

[hadoop@xinxing001 hadoop]$ hdfs namenode -format

如果显示没有该命令,请配置hadoop的环境变量后再执行

[hadoop@xinxingdata hadoop]$ vim ~/.bashrc

#hadoop
HADOOP_HOME=/home/hadoop/app/hadoop
PATH=$PATH:$HADOOP_HOME/bin/
export HADOOP_HOME PATH

[hadoop@xinxingdata hadoop]$ source ~/.bashrc

9、启动服务

[hadoop@xinxing001 /]$ cd /home/hadoop/app/hadoop/sbin
[hadoop@xinxing001 sbin]$ ./start-dfs.sh

OpenWeb http://172.18.12.252:50070/

10、测试HDFS

创建文件夹

[hadoop@xinxing001 sbin]$ hdfs dfs -mkdir /wordcount
20/05/12 11:23:44 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

[hadoop@xinxing001 sbin]$ hdfs dfs -mkdir /wordcount/input
20/05/12 11:24:00 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@xinxing001 sbin]$

上传文件到hdfs

[hadoop@xinxing001 sbin]$ hdfs dfs -put /home/hadoop/app/hadoop/etc/hadoop/*.xml /wordcount/input
20/05/12 11:24:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@xinxing001 sbin]$

词频统计

[hadoop@xinxing001 /]$ hadoop jar /home/hadoop/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.16.2.jar grep /wordcount/input /wordcount/output 'dfs[a-z.]+'

把统计结果下载到linux

[hadoop@xinxing001 /]$ hdfs dfs -get /wordcount/output ~/tmp/
[hadoop@xinxing001 /]$ cd /home/hadoop/tmp/output
[hadoop@xinxing001 output]$ ll
总用量 4
-rw-r--r-- 1 hadoop hadoop 90 5月  12 11:31 part-r-00000
-rw-r--r-- 1 hadoop hadoop  0 5月  12 11:31 _SUCCESS

[hadoop@xinxing001 output]$ cat part-r-00000 

2、YARN

1、修改配置文件

mapred-site.xml

[hadoop@xinxingdata ~]$ cd  ~/app/hadoop/etc/hadoop/
[hadoop@xinxing001 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[hadoop@xinxing001 hadoop]$ vim mapred-site.xml
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>

yarn-site.xml

[hadoop@xinxing001 hadoop]$ vim yarn-site.xml
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>xinxing001:18088</value>
</property>

此处修改默认端口:由于yarn端口存在远程执行漏洞,防止被当做肉鸡执行矿力运算

2、启动yarn服务

[hadoop@xinxing001 /]$ cd /home/hadoop/app/hadoop/sbin
[hadoop@xinxing001 sbin]$ ./start-yarn.sh

open web: http://172.18.12.252:18088

3、测试YARN-词频统计

创建几个文件并输入内容

上传至hdfs

[hadoop@xinxing001 ~]$ hdfs dfs -mkdir /wordcount2
20/05/12 11:56:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

[hadoop@xinxing001 ~]$ hdfs dfs -mkdir /wordcount2/input
20/05/12 11:56:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

[hadoop@xinxing001 testcount]$ hdfs dfs -put * /wordcount2/input
20/05/12 12:01:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

[hadoop@xinxing001 testcount]$ hadoop jar \
~/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.16.2.jar \
wordcount /wordcount2/input /wordcount2/output

[hadoop@xinxing001 testcount]$ hdfs dfs -get /wordcount2/output/ ./
20/05/12 12:03:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable


[hadoop@xinxing001 testcount]$ cd output/
[hadoop@xinxing001 output]$ ls
part-r-00000  _SUCCESS

[hadoop@xinxing001 output]$ cat part-r-00000 
[hadoop@xinxing001 output]$ 

引申:
1、mapreduce中split(map)的个数是由什么影响的
2、reduce由什么决定

  • 在map阶段读取数据前,FileInputFormat会将输入文件分割成spilt,而spilt的个数决定了map的个数。

    • 文件的大小。比如,当文件大于128M(block默认值)而小于256M时,文件会被划分成两个spilt。
    • 文件的个数。FileInputFormat按文件进行分割,如果单个文件大于128M会被划分为多个spilt,反之,如果单个文件小于128M,FileInputFormat会把小文件单独划分成一个spilt。
    • splitsize的大小。分片是按照splitsize的大小进行的,默认情况下,splitsize的大小等同于hdfs的block大小。但可以通过参数调节。
  • reduece的数量

    • reduce在运行时往往需要从相关map端复制数据到reduce节点来处理,因此相比于map任务。reduce节点资源是相对比较缺少的,同时相对运行较慢,正确的reduce任务的个数应该是0.95或者1.75 *(节点数 ×mapred.tasktracker.tasks.maximum参数值)。