学习hadoop第一天
一.在虚拟机中搭建Hadoop集群
1、准备工作
1、搭建Hadoop集群
1、上传安装包并解压
2、配置环境变量
3、修改Hadoop配置文件、
4、分发Hadoop到node1、node2
5、格式化namenode(第一次启动的时候需要执行)
6、启动Hadoop集群
7、检查master、node1、node2上的进程
8、访问HDFS的WEB界面
9、访问YARN的WEB界面
二.hadoop基本描述
1.hdfs
2. mapreduce
3.yarn
三.hadoop基本命令
1.详细启动脚本介绍
2.用文件系统(FS)Shell命令应使用 bin/hdfs dfs -xxx 的形式。
3.运行一个hadoop实例:wordcount
一.在虚拟机中搭建Hadoop集群
1、准备工作
-
三台虚拟机:master、node1、node2
-
时间同步
ntpdate ntp.aliyun.com
-
jdk1.8
java -version
-
修改主机名
三台分别执行 vim /etc/hostname 并将内容指定为对应的主机名
-
关闭防火墙:systemctl stop firewalld
-
查看防火墙状态:systemctl status firewalld
-
取消防火墙自启:systemctl disable firewalld
-
-
静态IP配置
-
直接使用图形化界面配置(不推荐)
-
手动编辑配置文件进行配置
1、编辑网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet BOOTPROTO=static HWADDR=00:0C:29:E2:B8:F2 NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.190.100 GATEWAY=192.168.190.2 NETMASK=255.255.255.0 DNS1=192.168.190.2 DNS2=223.6.6.6 需要修改:HWADDR(mac地址,centos7不需要手动指定mac地址) IPADDR(根据自己的网段,自定义IP地址) GATEWAY(根据自己的网段填写对应的网关地址) 2、关闭NetworkManager,并取消开机自启 systemctl stop NetworkManager systemctl disable NetworkManager 3、重启网络服务 systemctl restart network
-
-
免密登录
# 1、生成密钥 ssh-keygen -t rsa # 2、配置免密登录 ssh-copy-id master ssh-copy-id node1 ssh-copy-id node2 # 3、测试免密登录 ssh node1
-
配置好映射文件:/etc/hosts
192.168.190.100 master 192.168.190.101 node1 192.168.190.102 node2
1、搭建Hadoop集群
1、上传安装包并解压
这里我们使用的版本是Hadoop-2.7.6
# 使用xftp上传压缩包至master的/usr/local/soft/packages/ cd /urs/local/soft/packages/ # 解压 tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/soft/
2、配置环境变量
vim /etc/profile JAVA_HOME=/usr/local/soft/jdk1.8.0_171 HADOOP_HOME=/usr/local/soft/hadoop-2.7.6 export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH # 重新加载环境变量 source /etc/profile
3、修改Hadoop配置文件
-
cd /usr/local/soft/hadoop-2.7.6/etc/hadoop/
-
core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/soft/hadoop-2.7.6/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property>
-
hadoop-env.sh
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
-
hdfs-site.xml
<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property>
-
mapred-site.xml.template
# 1、重命名文件 cp mapred-site.xml.template mapred-site.xml # 2、修改 <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property>
-
slaves
node1 node2
-
yarn-site.xml
<property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
4、分发Hadoop到node1、node2
cd /usr/local/soft/ scp -r hadoop-2.7.6/ node1:`pwd` scp -r hadoop-2.7.6/ node2:`pwd`
5、格式化namenode(第一次启动的时候需要执行)
hdfs namenode -format
6、启动Hadoop集群
start-all.sh stop-all.sh
7、检查master、node1、node2上的进程
-
master:
[root@master soft]# jps 2597 NameNode 2793 SecondaryNameNode 2953 ResourceManager 3215 Jps
-
node1:
[root@node1 jdk1.8.0_171]# jps 11361 DataNode 11459 NodeManager 11559 Jps
-
node2:
[root@node2 ~]# jps 11384 DataNode 11482 NodeManager 11582 Jps
8、访问HDFS的WEB界面
http://master:50070
9、访问YARN的WEB界面
http://master:8088
二.hadoop基本描述
Hadoop是一个适合海量数据的分布式存储和分布式计算的平台。
这句话重中之重,以后的学习基本就是围绕这句话展开。
hadoop是一个统称,目前hadoop主要包含三大组件 hdfs:是一个分布式存储框架,适合海量数据存储 mapreduce:是一个分布式计算框架,适合海量数据计算 yarn:是一个资源调度平台,负责给计算框架分配计算资源
目前,hadoop已经演变为大数据计算的代名词,形成了一套完善的大数据计算的生态系统,所以针对hadoop也出现了很多版本
Apache hadoop 官方版本
Cloudera hadoop(CDH) 使用下载最多的版本,稳定,有商业支持(收费),在Apache的基础上打上了一些patch。推荐使用。
HortonWorks(HDP) 基于Apache的版本进行了集成,结合Ambari可以实现平台化快速安装部署。
Hadoop的特点有:
扩容能力(Scalable):能可靠(reliably)地存储和处理PB级别的数据。如果数据量更大,存储不下了,再增加节点就可以了。 成本低(Economical):可以通过普通机器组成的服务器集群来分发以及处理数据.这些服务器集群可达数千个节点。 高效率(Efficient):通过分发计算程序,hadoop可以在数据所在节点上(本地)并行地(parallel)处理他们,这使得处理非常的迅速 可靠性(Reliable):hadoop能够自动地维护数据的多份副本,并且在任务失败后能够自动地重新部署(redeploy)计算任务.
1.hdfs
HDFS具有主从架构。
HDFS集群由单个名称节点组成,主服务器管理文件系统名称空间并控制客户机对文件的访问。此外,还有许多数据节点,通常是集群中每个节点一个,它们管理连接到运行它们的节点的存储。
在分布式存储系统中,分散在不同节点中的数据可能属于同一个文件。 为了组织众多的文件,把文件可以放到不同的文件夹中,文件夹可以一级一级的包含。我们把这种组织形式称为命名空间(namespace)。命名空间管理着整个服务器集群中的所有文件。 集群中不同的节点承担不同的职责。 负责命名空间职责的节点称为主节点(master node) 负责存储真实数据职责的节点称为从节点(slave node)。 主节点负责管理文件系统的文件结构,从节点负责存储真实的数据,称为主从式结构(master-slaves)。 用户操作时,应该先和主节点打交道,查询数据在哪些从节点上存储,然后再到从节点读取。 在主节点上,为了加快用户访问的速度,会把整个命名空间信息都放在内存中,当存储的文件越多时,那么主节点就需要越多的内存空间。 在从节点存储数据时,有的原始数据文件可能很大,有的可能很小,大小不一的文件不容易管理,那么可以抽象出一个独立的存储文件单位,称为块(block)。 数据存放在集群中,可能因为网络原因或者节点硬件原因造成访问失败,最好采用副本(replication)机制,把数据同时备份到多台节点中,这样数据就安全了,数据丢失或者访问失败的概率就小了。
负责数据的分布式存储 主从结构 主节点,可以有2个:namenode 从节点,有多个:datanode namenode负责 接收用户操作请求,是用户操作的入口 维护文件系统的目录结构,称作命名空间 datanode负责 存储数据
2. mapreduce
依赖磁盘io的批处理计算模型 主从结构 主节点,只有一个: MRAppMaster 从节点,就是具体的task MRAppMaster负责 接收客户端提交的计算任务 把计算任务分给NodeManager的Container中执行,即任务调度 Container是YARN中资源的抽象,它封装了某个节点上一定量的资源(CPU和内存两类资源) Container由ApplicationMaster向ResourceManager申请的,由ResouceManager中的资源调度器异步分配给ApplicationMaster Container的运行是由ApplicationMaster向资源所在的NodeManager发起的 监控Container中Task的执行情况 Task负责: 处理数据
3.yarn
资源的调度和管理平台 主从结构 主节点,可以有2个:ResourceManager 从节点,有很多个: NodeManager ResourceManager负责 集群资源的分配与调度 MapReduce、Storm、Spark等应用,必须实现ApplicationMaster接口,才能被RM管理 NodeManager负责 单节点资源的管理(CPU+内存)
三.hadoop基本命令
Linux命令补充 df -h :查看磁盘进度
其实Hadoop中的命令与linux中的命令十分相似,只要Linux命令使用的熟练,Hadoop中的命令很容易触类旁通
1.详细启动脚本介绍
第一种:全部启动集群所有进程 启动:sbin/start-all.sh 停止:sbin/stop-all.sh 第二种:单独启动hdfs【web端口50070】和yarn【web端口8088】的相关进程 启动:sbin/start-dfs.sh sbin/start-yarn.sh 停止:sbin/stop-dfs.sh sbin/stop-yarn.sh 每次重新启动集群的时候使用 第三种:单独启动某一个进程 启动hdfs:sbin/hadoop-daemon.sh start (namenode | datanode) 停止hdfs:sbin/hadoop-daemon.sh stop (namenode | datanode) 启动yarn:sbin/yarn-daemon.sh start (resourcemanager | nodemanager) 停止yarn:sbin/yarn-daemon.sh stop(resourcemanager | nodemanager) 用于当某个进程启动失败或者异常down掉的时候,重启进程
2.用文件系统(FS)Shell命令应使用 bin/hdfs dfs -xxx 的形式。
-ls 查看hdfs上目录,如 hdfs dfs -ls / -put 将本地文件上传到hdfs,如hdfs dfs -put 本地文件路径 hdfs路径 -get 将hdfs文件下载到本地,如 hdfs dfs -get hdfs文件路径 本地文件路径 -mkdir 在hdfs 上创建文件夹,如hdfs dfs -mkdir /test -cp 将hdfs文件或目录复制 如 hdfs dfs -cp /test.txt /a/
-cat 查看hdfs上文件内容 如hdfs dfs -cat /test.txt
-rm 删除文件 如hdfs dfs -rm /test.txt (如果需要删除目录,需要在-rm后面添加-r)
其实命令远不止这些,基本上在linux里面适用的命令,在hadoop中也可以使用。比如说chmod :修改文件属性 chgrp:修改文件分组等等。大同小异
3.运行一个hadoop实例:wordcount
这次我们运行的实例是使用mapreduce在yarn上跑一个计算单词出现个数的实例
先准备好文件,在里面写入一些单词
在根目录下创建文件夹 ” /input“
hdfs dfs -mkdir /input
将写好的文件上传到新创建的文件夹
hdfs dfs -put work.txt /input
通过操作使文件运行
hadoop jar /usr/local/soft/hadoop-2.7.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /input /output1
这里的/output1 即存储结果的地方可以先不事先创建,但 /input必须先提前创建
在浏览器中输入 master:50070 查询结果
得知结果文件名称为 part-r-00000
然后返回虚拟机获取文件并查看
hdfs dfs -get part-r-00000 /output1 cat part-r-00000
实例结束。