您现在的位置是:首页 > 个人博客日记 个人博客日记

hadoop 搭建

2019-08-22 16:19:37

1.什么是hadoop

hadoop中有3个核心组件:
分布式文件系统:HDFS —— 实现将文件分布式存储在很多的服务器上
分布式运算编程框架:MAPREDUCE —— 实现在很多机器上分布式并行运算
分布式资源调度平台:YARN —— 帮用户调度大量的mapreduce程序,并合理分配运算资源

2、hdfs整体运行机制

hdfs:分布式文件系统
hdfs有着文件系统共同的特征:

  • 1、有目录结构,顶层目录是: /
  • 2、系统中存放的就是文件
  • 3、系统可以提供对文件的:创建、删除、修改、查看、移动等功能

hdfs跟普通的单机文件系统有区别:

  • 1、单机文件系统中存放的文件,是在一台机器的操作系统中
  • 2、hdfs的文件系统会横跨N多的机器
  • 3、单机文件系统中存放的文件,是在一台机器的磁盘上
  • 4、hdfs文件系统中存放的文件,是落在n多机器的本地单机文件系统中(hdfs是一个基于linux本地文件系统之上的文件系统)

hdfs的工作机制:

  • 1、客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中(负责存储文件块的角色:data node)<准确来说:切块的行为是由客户端决定的>
  • 2、一旦文件被切块存储,那么,hdfs中就必须有一个机制,来记录用户的每一个文件的切块信息,及每一块的具体存储机器(负责记录块信息的角色是:name node)
  • 3、为了保证数据的安全性,hdfs可以将每一个文件块在集群中存放多个副本(到底存几个副本,是由当时存入该文件的客户端指定的)

综述:一个hdfs系统,由一台运行了namenode的服务器,和N台运行了datanode的服务器组成!

3、搭建hdfs分布式集群

3.1 hdfs集群组成结构:

3.2 安装hdfs集群的具体步骤:

一、首先需要准备N台linux服务器
学习阶段,用虚拟机即可!
先准备4台虚拟机:1个namenode节点 + 3 个datanode 节点

二、修改各台机器的主机名和ip地址

  1. 主机名:hdp-01 对应的ip地址:192.168.33.61
  2. 主机名:hdp-02 对应的ip地址:192.168.33.62
  3. 主机名:hdp-03 对应的ip地址:192.168.33.63
  4. 主机名:hdp-04 对应的ip地址:192.168.33.64

4.配置linux服务器的基础软件环境

防火墙

  • 关闭防火墙:service iptables stop
    关闭防火墙自启: chkconfig iptables off

安装jdk:(hadoop体系中的各软件都是java开发的)

集群内主机的域名映射配置

  • 在hdp-01上,vi /etc/hosts
    1. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    2. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    3. 192.168.33.61 hdp-01
    4. 192.168.33.62 hdp-02
    5. 192.168.33.63 hdp-03
    6. 192.168.33.64 hdp-04
    然后,将hosts文件拷贝到集群中的所有其他机器上
    1. scp /etc/hosts hdp-02:/etc/
    2. scp /etc/hosts hdp-03:/etc/
    3. scp /etc/hosts hdp-04:/etc/

5.安装hdfs集群

1、上传hadoop安装包到hdp-01

  1. tar -xzvf hadoop-3.2.0.tar.gz
  2. mv hadoop-3.2.0 /usr/local/hadoop-3.2.0

hadoop的配置文件在:/usr/local/hadoop-3.2.0/etc/hadoop安装目录/usr/local/hadoop-3.2.0

1) 修改hadoop-env.sh

  1. export JAVA_HOME=/opt/jdk1.8.0_66

2) 修改core-site.xml

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://hdp-01:9000</value>
  5. </property>
  6. </configuration>

3) 修改hdfs-site.xml

  1. <configuration>
  2. <property>
  3. <name>dfs.namenode.name.dir</name>
  4. <value>/root/hdpdata/name/</value>
  5. </property>
  6. <property>
  7. <name>dfs.datanode.data.dir</name>
  8. <value>/root/hdpdata/data</value>
  9. </property>
  10. <property>
  11. <name>dfs.namenode.secondary.http-address</name>
  12. <value>47.96.106.223:50090</value>
  13. </property>
  14. </configuration>

4) 拷贝整个hadoop安装目录到其他机器

  1. scp -r /root/apps/hadoop-2.8.1 hdp-02:/root/apps/
  2. scp -r /root/apps/hadoop-2.8.1 hdp-03:/root/apps/
  3. scp -r /root/apps/hadoop-2.8.1 hdp-04:/root/apps/

5) 启动HDFS

首先,初始化namenode的元数据目录
要在hdp-01上执行hadoop的一个命令来初始化namenode的元数据存储目录

  1. hadoop namenode -format
  • 1.创建一个全新的元数据存储目录
    2.生成记录元数据的文件fsimage
    3.生成集群的相关标识:如:集群id——clusterID

然后,启动namenode进程(在hdp-01上)

  1. hadoop-daemon.sh start namenode

启动完后,首先用jps查看一下namenode的进程是否存在

然后,在windows中用浏览器访问namenode提供的web端口:50070

  1. http://hdp-01:50070

然后,启动众datanode们(在任意地方)

  1. hadoop-daemon.sh start datanode

6) 用自动批量启动脚本来启动HDFS

  • 1)先配置hdp-01到集群中所有机器(包含自己)的免密登陆
    2)配完免密后,可以执行一次 ssh 0.0.0.0
    3)修改hadoop安装目录中/etc/hadoop/slaves(把需要启动datanode进程的节点列入)
    1. hdp-01
    2. hdp-02
    3. hdp-03
    4. hdp-04

4)在hdp-01上用脚本:start-dfs.sh 来自动启动整个集群
5)如果要停止,则用脚本:stop-dfs.sh

如启动报错:
Hadoop ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes
然后启动成功

  1. [root@iZbp153yczpm4pp9pjs0u3Z sbin]# start-all.sh
  2. WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP_SECURE_DN_USER.
  3. Starting namenodes on [hdp-01]
  4. Last login: Thu Aug 22 15:50:14 CST 2019 from 121.69.28.10 on pts/1
  5. hdp-01: ssh: Could not resolve hostname hdp-01: Name or service not known
  6. Starting datanodes
  7. Last login: Thu Aug 22 15:52:58 CST 2019 on pts/0
  8. Starting secondary namenodes [47.96.106.223]
  9. Last login: Thu Aug 22 15:52:58 CST 2019 on pts/0
  10. Starting resourcemanager
  11. Last login: Thu Aug 22 15:53:04 CST 2019 on pts/0
  12. Starting nodemanagers
  13. Last login: Thu Aug 22 15:53:11 CST 2019 on pts/0

6、hdfs的客户端操作

客户端的理解
hdfs的客户端有多种形式:

  • 1、网页形式
    2、命令行形式
    3、客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网

文件的切块大小和存储的副本数量,都是由客户端决定!
所谓的由客户端决定,是通过配置参数来定的
hdfs的客户端会读以下两个参数,来决定切块大小、副本数量:
切块大小的参数: dfs.blocksize
副本数量的参数: dfs.replication

上面两个参数应该配置在客户端机器的hadoop目录中的hdfs-site.xml中配置

  1. <property>
  2. <name>dfs.blocksize</name>
  3. <value>64m</value>
  4. </property>
  5. <property>
  6. <name>dfs.replication</name>
  7. <value>2</value>
  8. </property>

hdfs客户端的常用操作命令

1、上传文件到hdfs中

  1. hadoop fs -put /本地文件 /aaa

2、下载文件到客户端本地磁盘

  1. hadoop fs -get /hdfs中的路径 /本地磁盘目录

3、在hdfs中创建文件夹

  1. hadoop fs -mkdir -p /aaa/xxx

4、移动hdfs中的文件(更名)

  1. hadoop fs -mv /hdfs的路径1 /hdfs的另一个路径2

复制hdfs中的文件到hdfs的另一个目录

  1. hadoop fs -cp /hdfs路径_1 /hdfs路径_2

5、删除hdfs中的文件或文件夹

  1. hadoop fs -rm -r /aaa

6、查看hdfs中的文本文件内容

  1. hadoop fs -cat /demo.txt
  2. hadoop fs -tail -f /demo.txt


关注TinyMeng博客,更多精彩分享,敬请期待!
 

站点信息